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

Sal*_*hag 3 string localization ios

IOS应用程序通过Localized.strings文件提供本地化支持。如果我想出于某些明显的原因更改文件名,我必须将该引用放在哪里。

任何人都可以帮忙吗?

Ane*_*war 5

iOS 本地化的工作原理:

\n\n

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

\n\n
NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:key\n                                                                   value:@""\n                                                                   table:nil];\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
#define NSLocalizedString(key, comment) \\\n        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:key\n                                                                   value:@""\n                                                                   table:@"AnotherLocalizableStringsFile"];\n
Run Code Online (Sandbox Code Playgroud)\n\n

参数采用字符串参数AnotherLocalizedStringsFile,它是包含字符串的文件。

\n\n

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

\n\n

因此,假设文件中不存在提供的密钥,下面的代码将返回Invalid Key

\n\n
NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:@"Wrong_key_passed"\n                                                                   value:@"Invalid Key"\n                                                                   table:@"TargetLocalizable"];\n
Run Code Online (Sandbox Code Playgroud)\n\n

解决方案:

\n\n

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

\n\n

Here\xe2\x80\x99 是这段代码的样子。

\n\n
NSString *stringValue = [[NSBundle mainBundle] localizedStringForKey:@"Key"\n                                                                   value:NSLocalizedString(@"Key", nil)\n                                                                   table:@"TargetLocalizable"];\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,iOS 首先在给定的TargetLocalized .strings 文件中查找字符串。如果\xe2\x80\x99 在那里找不到它,它将在基本可本地化的.strings 文件中搜索。

\n\n

因此,我所要做的就是将所有目标通用的所有字符串放入Localized .strings 文件中,并将特定于目标的附加字符串和覆盖字符串放入TargetLocalized .strings 文件中。

\n