我通过创建base.lproj故事板和3个字符串文件来本地化我的应用程序的一部分。这是一个月前,之后我向app添加了新的视图控制器,但是这个控制器的按钮和标签没有出现在字符串文件中
是否可以更新这3个故事板附加的字符串文件,或者我必须使用NSLocalizableString和Localizable.strings以编程方式添加新的字符串翻译?
答案 0 :(得分:257)
有两种选择:
Xcode可以通过将文件转换为 [Interface Builder Cocoa Touch Storyboard] 文件类型或 [Localizable Strings] 文件类型来“重新加载”文件。 / p>
使用ibtool提取故事板中的字符串。
使用此行提取字符串:
ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings
在ibtool将字符串提取到file_name.strings之后,您可以将其复制并粘贴到原始的.strings文件中
访问以获取更多信息:https://conyac.cc/business/columns/localization_guide_ios
答案 1 :(得分:61)
查看 BartyCrouch ,它可以完美地解决您的问题。此外,它还是开源,积极维护,并且可以在您的项目中轻松安装和集成。
通过Homebrew安装 BartyCrouch:
brew install bartycrouch
或者,通过Mint安装:
mint install Flinesoft/BartyCrouch
逐步更新您的Storyboards / XIBs字符串文件:
$ bartycrouch update
这将完全符合您的要求。
为了保持您的Storyboards / XIBs Strings文件随时更新我强烈建议您添加构建脚本(有关如何添加构建脚本的说明{{3} }):
if which bartycrouch > /dev/null; then
bartycrouch update -x
bartycrouch lint -x
else
echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi
除了逐步更新您的Storyboards / XIBs字符串文件外,这还将确保您的Localizable.strings
文件保持更新,并使用NSLocalizedString
代码中新添加的密钥并显示警告重复键或空值。
答案 2 :(得分:52)
您可以在本地化文件中手动添加密钥。您可以通过在storyboard编辑器上选择它来找到关键对象。我们来看一下身份检查器中的ABC-Personal-01.csv
ABC-Shared-01.csv
DEF-Personal-01.csv
DEF-Shared-01.csv
DEF-Shared-02.csv
GHI-Personal-01.csv
GHI-Personal-02.csv
GHI-Personal-03.csv
GHI-Shared-01.csv
。它看起来像Object-ID
在您的本地化更新或添加翻译。例如:
"nwc-b2-19c"
答案 3 :(得分:24)
这个不适合所有人,但它不需要终端中的其他工具,并且很容易进行小的手动更改。 (当你想自动化你的过程时,不要考虑这个。)
第0步:故事板语言设置
此步骤仅执行一次。
现在,当我向故事板添加内容时,我会执行以下操作
第1步:添加英语可本地化字符串文件
只需标记英文专列。
这将创建一个全新的英语可本地化字符串文件,其中包含所有行
第2步:将新订单项复制到其他语言文件中
并翻译它们
第3步:取消标记英文,删除相应的可本地化字符串文件
该文件只需要获取新订单项
这是一个简单快捷的过程,一切都在故事板编辑器中完成
修改强>
此过程适用于小型故事板。例如,我有一个基于标签的项目,每个标签都有一个故事板。
搜索“故事板参考”以查找教程。
很好的例子:Storyboard reference in Xcode, where should we use it?
所以每个小故事板只有几个字符串可以本地化。
答案 4 :(得分:15)
最后,我的解决方案是(基本但有效)复制以前的翻译并将它们粘贴到通过取消选中并检查本地化语言框创建的新文件中。
如果您只需要更改一两个文本,这在某些情况下非常有用。
答案 5 :(得分:13)
我认为最好的方法是使用内置的导出/导入本地化:
P.S。如果您不想在XLIFF编辑器中编辑并跳过第3步,则XCode无法保存新字符串。在这种情况下,在XLIFF编辑器中打开.xliff,无需更改即可重新保存并导入新文件。
答案 6 :(得分:5)
当您在情节提要板中单击时,例如Main.storyboard ...在右侧,您可以看到本地化菜单(请参阅atach图像)。如果取消选中并再次检查语言,将再次生成文件。因此,通常我会复制内容,然后再次生成文件,然后粘贴复制并已经翻译的内容。
这是我用来更新字典的方式。
答案 7 :(得分:4)
有一个名为AppleGlot的Apple命令行工具 app ,支持增量本地化。我还没有尝试过,但它看起来就像你搜索过的工具(不久前)。
答案 8 :(得分:4)
这是a script从故事板和xib中提取字符串,并将它们与现有翻译合并。
要在构建项目时自动运行脚本,请将脚本放入项目根目录,然后使用以下行将运行脚本阶段添加到项目设置中的目标构建阶段。
./mergegenstrings.py PathToSourceDir
或者,您可以根据需要手动在终端上运行脚本。
当Tha Leang回答时,脚本运行ibtool
。它还运行genstrings
来提取和合并源代码中标有NSLocalizedString
的字符串。该脚本基于a script in this post,它在运行genstrings
后合并字符串。
答案 9 :(得分:4)
我有一个巨大的故事板,里面有很多字符串。两种语言基于英语和另一种阿拉伯语。任务是向故事板添加一些字段和标签,并为它们添加本地化,而无需任何脚本和NSLocalizableStrings。
对我来说有帮助:
首先:确保你有git来防止意外的变化。
Editor
- > Export For Localization...
。在某处保存 ar.xliff 文件。答案 10 :(得分:2)
最简单且风险更低的方法是,只需从情节提要中复制对象ID,然后在本地化文件中为该键添加一个新键,如下例所示:
1 :从情节提要中复制对象ID如下:
2 :在本地化文件中添加新密钥,如下所示:
"DjF-dn-0ay.text" = "Borrar datos y restablecer";
注意:如果您只想更新少量组件,则这种方法的风险较小,否则可以为情节提要重新创建本地化文件。
答案 11 :(得分:1)
Xlifftool可作为Mac应用程序使用,并且运行良好。它显示了info.plist,可本地化的字符串和情节提要中的所有可翻译字符串和对象。
在Mac上获取该文件:https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12
步骤1:在Xcode中,在项目导航器中选择项目文件夹。然后选择“编辑器/导出以进行本地化...
您的可翻译字符串将以您在Xcode中选择用于本地化的语言包含在xliff文件中。
第2步:使用xlifftool打开该文件,然后翻译或更新以前完成的翻译。
第3步:然后使用“编辑器/导入本地化...”上传回到项目中。
答案 12 :(得分:1)
选项1
Xcode可以通过将文件转换为[Interface Builder Cocoa Touch Storyboard]
文件类型或[Localizable Strings]
文件类型来“重新加载”文件。
从 Project Navigator 中选择基本的故事板文件
在文件检查器中找到本地化部分。
如果您的文件当前是[Localizable Strings]
,请将其更改为[Interface Builder Cocoa Touch Storyboard]
,反之亦然。
Xcode应该将您的情节提要板转换为当前版本,同时保留您以前的本地化工作。如果需要,您可以在此处将文件更改回原始文件类型。
选项2
使用ibtool
提取情节提要中的字符串。
打开终端应用程序
找到您的Base.lproj
目录
使用此行提取字符串:
ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings
ibtool将字符串提取到file_name.strings
之后,您可以将其复制并粘贴到原始.strings
文件中。
答案 13 :(得分:0)
这是我将新文本从storyboard或xib更新为本地化字符串
的简便方法1-使用此脚本http://tredje.se/dev/trouble/?x=entry:entry150917-204052
2- 选择您要更新的本地化字符串并将语言字符串从“本地化字符串”切换为“界面构建器故事板”
3-切换回来:)
完成。强>
答案 14 :(得分:0)
添加新语言以进行本地化。一个你不需要的。
它会生成例如 Indonesia.strings,其中将包含您需要的所有故事板按钮名称等,将它们全部复制并粘贴到您拥有的所有其他 language.string 文件中。