可以在运行时添加.strings资源文件吗?

Joe*_*asq 11 macos cocoa localization objective-c ios

我知道在Mac应用程序中,可以将.strings文件添加到项目文件夹以添加本地化.

是否有任何方法可以将其他本地化添加到应用程序(iOS或Mac OS),而无需在编译时从资源包中加载它们.比如说,下载一个额外的本地化并将其存储在iOS上的/ Documents中?

Dav*_*ong 19

是的,但这不是你的想法.

您可以获取一个字符串文件并将其加载到一个NSString,然后使用它将其转换为字典-[NSString propertyListFromStringsFileFormat].

这将为您提供一种在内存中存储自定义翻译字符串的方法.

至于实际使用它,你必须定义自定义翻译功能.IE,你不能再NSLocalizedString()和朋友一起使用了.幸运的是,genstrings(用于生成字符串文件的实用程序)允许您指定自定义函数名称:

genstrings -s "JPLocalizedString" ...
Run Code Online (Sandbox Code Playgroud)

这意味着在代码中,您可以定义:

NSString* JPLocalizedString(NSString *key, NSString *comment) {
  return [myLoadedStrings objectForKey:key];
}
Run Code Online (Sandbox Code Playgroud)

以及JPLocalizedStringFromTable(),JPLocalizedStringFromTableInBundle(),JPLocalizedStringWithDefaultValue(). genstrings将拿起所有这些.(换句话说,仅仅因为NSLocalizedString是一个宏并不意味着你的版本必须)

如果您这样做并使用这些JPLocalizedString变体,那么genstrings仍然会为您生成字符串文件(假设您使用该-s标志).

调用这些函数后,您可以使用所需的任何查找机制,NSLocalizedString如果找不到任何内容,则默认返回版本.