由genstrings

时间:2016-05-31 09:51:08

标签: ios swift unicode character-encoding genstrings

在我的“ViewController.swift”中,我有一个本地化的字符串:

TheOutLabel.text = NSLocalizedString("hello", comment: "The \"hello\" word")

在终端中,为了生成“Localizable.strings”文件,我键入了:

cd Base.lproj/; genstrings ../*.swift; cat Localizable.strings

并得到以下结果:

??/* The \"hello\" word */
"hello" = "hello";

输入od -c Localizable.strings时,我得到:

0000000  377 376   /  \0   *  \0      \0   T  \0   h  \0   e  \0      \0
0000020    \  \0   "  \0   h  \0   e  \0   l  \0   l  \0   o  \0   \  \0
0000040    "  \0      \0   w  \0   o  \0   r  \0   d  \0      \0   *  \0
0000060    /  \0  \n  \0   "  \0   h  \0   e  \0   l  \0   l  \0   o  \0
0000100    "  \0      \0   =  \0      \0   "  \0   h  \0   e  \0   l  \0
0000120    l  \0   o  \0   "  \0   ;  \0  \n  \0  \n  \0                

当我输入file Localizable.strings时,它会说:

Localizable.strings: Little-endian UTF-16 Unicode c program text

当我使用“emacs”打开文件时,它不会显示这些字符,当我输入M-x describe-current-coding-system RET时,它会显示:

Coding system for saving this buffer:
  U -- utf-16le-with-signature-unix (alias: utf-16-le-unix)

所以,看起来文件开头的这些八进制字符\ 377和\ 376看起来像一个utf-16-le BOM,这解释了为什么每个字符后跟一个\ 0(UTF-16是在这种情况下,比UTF-8大两倍。)

这是正常/有用/有害吗?

此外,标准的* nix工具(grepsedawk)无法正确处理utf-16文件:

grep '=' Localizable.strings 
Binary file Localizable.strings matches

grep -a '=' Localizable.strings | sed -e 's/ = //'
"hello" = "hello";

另外,我编辑了Localizable.strings以"hello";替换"Hello";。然后“SourceTree”(我的“git”客户端)无法显示差异,除非我这样做,如Can I make git recognize a UTF-16 file as text?中所建议的那样:

echo '*.strings diff=localizablestrings' > .../.git/../.gitattributes
echo '[diff "localizablestrings"]' >> .../.git/config
echo '  textconv = "iconv -f utf-16 -t utf-8"' >> .../.git/config

Apple的Internationalization and Localization Guide说:

  

注意:如果Xcode警告您显示Localizable.strings文件   是Unicode(UtF-16),您可以使用它将其转换为Unicode(UTF-8)   文件检查员。

那么,我应该删除/忽略BOM吗?

似乎没有genstrings选项来生成UTF-8文件。

我应该转换文件吗?

0 个答案:

没有答案