Geo*_*org 18 localization nslocalizedstring ios
我有一个本地化为16种语言的iOS项目.只有一些单词没有本地化(主要是那些进入更新并且本地化办公室没有及时交付的单词).对于我的钥匙,我不使用英语措辞,因为如果翻译人员愿意,这也会改变.所以现在如果我没有语言的翻译,如果我回到我使用的密钥.但由于这个关键不是"人类可读的"或至少不是"人类阅读的乐趣",这是一个问题.
我做了一些研究,但无法找到解决我确切问题的方法.我有:
Localizable.strings in en.lproj
@"Key1" = @"Value 1"
@"Key2" = @"Value 2"
Localizable.strings in de.lproj
@"Key1" = @"Wert 1"
// Note that @"Key2" is missing here in my de.lproj
I would expect that if I make NSLocalizedString(@"Key2", ...)
and am running on a german phone, it falls back to the english
translation for this key as it exists...
Run Code Online (Sandbox Code Playgroud)
所以现在我只是将英文翻译复制到缺少的Localizable.strings文件中.但这是一个大黑客!而且使用英语单词作为键似乎对我来说是一个黑客!
有没有办法告诉我的应用程序,如果没有给定密钥的值,它应该使用fe english作为后备?我尝试添加基本本地化但这没有帮助...
非常感谢
cjw*_*rth 15
据我所知,没有"官方"的方法可以做到这一点,但我之前已经实现了这样的功能:
NSString * L(NSString * translation_key) {
NSString * s = NSLocalizedString(translation_key, nil);
if (![[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"] && [s isEqualToString:translation_key]) {
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
借鉴自:https://stackoverflow.com/a/8784451/1403046
基本上,不是NSLocalizedString(),它将返回输入字符串,如果需要,此版本将回退到英语.
public func LS(_ key: String) -> String {
let value = NSLocalizedString(key, comment: "")
if value != key || NSLocale.preferredLanguages.first == "en" {
return value
}
// Fall back to en
guard
let path = Bundle.main.path(forResource: "en", ofType: "lproj"),
let bundle = Bundle(path: path)
else { return value }
return NSLocalizedString(key, bundle: bundle, comment: "")
}
Run Code Online (Sandbox Code Playgroud)
许多开发人员希望不完整的翻译会退回到开发语言......但这不是Apple 选择的行为方式。我有一个伪代码来帮助更好地理解 Apple 如何选择回退。
| 归档时间: |
|
| 查看次数: |
3719 次 |
| 最近记录: |