在Swift中处理本地化字符串的另一种方法

在Swift中处理本地化字符串的另一种方法

该帖子最初发表在dcordero.me中。 在这里,您将始终找到更新的版本。

在iOS开发中,处理本地化字符串从来都不是一件容易的事。

苹果公司从来没有提供过一种干净,有条理的方式来解决这个问题的好方法,并且最后我们的字符串往往分散在整个项目中。

另外,根本没有任何语法验证的Localizable.strings文件是一种非常容易出错的处理字符串的方法,这使得在运行时甚至生产环境中都容易出现问题。

甚至更糟糕的是,由于NSLocalizedString的语法令人毛骨悚然,因此很容易受到其中一种扩展的诱惑,这些扩展有助于创建完全没有任何上下文注释的字符串…

然后在文件检查器菜单中按“本地化”按钮

然后,您可以根据需要在此新文件中编写和组织字符串,包括自定义结构以及上下文注释。 在下图中,您可以找到一个非常简单的示例,其中包含一些字符串:

在这里,我们绝对可以比Localizable.strings灵活得多,我们可以创建组(字典或数组)以按节组织字符串,并且Xcode始终保证文件格式

2.在应用程序中使用Plist中的字符串

能够从我们的代码以简单的方式加载plist中定义的字符串会很好,对吗?

实际上,使用Swift只需几行代码,这是一个非常简单的问题。

现在,我们可以以非常简单的方式获取字符串,就像:

并且…不必担心缺少上下文注释,因为它们已经在我们的plist中定义了,还记得吗?

3.但是伙计! 哪里是我的Localizable.strings文件,我需要将其导出到X网站

公司通常使用POEditor.com,webtranslate.it等将外部字符串的翻译委托给外部服务,而这些公司通常会导入Localizable.strings文件。

就像我之前说的,使用Swift执行此类任务非常容易。

我们可以实现自定义genstrings工具来生成Localizable.strings文件,该文件与源文件不兼容,但与字符串的真实源(即plist文件)兼容

  dcordero @ grog:〜$ ./genstrings.swift Localizable.plist 
  / *接受动作的通用字符串* / 
“ Accept” =“ Aceptar”;
  / *取消操作的通用字符串* / 
“取消” =“取消”;
  / *登录屏幕上的用户名标签* / 
“ Username” =“ Usuario”;
  / *登录屏幕上的“忘记密码”标签的操作* / 
“ ForgotPassword” =“¿Olvidaste laconverséña?”;
  / *登录屏幕中的密码标签* / 
“ Password” =“Contraseña”;

实际上,如果同一脚本还可以选择将生成的结果直接发送到您的外部服务,那可能是一个很棒的功能吗?……而且使用它们的API并不难。

但是,由于它取决于您的特定外部服务,因此由您自己决定…

特别感谢phelgo和Chris Goldsby的Beta版阅读