auto

iOS アプリの開発をしていて不便だと思っていたのが、Localizable.strings の差分が git diff で確認できないことでした。

差分のプレビューを見ると、Binary files とだけ書いてあって、どのような差があるのかわからないため、困っていました。

$ git diff

diff --git a/Localizable.strings b/Localizable.strings
index 84cef5f..42b4302 100644
Binary files a/Localizable.strings and b/Localizable.strings differ

こんな感じで表示されるので、毎回 FileMerge などの外部差分ツールを使って確認していました。どうにかならないかと思っていたら、その問題を解決しているのを見つけたので、紹介します。

手順

~/.gitconfig または .git/config に以下の内容を追記します。

[diff "localizablestrings"]                  
    textconv = "iconv -f utf-16 -t utf-8"

次に .git/info/attributes に以下の内容を追記します。attributes ファイルがない場合は、新規に作成します。

    textconv = "iconv -f utf-16 -t utf-8"

これでもう一度差分を見ると…

$ git diff

diff --git a/Localizable.strings b/Localizable.strings
index 84cef5f..42b4302 100644
--- a/Localizable.strings
+++ b/Localizable.strings
@@ -6,3 +6,6 @@
 /* OK */
 "OK" = "はい";

+/* Error */
+"Error" = "エラー";
+

この通りきちんと表示されています! Localizable.strings が UTF-16LE なので、iconv で UTF-8 に変換して表示しているのですね。素晴らしい!!

参考

$ git diff Localizable.strings