*mlang.txt*	For Vim バージョン 9.1.  Last change: 2025 Nov 09


		  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:lang|, |v:ctype|, |v: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} の POSIX 形式は以下のとおり: >
				language[_territory][.encoding]
<			{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 が設定される。
			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:
