31

編集:フォーマット、その長所と短所についての一般的な議論を本当に見たいです!

EDIT2: 報奨金は、必要な議論を作成するのに実際には役立ちませんでした.いくつかの興味深い回答がありますが、トピックの包括的なカバレッジはまだありません. 6 人がこの質問をお気に入りとしてマークしました。これは、この議論に関心があることを示しています。

IMO で国際化を決定する際に最も難しいのは、ストレージ形式の選択です。

たとえば、Zend PHP フレームワークは、ほぼすべてのオプションをカバーする次のアダプターを提供します。

  • Array : いいえ、保守が難しい
  • CSV : 不明、エンコーディングの問題の可能性
  • Gettext : 頻繁に使用されます。利用可能なすべてのプラットフォームで poEdit を使用できますが、複雑です。
  • INI : わかりません。エンコーディングに問題がある可能性があります
  • TBX : 手がかりがない
  • TMX : 大げさすぎる?自由に利用できるエディターはありません。
  • QT : あまり普及していない、無料のツールがない
  • XLIFF : 今後の標準? しかし、無料のツールはありません。
  • XMLTM : いいえ、必要なものではありません

基本的に、私は4つの「大胆な」選択肢にこだわっています。INI ファイルを使用したいのですが、エンコーディングの問題について読んでいます...厳密な UTF-8 (ファイル、接続、データベースなど) を使用すると、本当に問題になるのでしょうか?

私は Windows を使用しており、poEdit がどのように機能するかを理解しようとしましたが、うまくいきませんでした。ウェブ上にもチュートリアルはありません. gettextはまだ選択の余地がありますか、それとも絶滅危惧種ですか?

XLIFFはどうですか?使用するツールに関するヒントはありますか?

これらのテクノロジーのいずれかをEclipseに統合するためのアイデアはありますか?

4

10 に答える 10

16

POEdit を使いこなすのはそれほど難しくありません。新しい .po ファイルを作成し、ソース ファイルから文字列をインポートするように指示するだけです。プログラムは PHP ファイルをスキャンして_("Text"), gettext("Text")、 などに一致する関数呼び出しを探します。検索する独自の関数を指定することもできます。

次に、適切なボックスに翻訳を入力します。.po ファイルを保存すると、.mo ファイルが自動的に生成されます。これは、gettext が簡単に解析できる翻訳のバイナリ バージョンにすぎません。

PHP スクリプトbindtextdomain()で、.mo ファイルの場所を伝える呼び出しを行います。gettextこれで(またはアンダースコア関数) に渡されたすべての文字列が変換されます。

これにより、翻訳ファイルを最新の状態に保つことが非常に簡単になります。POEdit には、コメントを許可する、変更された文字列と削除された文字列を表示する、あいまい一致を許可するなどの優れた機能もあります。つまり、わずかに変更された文字列を再翻訳する必要はありません。

于 2008-11-11T07:58:21.270 に答える
12

言及されているすべてのフォーマットと、推奨される gettext (po) および XLIFF との間の翻訳を可能にするTranslate Toolkitが常に存在します。

于 2009-01-27T22:22:19.443 に答える
1

カスタムデザインを使用して自分でデータストレージを実行します-表示されるすべてのテキストはDBに保存されます。

2つのテーブルがあります。最初のテーブルには、ID値、32文字のvarcharフィールド(このフィールドで索引付けされています)、およびフレーズの200文字の英語の説明があります。

2番目のテーブルには、最初のテーブルのID値、言語コード(EN_UK、EN_USなど)、およびテキストのNVARCHAR列があります。

まだ使用していない他の文字セットをサポートしているため、テキストにnvarcharを使用します。

最初のテーブルの32文字のvarcharは「pleaselogin」のようなものを格納し、2番目のテーブルは実際には完全な「以下にログインとパスワードを入力してください」を格納します。

実行時に置き換える動的な値の膨大なリストを作成しました。たとえば、「パスワードを変更するのに{[dynamic:passworddaysremain]}日があります。」などです。-これにより、さまざまな言語での語順を回避できます。

私はこれまでアラビア数字を扱う必要がありましたが、非アラビア数字を必要とする最初のユーザーのために何かを解決する必要があります。

私は実際にこの情報を2時間間隔でデータベースから引き出し、XMLの各言語のファイルでディスクにキャッシュします。CDATAの広範な使用が使用されます。

利用できるオプションはたくさんあります。パフォーマンスのために、言語ごとにhtmlテンプレートを使用できます。私の方法はうまく機能しますが、実行時にXMLDOMを頻繁に使用してページを作成します。

于 2009-01-28T18:15:08.413 に答える
1

必要に応じて INI を使用できますが、INI には UTF8 であることを他のユーザーに伝える方法がないため、誰かが INI をエディターで開いた場合、yout ファイルが破損する可能性があります。

したがって、ユーザーがUTF8エンコーディングで編集することを信頼できる場合、という考えです。

ファイルの先頭に BOM を追加できます。一部の編集者はそれを知っています。

何を保存しますか?ユーザーが生成したコンテンツまたはアプリケーションのリソースですか?

于 2008-11-11T07:48:33.083 に答える
1

l18n 側では、TMX と XLIFF の 2 つの形式を使用しました。それらはかなり似ています。今日では TMX の方が人気がありますが、XLIFF は急速に支持を得ています。私が最後に調べたとき、少なくとも 1 つの無料の XLIFF エディターがありました: Transolution ですが、現在は開発されていません。

于 2008-11-17T00:10:12.687 に答える
0

http://www.myl10n.netでiL10Nzと呼ばれる私のl10nツールを確認できます。

po / potファイル、xliff、iniファイルのアップロード、翻訳、ダウンロードができます。

このビデオはYouTubeでチェックすることもでき ますhttp://www.youtube.com/watch?v=LJLmxMFxaxA

ありがとうオリビエ

于 2009-07-03T19:58:48.093 に答える
0

かなり単純な方法の 1 つは、リソース ファイルとリソース スクリプトを使用することです。MSVC のようなプログラムは、問題なく編集できます。また、他のシステム (およびテキスト エディター) に対してもかなりフレンドリーです。言語ごとに個別の文字列テーブル (およびビットマップ テーブル) を作成し、そのような各テーブルにその言語をマークするだけです。

于 2009-01-27T18:59:25.000 に答える
0

文字列を DB に保存するだけで、さまざまな言語の文字列を実際に追加できるようにアプリケーションに翻訳モードが組み込まれています。

アプリケーションでは、さまざまなトリックを使用してテキスト ID を作成します。

£("btn_save")
£(Order.class,"amt")

システムの起動時、またはリロードが手動でトリガーされたときに、翻訳がデータベースからロードされます。£ メソッドは、ユーザー セッションで指定された言語に従って、翻訳された文字列を検索します。

于 2009-02-01T22:26:57.337 に答える
0

これらの選択肢のどれも、私にはあまり食欲をそそるようには見えません。

複数の言語で翻訳するためにファイルを送信する場合、特にチーム内にそれらの言語を話す人がいない場合は、エンコーディングが正しいことを信頼できる必要があります。外国語のエンコーディングの問題を特定するのは難しい場合があり、OS に「推測」させると、ファイルのエンコーディングを誤って破損してしまう可能性があります。

エンコーディングを宣言するフォーマットが本当に必要です。そうしないと、翻訳者またはその翻訳ツールが UTF-8 以外のものを選択する可能性があります。私の考えでは、単純な XML 形式であれば何でもよいのですが、Zend で独自の形式を作成する必要があるようです。XLIFF と TMX は確かにやり過ぎです。

Java の XML リソースのような形式が理想的です。

于 2009-01-27T19:15:20.040 に答える
0

これはこれまでに投稿されたものとは少し異なる可能性があり、あなたが探しているものと正確に一致しない可能性がありますが、別のアプローチが必要な場合は追加すると思いました. 私はオブジェクト指向のアプローチを採用しました。私がしたことは、言語ファイルを string=>translation ペアの配列に格納することでクラスにカプセル化するシステムを作成することでした。翻訳へのアクセスは、キー文字列をパラメータとして translate と呼ばれるメソッドを介して行われます。拡張クラスは、親の言語配列を継承し、それに追加または上書きできます。クラスは拡張可能であるため、基本クラスを変更し、その変更を子クラスに反映させることができ、配列自体よりも保守しやすくなります。さらに、必要なクラスのみを呼び出します。

于 2009-02-01T18:59:52.760 に答える