読者です 読者をやめる 読者になる 読者になる

leopardgeckoのブログ

Macの関連事項など

Mac版Inkscapeの日本語メニュー表示

MacInkscapeを起動するとメニューが英語で表示され、設定から日本語を選ぶとアプリが異常終了するようになってしまいます。これは何年も前から指摘されているバグのようなのですが、未だに修正されていません。本来Inkscapeは日本語も含めた多国語に対応しているので、正しく動作すれば日本語のシステムではデフォルトで日本語メニューが表示され、アプリの設定から他の言語を選べばその言語のメニューが表示されるはずなのです。

対応策として強制的に日本語メニューを表示させる方法が他サイトでいくつか紹介されているのですが、それは本来あるべき動作とは違うものです。日本語だけでなく他の言語を選べばその言語で表示させることもできるのが正しい動作と言えるでしょう。

そのための対策としては、

アプリ本体のInkscape.appを右クリックして、「パッケージの内容を表示」を選びます。そこからContents→Resources→binとフォルダをたどっていき、「bin」フォルダの中にある「inkscape」というファイルをテキストを編集できるアプリ(個人的にはCotEditorがオススメ)で開きます。

inkscape」を開いたら、その143行目の

tail -n1 | sed 's/\./ /' | awk '{print $2}'`"

というところを

tail -n1 | awk '{print $2}' | awk -F. '{print $1}'`"

に書き換えます。

これでバグが修正されてデフォルトで日本語表示されるようになり、設定で他の言語を選ぶとその言語で表示することも可能になります。例えば英語サイトのチュートリアルを参考にしたい場合には英語メニューにした方がわかりやすい時もあるでしょう。そういう時に簡単に切り替えることができます。

 

これで一件落着ですが、一応どうしてこの書き換えが必要になるのかを説明しておきます。使えればそれで良いという人は以下は読まなくても大丈夫です。

Inkscapeは表示言語の設定の際に「/usr/share/locale/locale.aliase」というファイルから各国語の設定用の文字列を抜き出す動作をしています。

「/usr/share/locale/locale.aliase」の一部を抜粋するとこんな感じのファイルです。

icelandic       is_IS.ISO-8859-1
italian it_IT.ISO-8859-1
japanese ja_JP.eucJP
japanese.euc ja_JP.eucJP
ja_JP ja_JP.eucJP
ja_JP.ujis ja_JP.eucJP
japanese.sjis ja_JP.SJIS
korean ko_KR.eucKR
korean.euc ko_KR.eucKR
ko_KR ko_KR.eucKR
lithuanian lt_LT.ISO-8859-13

この中から、日本語であれば「ja_」という文字列を検索してマッチした中から最後の行を取り出し、sedでピリオドをスペースに置換し、awkで二番目のフィールドを取り出して、その語尾に「.UTF-8」をくっつけて環境変数LANGとしてexportするという作業を行なっています。

この動作で他言語では正しい文字列を取り出すことができます。例えば日本語の上にあるアイスランド語(icelandic)とイタリア語(italian)ではそれぞれ「is_IS」と「it_IT」を取り出せるのですが、日本語の場合は最後の行の一番目のフィールドが「japanese.sjis」となっておりピリオドが入っているので、本来取り出したい「ja_JP」ではなく「sjis」を取り出してしまいます。これがエラーの原因となっています。

日本語でも他の言語でも同じように狙った文字列を取り出すためには、最後の行から2番目のフィールドを取り出してそこからピリオドの前の文字列を抜き出すという動作に書き換える必要があります。

「tail -n1 | awk '{print $2}' | awk -F. '{print $1}'」という記述はそのためのものです。