Sign in Join
Wiki copytemporary

Getting translation strings right/ja: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11このページでは、文字列の作成者(多くはアプリケーション作者と思います)にとっての、**翻訳文字列を適切に作成する** ための基礎的な事項を説明しています。
22
33この **「翻訳文字列を適切に作成する」** とは、翻訳文字列が簡単に修正できるように準備されており、原版が翻訳文字列を用いる条件に合っていることを意味します。
44
55(英語版がこの文章のオリジナルなので)このページを書くに当たり、できるだけ言語に中立であろうと勤めていますが、英語を主言語とするものとしての偏りがある可能性もあります。 あなたの状況へ当てはまらないものは、自由に修正してください。(また、[[Getting translation strings right|オリジナル(英語)ページ]] へのフィードバックもお願いします。)
66
77### 一般的事項
88
99問題を避けるために、**元の文字列は正しい** ことをまず確認してください。 この理由は、
1010
1111- 翻訳作業が不必要に難しくなります。 「Garbage In, Garbage Out: ゴミを入れると、ゴミが出てくる」原則が完全に当てはまります。
1212- 一般的に、元の文字列が翻訳の初期値となるため未翻訳箇所では元の文字列が表示されますので、利用者がその間違いを見つけた場合、悪い印象を与えるかも知れません。
1313
1414したがって、**つづり、語句を正確に** してください。 不確かな文字は辞書で確認しましょう。
1515
1616また、動作に対する反応などは、**一貫した記述** で分かりやすくよく知られた単語を利用しましょう。 一般的な記述が不確かな場合は、同じようなプログラムが他にあればその動作を参考にすることもよい手段です。 他のアプリケーションのヘルプファイルも、特殊用語や説明の仕方についてのよい資料となります。 (訳注:私はwindows環境ですので、office(日本語版と英語版)を参考に文字列リソースを作成しています。)
1717
1818語句の選定についても一貫したやり方をしてください。 例えば、
1919
20-`ファイルを削除(Delete)する?`\
21-`ファイルを消去(Erase)する?`\
22-`ファイルを除外(Remove)する?`\
23-`ファイルを拭い去る(Wipe)?`\
24-`ファイルを抹殺(Zap)する?`
20+```text
21+ファイルを削除(Delete)する?
22+ファイルを消去(Erase)する?
23+ファイルを除外(Remove)する?
24+ファイルを拭い去る(Wipe)?
25+ファイルを抹殺(Zap)する?
26+```
2527
2628意味は似ていますが、特に理由が無いのに表現を変えた場合、読み手は間違った解釈をすることがあります。 翻訳者はこの間違いを犯しやすく、あるメッセージの正確な文脈(例えば、メッセージの呼び出し元についての情報)を知らなかったり、語句のちょっとした違いを重要な差異として捉え、適切ではない翻訳を選びがちになります。
2729
2830エラーメッセージを出すときは、**問題点** 自身を適切に記述しましょう。 問題点の記述とは、エラーメッセージが出たプログラムの状態ではありません(ファイルエラー, 不正な入力など)。 これは、プログラムのデバッグには役立ちますが、ユーザには意味不明です。 肩をすくめて無視されるだけならいいですが、あなたの意味不明なアプリケーションを使うのをやめ、他のアプリケーションを探し始めるかもしれません。 問題解決につながるメッセージを表示しましょう。
2931
3032また、簡単な**分かりやすい書き方**を行いましょう。 外国語や非常に技術的な用語は、本当の本当に必要なときにのみ使いましょう。
3133
3234多重否定は分かりにくいので、使わないようにしましょう。 例えば、
3335
34-`This component can not be dropped on non-TControls.`\
35-`このコンポーネントは、非Tcontolにドロップできません。`
36+```text
37+This component can not be dropped on non-TControls.
38+このコンポーネントは、非Tcontolにドロップできません。
39+```
3640
3741これは、否定しない文章で書き換えられます。
3842
39-`This component can only be dropped on TControls.`\
40-`このコンポーネントは、TControlにのみドロップできます。`
43+```text
44+This component can only be dropped on TControls.
45+このコンポーネントは、TControlにのみドロップできます。
46+```
4147
4248こちらのほうが分かりやすいですね。
4349
4450### 技術的項目
4551
4652この節では、既存の翻訳手法などの技術的な項目を説明します。 これは、リソース文字列の構築、GNU gettext と format() 関数を含みます。
4753
4854#### リソース文字列と GNU gettext
4955
5056Free Pascalには文字列定数を扱えるようにするいくつかの言語構成体があります。 特に、この目的のために導入された "resourcestring" というユニットがあります。
5157
5258詳細は、FPC マニュアルの (prog.pdf, pg. 89ff または [このリンク](http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009)) の適切な箇所を参照して下さい。
5359
5460GNU gettext は、アプリケーションの翻訳を提供するユーティリティ群です。 詳細は、FPC マニュアルの (prog.pdf, pg. 91ff または [このリンク](http://www.freepascal.org/docs-html/prog/progse41.html#x210-2130009.4)) を参照して下さい。
5561
5662注記: GNU gettext の欠点として、単一の元の文字列から多くの翻訳文字列へのマッピングができない点があります。 ご注意下さい。
5763
5864#### IDE内の リソース文字列
5965
6066- Lazarus には、文字列定数からリソース文字列を簡単に作るツールがあります。 [[IDE Window: Make ResourceString/ja|リソース文字列の作成を]]参照してください。
6167
6268- FPC は、各リソース文字列の部分に対して .rst ファイルを生成します。 しかし、.rstファイルについての編集ツールはありません。 また、Lazarusは自動的に .rst ファイルの .po ファイルを生成することができます。 .po ファイルについては多くの編集ツールがあります。(例えば、 kbabel)
6369
6470パッケージ作成に向けての .po ファイルの生成について、下記の作業を行ってください:
6571
66-` * 'languages' や 'local' といった副ディレクトリを生成してください。`\
67-` * パッケージを開き、`**`オプション -> i18N`**`、"国際化を有効に"をチェック、PO出力ディレクトリを設定`
72+```text
73+ * 'languages' や 'local' といった副ディレクトリを生成してください。
74+ * パッケージを開き、オプション -> i18N、"国際化を有効に"をチェック、PO出力ディレクトリを設定
75+```
6876
6977次回にパッケージをコンパイルした時に、 副ディレクトリに .po ファイルが作成されます。 (注: .rst ファイルがパッケージ・ユニットに属する必要があります。 そうでない場合、 .rst ファイルはIDEに無視されます。)
7078
7179これはプロジェクトについても同様です。
7280
73-` * `**`プロジェクト -> プロジェクトオプション -> i18N`**`、"国際化を有効に"をチェック、PO出力ディレクトリを設定`
81+```text
82+ * プロジェクト -> プロジェクトオプション -> i18N、"国際化を有効に"をチェック、PO出力ディレクトリを設定
83+```
7484
7585- 例:ドイツ語翻訳の作成: まず、 unit1.po ファイルを unit1.de.po ファイルに コピーします。次に、テキストエディターや .po エディターを用いて、文字列をすべて翻訳してください。
7686
7787- IDEは、インストールされたパッケージ用の .po ファイルがある場合、自動的に読み込みます。 例えば、 lazarus/components/projecttemplates/languages/ を見てください。
7888
7989- ToDo: 新しい resourcestrings の追加時に、翻訳された .po ファイルを更新する機能の実装と文書化。
8090
8191- ToDo: 静的にリンクしたパッケージの 全 .po ファイルを集める機能の実装と文書化。
8292
8393#### あなたのアプリケーションのリソース文字列
8494
8595リソース文字列の翻訳のために .po ファイルを読み込むことができます。 この機能を .lpr ファイルに実装するには:
8696
8797``` pascal
8898...
8999uses
90100 ...
91101 Translations, gettext;
92102
93103procedure TranslateLCL;
94104var
95105 PODirectory, Lang, FallbackLang: String;
96106begin
97107 PODirectory:='/path/to/lazarus/lcl/languages/';
98108 Lang:='';
99109 FallbackLang:='';
100110 GetLanguageIDs(Lang,FallbackLang); // in unit gettext
101111 Translations.TranslateUnitResourceStrings('LCLStrConsts',
102112 PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
103113 // ... ここに、全ての .po ファイルに対する TranslateUnitResourceStrings 呼び出しを追加する ...
104114end;
105115
106116begin
107117 TranslateLCL;
108118 Application.Initialize;
109119 Application.CreateForm(TForm1, Form1);
110120 Application.Run;
111121end.
112122```
113123
114124#### format() 関数
115125
116126翻訳において、完全な静的文字列以外を許可するために、sysutilsユニットの [[doc:rtl/sysutils/format.html|format()]] メソッドを利用できます。 format() は、テキスト内のプレースホルダーを第2パラメーターで置き換えます。
117127
118128(原文:To not only allow completely static strings in translations, you can use the [[doc:rtl/sysutils/format.html|format()]] method of the sysutils unit. It is able to replace placeholders within a given text by their actual value given as secondary parameter in a set.)
119129
120130例:
121131
122-`format('明日は %0:s で、 %1:s でしょう。', ['日曜日', '晴れ'])`
132+```text
133+format('明日は %0:s で、 %1:s でしょう。', ['日曜日', '晴れ'])
134+```
123135
124136上記関数は、以下を返します。
125137
126-`明日は 日曜日 で、 晴れ でしょう。`
138+```text
139+明日は 日曜日 で、 晴れ でしょう。
140+```
127141
128142ここでは、 %0:s が文字列配列の始めの(インデックスは0)の引数(日曜日)のプレースホルダー、 %1:s が2番目の引数(晴れ)のプレースホルダーとなります。
129143
130144プレースホルダーおよび書式の詳細は、FPCリファレンスマニュアルにあります。
131145
132146format() 関数利用のガイドライン
133147
134148- プレースホルダーにはインデックスを付けましょう。 引数の移動が簡単になり、より自然な翻訳が可能になります。
135149
136150- 2つ以上の文字列から文章を構成しないようにしましょう。 常にformat()関数を用いて、プレースホルダーを利用した正確な文字列を、実行時に構成してください。 翻訳者は常に全ての文を翻訳できるとは限りません。 したがって、良い翻訳を行えないかもしれません。 考えて見てもください。 翻訳データベース内にそのような数百もの文字列があることを...
137151
138152(原文:* Never compose a sentence out of more than one string. Always use the format() method from the sysutils unit to construct the correct string using placeholders during runtime. Translators will usually not be able to reconstruct the whole sentence, therefore not able to give a good translation; only consider that there are often hundreds of such strings within a single translation database...)
139153
140154- 余白を利用した位置あわせはやめましょう。 シンプルに、適切な位置にラベルを移動させてください。フォント変更時に問題となるかもしれませんし、翻訳者によって余白が削除される危険性もあります。
141155
142156~~注記: format() は、エスケープされた制御文字(例えば、C言語の "\n" , "\t" など)や なんらかの理由でを翻訳システムとしてGNU gettext (それに基づいたツールはエスケープされていない制御文字を解釈できない) を解釈しないため、プログラムによる改行の挿入が必要になります。~~
143157
144158現バージョンの lazarus では、翻訳された文字列の「\n」および「\t」は newline と タブ に置き換えられます。
145159
146160#### 正しい文字セット/コードへ翻訳を変換する
147161
148162例えば、 ISO-8859-1 から UTF-8 へ変換する場合、
149163
150-` iconv --from-code=ISO-8859-1 --to-code=UTF-8 oldfile.po > newfile.po`
164+```text
165+ iconv --from-code=ISO-8859-1 --to-code=UTF-8 oldfile.po > newfile.po
166+```
151167
152168以下の行を、
153169
154-` "Content-Type: text/plain; charset=ISO-8859-1\n"`
170+``` pascal
171+ "Content-Type: text/plain; charset=ISO-8859-1\n"
172+```
155173
156174次のように修正することも忘れないで下さい。
157175
158-` "Content-Type: text/plain; charset=UTF8\n"`
176+``` pascal
177+ "Content-Type: text/plain; charset=UTF8\n"
178+```
159179
160180### 英語に関する項目
161181
162182この節では、特に英語を基本言語とする場合の注意点を説明します。
163183
164184- テキストを出力する場所に十分な広さをとってください。英語は翻訳対象に比較してテキストが短くなりやすい(文字列として)ため、設計時に十分な余白を取るようにしましょう。 経験的に、2,3文字の文字列は2倍の広さを取ることが多くあります。 文字列が長くなるとこの違いは小さくなります。
165185
166186- 英語の短縮形は避けましょう。 ただでさえ短い文字列がさらに短くなることに加え、例えば、表意文字を利用する場合、短縮形がまったく存在しないなどの問題があります。
167187
168188- よく言われることですが、英語の句読法では、記号(full stop(ピリオド)やカンマなど)はその前の語句や、前に語句がない場合(列挙時など)は語句のかたまりの一部になります。 特に、セミコロン(;)の後は、続いて空白があるべきです。
169189
170-`There was an error ! Please check file settings , compiler settings,... to fix this issue .`
190+```text
191+There was an error ! Please check file settings , compiler settings,... to fix this issue .
192+```
171193
172194上記文章は句読法が適当で、見栄えが悪いし読むのも困難です。 よくある改行アルゴリズムが空白で改行することを考えてください。 次の行が!やカンマ、ピリオドで始まる可能性もあります。
173195
174-`There was an error! Please check file settings, compiler settings, ... to fix this issue.`
196+```text
197+There was an error! Please check file settings, compiler settings, ... to fix this issue.
198+```
175199
176200句読法を考慮した場合、上記文章が正しいものとなります。
177201
178202---
179203*From the Free Pascal wiki, page "Getting translation strings right/ja", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history