如何在Localizable.strings中管理本地化字符串

时间:2016-05-11 19:58:11

标签: ios localization

我开始整理一个已经开发了好几年的大型客户项目。

它大量使用NSLocalizedString()宏来向系统询问硬编码到程序中的字符串常量的本地化版本。

如果在源目录上运行genstrings命令行工具,它将找到调用NSLocalizedString()时引用的所有常量字符串,并创建Localizable.strings的起始版本。然后,您将这个起始Localizable.strings文件提供给您的翻译人员,他们以起始语言(本例中为英语)开始使用Localizable.strings,并为每种支持的语言创建Localizable.strings版本。

问题在于,在某些情况下,我从数据结构中获取字符串。在这种情况下,我在变量中有源字符串。

The genstrings utility does not know how to handle this case:

#define K_STRING_TO_LOCALIZE @“This is the string to localize"
...
NSString *localizedString = NSLocalizedString(K_STRING_TO_LOCALIZE, nil);

或者这种情况:

NSString *stringToLocalize = @“This is the string to localize";
...
NSString *localizedString = NSLocalizedString(stringToLocalize, nil);

(假设在上述两种情况下,字符串都在其他地方定义。)

在这种情况下,您需要手动将“边缘大小写”字符串添加到Localizable.strings

但是,如果您再进行新的开发并添加更多字符串,则需要更多调用 NSLocalizedString(),你不能再次在你的程序上运行genstrings,而不会覆盖你手动输入的字符串。

Localizable.strings似乎不支持#import语句,因此您也不能将一个以编程方式生成的字符串块进行本地化,也不能为边缘情况手动输入单独的块。

管理此选项有哪些选择?

编辑:

更好的例子:

我的共享Utils对象中有一个名为showAlertControllerWithTitle:message:showCancelButton:okButtonAction:的函数,它显示警报控制器的自定义变体。

在内部,该函数对传递给它的标题和消息参数调用NSLocalizedString。这样您就不必为每个调用编写所有样板代码。 这是一个示例调用:

[[Utils sharedUtils] 
  showAlertControllerWithTitle: @"Error loading collection file"
  message: message
  showCancelButton: FALSE
  okButtonAction: nil];

以编程方式生成消息字符串。标题字符串是固定的字符串。

但是,由于showAlertControllerWithTitle函数使用变量调用NSLocalizedString,而不是编译时常量字符串,因此genstrings工具不会“看到”该字符串并将其添加到Localized.strings文件中。 / p>

0 个答案:

没有答案