我已经在我的应用中实现了多语言,并创建了多个Localizable.strings
文件。
我在Localizable.strings (Base)
文件中拥有所有字符串键和值,因为如果特定语言字符串文件中缺少垂直字符串(例如, Localizable.strings (Japanese)
文件中缺少Japanese
和一些字符串,因此我希望从Base
获得字符串翻译。
但这没有发生,这就是我的问题。
答案 0 :(得分:2)
我遇到了同样的问题,并采用了此解决方案:
DefaultEnglish.strings
)创建新的默认String本地化文件
例如:"hello_key" = "Hello"
Localizable.strings
文件添加其他语言支持
例如:日文字符串:"hello_key" = "こんにちは"
创建字符串extension
extension String {
func localizedStringKey(bundle _: Bundle = .main, tableName: String = "Localizable") -> String {
return NSLocalizedString(self, tableName: tableName, value: "\(NSLocalizedString(self, tableName: "DefaultEnglish", bundle: .main, value: self, comment: ""))", comment: "")
} }
并设置字符串"hello_key".localizedStringKey()
答案 1 :(得分:1)
本地化应用程序时,无需使用Base
Localizable.strings
文件。
按以下方式本地化字符串...
NSLocalizedString("DISMISS_BUTTON", value: "Press To Dismiss", comment: "Button used to dismiss the payment screen")
然后,key
(第一个参数)用于在Localizable.strings
中查找给定的语言。如果找不到,它将使用字符串中的value
参数作为后备。
如果您使用Xcode的本地化导出…,则xliff文件将包含您所有NSLocalizedString
的密钥
您唯一需要使用Base
Localizable.strings
的原因是对于在源代码中不会显示为字符串的键,例如
let localisableName = "LAYOUT_NAME_" + name.uppercased()
NSLocalizedString(localisableName)
在这种情况下,您应该添加
"LAYOUT_NAME_WHATEVER" = "Whatever";
到您的base
文件中,该文件也将包含在生成的xliff中
答案 2 :(得分:1)
否,没有可用文件的特定本地化版本时,将使用基本本地化文件。 例如。如果您的应用具有英语的基本本地化语言,并且您添加了法语的本地化语言,则法语以外的语言将获得英语值。
NSLocalizedString(key,comment)
的{{3}}很清楚-
字符串文件中
key
的初始值为key
。使用NSLocalizedStringWithDefaultValue
宏可为其指定另一个值 键。
您还希望它返回什么?该代码只是在字典中查找键。它不知道该密钥与什么消息相关联,更不用说如何将该消息翻译成俄语了。