我想开始了解我们在本地化字符串方面的 iOS 代码有多全面。我们还没有准备好去翻译,但我想开始使用伪本地化进行测试。在 Localizable.strings 文件中自动化这个过程应该很容易,但我似乎找不到任何工具可以做到这一点。坦率地说,我会对一个将我的所有字符串都更改为“不是英语!”的脚本感到满意。如果存在这样的事情。
5 回答
您可以使用翻译工具包来实现这一点。
首先,您需要使用prop2po转换器将.strings文件转换为PO:
$ prop2po Localizable.strings en.po
这将创建一个PO文件,其中Localizable.strings文件的字符串作为源字符串(在这种情况下,我使用英语作为源)。
获得PO文件后,使用podebug以所需的重写格式对其进行重写。
$ podebug --rewrite=unicode en.po en_rewritten.po
最后将其转换回.strings格式(注意,您需要将原始Localizable.strings文件作为模板传递):
$ po2prop en_rewritten.po rewritten.strings -t Localizable.strings
生成的文件将如下所示:
"Account: %@" = "Ȧƈƈǿŭƞŧ: %@";
"Add command" = "Ȧḓḓ ƈǿḿḿȧƞḓ";
"Add connection." = "Ȧḓḓ ƈǿƞƞḗƈŧīǿƞ."
我遇到了这里尚未提到的两个解决方案:
一个在 Mac App Store 上调用的免费应用程序,它根据您的源代码(拖放)生成伪本地化的 .strings 文件。它生成与问题中提供的 OP 类似的字符串。
https://itunes.apple.com/us/app/pseudolocalizer/id503026674?mt=12
在线翻译服务 Babble-on 提供基于现有 .strings 文件的免费伪本地化 .strings 文件(其他选项可用)。他们有额外的选项来生成比原始英语更长的字符串来测试你的 GUI。
尽管 Translate Toolkit 可以提供解决方案,但我一直在寻找使用 bash 脚本的更简单方法。创建 [changesDictionary.txt] 文件(请参阅本文末尾的格式)并使用语言文件作为参数运行以下脚本:
# This script translate iOS strings file into pseudo languge for texting usage.
# the script create a sed change and replace file based on [changesDictionary.txt].
# the loop run across the input string file (ie. myFyle.strings)
# and replace the secong strings with the dictionary values.
# since the strings file is in BOM format (http://en.wikipedia.org/wiki/Byte_order_mark)
# the input is converted from UTF16 to UTF8.
sed -e 's/^"\(.*\)" = "\(.*\)"$/s\/\1\/\2\/g/' changesDictionary.txt > changesDictionary.sed
FILENAME=$1
while read -r; do
if [[ $REPLY = '/*'* ]] ; then
echo "$REPLY"
else
if [[ $REPLY = '' ]] ; then
echo "$REPLY"
else
if [[ $REPLY = '"'* ]] ; then
changes2=$(echo "$REPLY" | cut -d= -f2 | sed -f changesDictionary.sed)
changes1=$(echo "$REPLY" | cut -d= -f1 )
echo "$changes1=$changes2"
echo "$REPLY"
fi
fi
fi
done < <(iconv -f UTF-16 -t UTF-8 $FILENAME) | iconv -f UTF-8 -t UTF-16 >$FILENAME.new
该脚本会查找以下格式的 [changeDictionary.txt] 文件:
"a" = "á"
"b" = "β"
"c" = "ç"
"d" = "δ"
"e" = "è"
"f" = "ƒ"
"g" = "ϱ"
"h" = "λ"
"i" = "ï"
"j" = "J"
"k" = "ƙ"
"l" = "ℓ"
"m" = "₥"
"n" = "ñ"
"o" = "ô"
"p" = "ƥ"
"q" = "9"
"r" = "ř"
"s" = "ƨ"
"t" = "ƭ"
"u" = "ú"
"v" = "Ʋ"
"w" = "ω"
"x" = "ж"
"y" = "¥"
"z" = "ƺ"
"\ñ" = "\n"
"$δ" = "$d"
"$ï" = "$i"
您可以使用此示例或创建您自己的示例,请注意文件中的最后 3 个更改字符串。这是为了将行尾和参数恢复到正常状态。我选择了这种方法来简化脚本(我认为性能没有优化)。
我们提供伪本地化作为我们在 Tethras ( www.tethras.com ) 服务的一部分。伪本地化是免费的。我们会重音您的字符串中的所有字符,并将文本的长度延长 30%。这不仅可以帮助您测试硬编码字符串,还可以让您了解由于翻译过程中的文本扩展而导致的布局发生了什么。
例子:
纯文本
Wè prôvïdè psèúdô lôçálïzátïôñ ás párt ôƒ ôúr sèrvïçè át Tèthrás (www.tèthrás.çôm)。ôñè twoô thrèè ƒôúr ƒïvè sïx Psèúdô lôçálïzátïôñ ïs ƒrèè。ôñè twô thrè Wè áççèñt áll ôƒ thè çháráçtèrs ïñ ¥ôúr strïñgs áñd èxtèñd thè lèñgth ôƒ thè tèxt b¥ 30%。一二三ƒôúrƒïvè六这将有助于¥OU测试不ONL¥ƒôr硬编码的字符串,而且还会让¥欧看看会发生什么¥对La¥出局由于文本增加在翻译过程中。ôñè twoô thrèè ƒôúr ƒïvè sïx sèvèñ èïght ñïñè tèñ
可本地化的字符串
"Bring All to Front" = "Brïñg Áll tô ƒrôñt ôñè twô";
"Hide" = "Hïdè 12";
"Quit" = "Qúït 12";
"Hide Others" = "Hïdè Óthèrs ôñè ";
希望在翻译之前测试您的应用程序的本地化能力,这点值得称赞。这将在实际翻译过程中为您节省大量时间和精力。
您可以使用genstrings
Apple 提供的工具。这一切都在资源编程指南的字符串部分进行了解释