Ios Localizable.strings(基本)文件字符串未被iPhone中设置的其他语言读取?
我在我的应用程序中实现了多语言,并创建了多个Ios Localizable.strings(基本)文件字符串未被iPhone中设置的其他语言读取?,ios,swift,localizable.strings,Ios,Swift,Localizable.strings,我在我的应用程序中实现了多语言,并创建了多个可本地化的.strings文件 我在Localizable.strings(Base)文件中有所有字符串键和值,如果特定语言字符串文件中缺少特定字符串,则将其作为从所有其他语言读取的默认文件,例如Localizable.strings(日语)和一些字符串在日语文件中丢失,因此我希望从Base获得字符串翻译 但它没有发生,这是我的问题 本地化应用程序时,无需使用基本可本地化的.strings文件 将字符串本地化如下 NSLocalizedString(
可本地化的.strings
文件
我在Localizable.strings(Base)
文件中有所有字符串键和值,如果特定语言字符串文件中缺少特定字符串,则将其作为从所有其他语言读取的默认文件,例如Localizable.strings(日语)
和一些字符串在日语文件中丢失,因此我希望从Base
获得字符串翻译
但它没有发生,这是我的问题 本地化应用程序时,无需使用基本可本地化的.strings
文件
将字符串本地化如下
NSLocalizedString("DISMISS_BUTTON", value: "Press To Dismiss", comment: "Button used to dismiss the payment screen")
然后使用key
(第一个参数)查找给定语言的可本地化.strings
。如果找不到,它将使用字符串中的值
参数作为回退
如果使用Xcode的导出进行本地化…,xliff文件将包含所有NSLocalizedString
中的密钥
唯一需要基可本地化的.strings
的时候是用于源代码中不显示为字符串的键,例如
let localisableName = "LAYOUT_NAME_" + name.uppercased()
NSLocalizedString(localisableName)
在这种情况下,您应该添加
"LAYOUT_NAME_WHATEVER" = "Whatever";
对于您的基本
文件,它也将包含在生成的xliff中否,当没有可用文件的特定本地化版本时,将使用基本本地化文件。
例如,如果您的应用程序具有英语的基本本地化,并且您添加了法语本地化,则法语以外的语言将获得英语值
NSLocalizedString(key,comment)
的用法非常清楚-
字符串文件中key
的初始值将为key
。使用
NSLocalizedStringWithDefaultValue
宏为指定另一个值
钥匙
你还指望它会回来什么?代码只是在字典中查找键。它不知道什么信息与密钥相关,更不用说如何将该信息翻译成俄语了。我遇到了同样的问题,并应用了此解决方案:
为英语创建新的默认字符串本地化文件(DefaultEnglish.strings
)
例如:“hello\u key”=“hello”
将其他语言支持添加到本地化.strings
文件
例如:日语字符串:“hello_key”=”こんにちは"代码>
创建字符串扩展名
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()
基本字符串文件中是否有多个语言字符串,或者只有日语字符串?基本字符串具有所有英语字符串的翻译,如果调试器没有找到日语字符串,则默认情况下它应该从基本文件中选取。是的,必须这样做。您现在看到的字符串是什么?@AnkitJayaswal我只能看到我正在尝试使用的键当我的iPhone语言是日语时访问。顺便说一句,最好检查NSLocalizedString返回的值,如果我们没有这样的键,我们应该采取一些措施,例如,写一条日志消息。