*mlang.txt* For Vim バージョン 8.1. Last change: 2019 May 05 VIMリファレンスマニュアル by Bram Moolenaar
多言語機能
このマニュアルはメッセージとメニューを樣々な言語で使用する方法について書かれてゐる。マルチバイトテキストの編輯については |multibyte| を參照。
基本的なことはユーザーマニュアルでも說明されてゐる: |usr_45.txt|。
1. メッセージ | |multilang-messages| |
2. メニュー | |multilang-menus| |
3. スクリプト | |multilang-scripts| |
多言語のヘルプ機能については |help-translated| を參照のこと。
{|+multi_lang| 機能を無效にしてコンパイルした場合には利用できない}
Vim はシステム環境からロケール (地域情報) を判定する。ほとんどの場合これは、その言語が利用可能な狀態でさへあるならば、Vim を好みの言語で使ふことができることを意味してゐる。
システムによりサポートされるロケールの一覽を見るには、(UNIX では) これらのディレクトリを見る:
/usr/lib/locale /usr/share/locale
ロケール名には不幸にして大文字と小文字の違ひがある。また "-" と "_" の使はれ方にも用心すること。
現在の言語(言ひ換へればロケール)を表示する。
引數 "message" を使用するとメッセージに利用されてゐる言語が表示される。專門的には: LC_MESSAGES
引數 "ctype" を使用すると文字エンコードに利用されてゐる言語が表示される。專門的には: LC_CTYPEa
引數 "time" を使用すると strftime() が表示に利用する言語が表示される。專門的には: LC_TIME
無引數ならばロケールの全體が表示される (どのやうに表示されるかはシステムに依存する)。
現在の言語 (言ひ換へればロケール) を {name} に設定する。 {name}といふロケールがシステムに存在してゐなければならない。あるシステムでは "en" とか "en_US" と言つた別稱を受け付けるが、中には "en_US.ISO_8859-1" のやうに完全な指定しか受け付けないシステムもある。Unix では次のコマンドで、サポートされてゐるロケールを確認できる:
:!locale -a
引數 "message" を使用するとメッセージに利用する言語を設定する。これにより例として日本語を編輯中に英語メッセージを使用するやうなことができる。これは $LC_MESSAGES を設定する。
引數 "ctype" を使用すると文字エンコードに利用する言語を設定する。これは Vim がリンクしてゐるライブラリに影響を與へる。"C" や ’encoding’ と異なる値を指定するのは一般的ではない。これは $LC_CTYPE
を設定する。
引數 "time" を使用すると時刻と日附のメッセージに利用される言語を設定する。strftime() に影響を與へる。これは $LC_TIME
を設定する。
無引數ならば兩方が設定され、加へて $LANG
が設定される。
|+float| 機能付きでコンパイルされてゐる場合は、常に LC_NUMERIC が "C" にセットされ、浮動小數點數が小數點として ’.’ を使ふやうになる。
これは言語に依存した項目 (メッセージや時刻日附の書式) を變更することができる。全てのシステムで完全にサポートされるわけではない。
設定に失敗すればエラーメッセージが表示される。成功した場合には何も表示されない。例:
:language Current language: C :language de_DE.ISO_8859-1 :language mes Current messages language: de_DE.ISO_8859-1 :lang mes en
インストーラを利用した場合には、既にメッセージの飜譯が動作してゐる。動作しないのであれば libintl.dll を別途入手する必要がある:
http://sourceforge.net/projects/gettext
Or:
https://mlocati.github.io/gettext-iconv-windows/
これには xgettext, msgformat その他のツールも含まれてゐる。
libintl.dll は (g)vim.exe と同じディレクトリか、PATH
環境變數の値にリストされてゐるディレクトリのうちのひとつに置く必要がある。Vim はまた別名である "libintl-8.dll" と "intl.dll" を探す。
メッセージファイル (vim.mo) は "$VIMRUNTIME/lang/xx/LC_MESSAGES" に置かなければならない。"xx" はその言語名 の省略形 (ほとんどの場合 2 文字)に置き換へて考へる。
獨自の飜譯を書く場合には .po ファイルを作成しそれを .mo ファイルに變換する必要がある。そのためには Vim のソースを取得してファイル "src/po/README.txt" を讀む必要がある。
自動選擇された言語を變更するには、$LANG
に設定する。次の例は日本語メッセージを選擇する方法を示してゐる:
:let $LANG = "ja"
飜譯をしないやうにするには "en" を指定する。
(この Windows 向け文章は村岡太郞によつて書かれた)
{譯注: 譯注として追加されたわけでなく原文にこの記述がある}
基本 (特に ’langmenu’ の使ひ方) は |45.2| を參照。
Note:
メニューの飜譯が作られた後に元のメニューが變更された場合には、それらのメニューは英語のまま表示されることがある。そのやうな場合には飜譯のメンテナーに聯絡を取り更新するやうに賴んで欲しい。飜譯者の名前とメールアドレスはファイル "$VIMRUNTIME/lang/menu_<lang>.vim" の中に見つけることができる。
メニューに利用するフォント (もしくはフォントセット) を指定するには、|:highlight| コマンドを使用する。例:
:highlight Menu font=k12,r12
あいにく、同じ言語に同じエンコードであつても、ロケール名がシステムによつて異なることがある。期待した通りにメニューが飜譯されない時には、次のコマンドの實行結果を調べる:
echo v:lang
次に "$VIMRUNTIME/lang" ディレクトリを調べて同じ言語に使はれるメニュー飜譯ファイルを探す。"-" と "_" が違ふだけでファイルは見つけられなくなる。良くある閒違ひ "iso8859-1" と "iso_8859-1" にも用心する。幸ひ、Vim は全ての名前を小文字にするので、大文字小文字の區別を心配する必要はない。名前中の空白文字はエスケープするのではなくアンダースコア ("_") に變換される。
使ひたい言語用の、それと異なる名前のメニュー飜譯ファイルを見つけた場合は、獨自のランタイムディレクトリに讀み込まれるやうファイルを作成する。ファイルの名前は次のやうにする:
~/.vim/lang/menu_<v:lang>.vim
ファイルが檢索されるディレクトリを指定するオプション ’runtimepath’ を確認する。そのファイルに別の名前のメニューファイルを讀み込む、次のやうなコマンドを記入する:
runtime lang/menu_<other_lang>.vim
メニューを獨自に飜譯したい場合は、以下で說明するやうに |:menutrans| コマンドを使ふことができる。ある 1 つの言語の飜譯は 1 つの Vim script にまとめられることが推奬される。まだ飜譯が存在しない言語については、メンテナーになりその飜譯を全ての Vim ユーザーに提供することを是非とも考へていただきたい。Vim のメンテナーにメールを送つて欲しい。アドレスは <maintainer@vim.org> である。
メニューの飜譯をすべて削除する。
メニュー名 {english} を {mylang} に飜譯する。"&" と "<Tab>" の特別な文字も全て含まれる必要がある。半角スペースとピリオド (’.’) は |:menu| コマンドと同樣に、バックスラッシュ {譯注: ’\’} でエスケープする必要がある。{english} 內の大文字小文字は無視される。
例は $VIMRUNTIME/lang ディレクトリを參照。
飜譯をテストするには一旦全てのメニューを削除する必要がある。次のは Vim を再起動せずにそれを行ふ方法である:
:source $VIMRUNTIME/delmenu.vim :source <your-new-menu-file> :source $VIMRUNTIME/menu.vim
メニューパスの各部位は個別に飜譯される。"Help" が "Hilfe" に、"Overview" が "Überblick" に譯される時、結果的に "Help.Overview" は "Hilfe.Überblick" と飜譯される。
Vim script では現在の言語 (ロケールを) 取得するのに變數 |v:lang| を使ふことができる。デフォルトの値は "C" か環境變數 $LANG
の値になる。
以下の例は、この變數を使つたユーザーの好みの言語にメッセージを適合させる簡單な例を示してゐる,
:if v:lang =~ "de_DE" : echo "Guten Morgen" :else : echo "Good morning" :endif