iOS应用程序Localization.strings文件名更改

时间:2016-01-28 08:33:42

标签: ios string localization

IOS应用程序通过Localizable.strings文件提供本地化支持。如果我想更改文件名有一些明显的原因,我必须把它放在那里。

任何人都可以帮忙。

2 个答案:

答案 0 :(得分:2)

iOS本地化如何运作:

正如您所知,iOS为获取本地化字符串提供了一个很好的API。

NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:key
                                                                   value:@""
                                                                   table:nil];

它还提供了一个快速访问的宏:

#define NSLocalizedString(key, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

iOS默认情况下会在 Localizable.strings 文件中查找字符串。但是,我们还可以为iOS提供自定义文件以查找字符串。这就是事情变得有趣的地方。

要提供自定义文件,我们可以按照以下方式使用上述API。

NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:key
                                                                   value:@""
                                                                   table:@"AnotherLocalizableStringsFile"];

table 参数采用字符串参数 AnotherLocalizableStringsFile ,这是包含字符串的文件。

另一个有趣的参数是 value 参数,该参数接收一个字符串,如果找不到与给定键匹配的字符串,则应返回该字符串。

因此,如果文件中存在提供的密钥 ,则下面的代码将返回无效密钥

NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:@"Wrong_key_passed"
                                                                   value:@"Invalid Key"
                                                                   table:@"TargetLocalizable"];

解决方案:

通过结合使用这两个有趣的参数,我们可以设计出一种方法来满足我们的要求。我们将要求iOS在目标特定字符串文件中查找特定于目标的字符串,并在加载所有目标通用的通用字符串时回退到 Localizablestrings 文件。

以下是这段代码的样子。

NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:@"Key"
                                                                   value:NSLocalizedString(@"Key", nil)
                                                                   table:@"TargetLocalizable"];

因此,iOS会在给定的 TargetLocalizable .strings文件中首先查找字符串。如果它没有找到它,它将搜索基础可本地化 .strings文件。

所以我所要做的就是将所有字符串放在可本地化 .strings文件中的所有目标中,并将特定于目标的附加和重写字符串放在 TargetLocalizable .strings文件。

答案 1 :(得分:0)

名称已修复' - 可本地化的名为Localizable。你只能决定不使用NSBundle本地化并推出自己的东西