vim-jp / vimdoc-ja / mlang

mlang - Vimドキュメント

メインヘルプファイルに戻る
mlang.txt     For Vim バージョン 8.2.  Last change: 2020 Aug 15


                VIMリファレンスマニュアル    by Bram Moolenaar


多言語機能                                      multilang multi-lang

このマニュアルはメッセージとメニューを様々な言語で使用する方法について書かれて
いる。マルチバイトテキストの編集についてはmultibyteを参照。

基本的なことはユーザーマニュアルでも説明されている: usr_45.txt

1. メッセージ                   multilang-messages
2. メニュー                     multilang-menus
3. スクリプト                   multilang-scripts

多言語のヘルプ機能についてはhelp-translatedを参照のこと。

{+multi_lang機能を無効にしてコンパイルした場合には利用できない}

==============================================================================
1. メッセージ                                           multilang-messages

Vimはシステム環境からロケール(地域情報)を判定する。ほとんどの場合これは、その
言語が利用可能な状態でさえあるならば、Vimを好みの言語で使うことができることを
意味している。

システムによりサポートされるロケールの一覧を見るには、(UNIXでは)これらのディレ
クトリを見る:
        /usr/lib/locale
        /usr/share/locale
ロケール名には不幸にして大文字と小文字の違いがある。また "-" と "_" の使われ方
にも用心すること。

                                            :lan :lang :language E197
:lan[guage]
:lan[guage] mes[sages]
:lan[guage] cty[pe]
:lan[guage] tim[e]
:lan[guage] col[late]
                        現在の言語(言い換えればロケール)を表示する。
                        引数 "message" を使用するとメッセージに利用されている
                        言語が表示される。専門的には: LC_MESSAGES
                        引数 "ctype" を使用すると文字エンコードに利用されてい
                        る言語が表示される。専門的には: LC_CTYPE
                        引数 "time" を使用するとstrftime()が表示に利用する言語
                        が表示される。専門的には: LC_TIME
                        引数 "collate" を使用すると照合に利用する言語が表示さ
                        れる。専門的には: LC_COLLATE
                        無引数ならばロケールの全体が表示される(どのように表示
                        されるかはシステムに依存する)。
                        現在の言語はv:langv:ctypev:collate そして
                        v:lc_time の各変数で取得することもできる。

:lan[guage] {name}
:lan[guage] mes[sages] {name}
:lan[guage] cty[pe] {name}
:lan[guage] tim[e] {name}
:lan[guage] col[late] {name}
                        現在の言語(言い換えればロケール)を{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 を設定する。
                        引数 "collate" を使用すると照合に利用される言語を設定
                        する。照合順に影響を与える。これは $LC_COLLATE を設定
                        する。
                        無引数ならば全てが設定され、加えて $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


MS-WINDOWSでのメッセージ翻訳                            win32-gettext

インストーラを利用した場合には、既にメッセージの翻訳が動作している。動作しない
のであれば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向け文章は村岡太郎によって書かれた)
{訳注: 訳注として追加されたわけでなく原文にこの記述がある}

==============================================================================
2. メニュー                                             multilang-menus

基本(特に 'langmenu' の使い方)は45.2を参照。

メニューの翻訳が作られた後に元のメニューが変更された場合には、それらのメニュー
は英語のまま表示されることがある。そのような場合には翻訳のメンテナーに連絡を取
り更新するように頼んで欲しい。翻訳者の名前とメールアドレスはファイル
"$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>である。

                                        :menut :menutrans :menutranslate
:menut[ranslate] clear
                        メニューの翻訳をすべて削除する。

:menut[ranslate] {english} {mylang}
                        メニュー名{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" と翻訳
される。

==============================================================================
3. スクリプト                                           multilang-scripts

Vim script では現在の言語(ロケールを)取得するのに変数v:langを使うことがで
きる。デフォルトの値は "C" か環境変数$LANGの値になる。

以下の例は、この変数を使ったユーザーの好みの言語にメッセージを適合させる簡単な
例を示している,

        :if v:lang =~ "de_DE"
        :  echo "Guten Morgen"
        :else
        :  echo "Good morning"
        :endif


 vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
関連キーワード:  usr, 言語, 翻訳, Vim, メニュー, lang, 設定, メッセージ, 利用, 表示