私の「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)
したがって、ファイルの先頭にあるこれらの 8 進文字 \377 および \376 は、一種の utf-16-le BOM のように見えます。これは、各文字の後に \0 が続く理由を説明しています (UTF-16 は、この場合はUTF-8)。
これは正常/有用/有害ですか?
また、標準の *nix ツール ( grep
、sed
、awk
) は 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」クライアント) は、私がしない限り違いを表示できません。:
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 には次のように書かれています。
注: Localizable.strings ファイルが Unicode (UtF-16) であると Xcode が警告する場合は、ファイル インスペクタを使用して Unicode (UTF-8) に変換できます。
では、BOM を削除/無視する必要がありますか?
genstrings
UTF-8 ファイルを生成するオプションはないようです。
ファイルを変換する必要がありますか?