我希望在我的应用程序中有一个选项来更改我的应用程序语言(只是应用程序语言而不是整个系统),请您给我一些提示?
提前致谢,
我知道本地化!
答案 0 :(得分:2)
您可以使用从Xcode设置的自定义构建标志来执行此操作。这样,您可以在本地化下运行应用程序,而不是更改设备的所有设置。
我在http://abizern.org/2012/03/18/simple-localisation-testing/
写了一篇关于它的博客文章在Github上有一个示例项目,您可以使用它来查看它的实际运行:https://github.com/Abizern/SimpleLocalisationTesting
答案 1 :(得分:1)
我已经完成了由.plist填充的字典数组的自定义本地化。像这样:
kYes
en = @"Yes"
ru = @"Да"
kNo
en = @"No"
ru = @"Нет"
在我的项目中,我创建了一个用于读取此字符串的单例类。在选项中,用户选择所需的语言(首先启动应用程序从当前系统状态选择语言或设置默认语言)。所选语言必须保存在文件或设置中,以便在下次启动时使用。
在单身人士中我有+getStringWithKey:
。所以我通过那里@“kYes”并获取当前本地化的字符串仅适用于app。此外,您还需要将标准本地化文件添加到项目中,甚至是空的,因为如果不这样做,您支持的所有语言都不会显示在iTunes中。
答案 2 :(得分:1)
我实际上正在考虑关于如何更改应用程序中的语言的另一个想法,尽管它会强制您1.手动设置所有字符串2.提供一种方法(通知),在语言设置时更新所有ui元素已经改变。 该想法基于iOS用于查找字符串的本地化版本的相同方法。因此,作为先决条件,您必须提供包含文件夹结构language_id.lproj的包(例如AppNameStrings.bundle),其中language_id是您要提供的语言的指示符。您可以通过创建设置包,在Finder中打开它并删除root.plist文件来创建这样的包。接下来,您需要一个可用于从捆绑中读取的功能。以下是我用来读取本地化字符串的两种方法。 将以下方法放在GlobalDefinitions.h文件中
#ifdef __OBJC__
NSBundle *yourNameBundle(void);
NSString *YourNameLocalized(NSString *stringToken, NSString *language);
#endif
以及GlobalDefinitions.m文件中的此代码
NSBundle *yourNameBundle(void) {
static NSBundle* bundle = nil;
if (!bundle) {
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"];
bundle = [NSBundle bundleWithPath:path];
}
return bundle;
}
NSString *YourNameLocalized(NSString *stringToken, NSString *language) {
if (yourNameBundle()) {
return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language];
} else {
return stringToken;
}
}
您必须在NSBundle上为
创建一个类别[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]
因为标准方法错过了语言参数。在您的方法中,您打开相应的language.lproj / Root.strings文件并扫描它以获取stringToken。如果找不到它,则返回令牌本身,否则返回文本字符串。 只要您需要某些文本的本地化版本, label.text = YourNameLocalized(@“Token”,[self provideLanguageIdentifier);你完成了 到目前为止我还没有这样做,但它应该有用。