質問

ったジョエルの記事 Unicode としたことを感じています少なくとも基本的な把握の国際化から文字セット。のほか、読書 この質問, 私も自分の研究の国際化に関してのデザインの考え出すことはできなかったがんの疑いはあるかんたんにお問い合わせください。

かってい

  • 一部の言語の読みに右から左へ の代わりに左にする小パッケージです。
  • カレンダー、時間、通貨、 番号を表示しな から言語になります。
  • デザインに柔軟に対応可能 可能な多くの文字が 一部の言語によりデフォルト値が設定され しています。
  • なアイコンや色 付与できる 意味としての意味が理解できたり から文化の文化です。
  • 地理的名称によって異な 言語になります。

がん:

  • 私のデザインを柔軟に 対応あります。
  • 私は自動翻訳は各 文字列を含むエラーメッセージ、ダイ
  • んになる 私のディスプレイに必要な単位時間 通貨又は番号がん また、必要なもの の開発を求めている。
  • を使用しているUTF-8文字セット きる。
  • Myメニューや各種リストの並び アルファベット順のために各国語の読みやすくなります。
  • いのタグのパーサを抽出する タグをフィルタリングし止めます。の ストップワードリストは特定の言語 と換装可能。

たいと思い知り:

  • の開発をしているダウンロード可能PHP webアプリケーション では具体的な対策方法について PHPうぞよろしくお願い申し上げます。開発した自分の体制 迷うことはありません使用その他 枠組みます。
  • 私はほとんど知非西洋 言語.具体的にありま 考慮されています。 という しますのでご注意ください。▼また、どのようなPHPの配列 ソート機能に対応非西洋 す。
  • ある特定のgotchasる また実践?私の両面でのGUIのアプリケーションコードそのものです。
  • 特定のアドバイスと 日付と時刻の表示?はありま 内訳による地域 養成講座を開催します。
  • 見ているが多くのプロジェクトやサイト せようとして地域社会の提供 翻訳のためのその応用 とができます。いおすすめ といいところを紹介してください戦略 の確保について 翻訳するのですか?
  • この問題は基本的にどの程度 何か知って 育成を目指しています。うなん うんう 見ているのでしょうか。

編集:私は追加の恵みがいてより現実世界の事例からです。

役に立ちましたか?

解決

ゲーム Gemsweeper は8つの言語に翻訳されています。その過程で私が学んだこと:

  • 翻訳者に翻訳する単一の文章が与えられた場合、各文章が使用されている文脈について彼が知っていることを確認してください。あなたが意味した。 Babelfish などのツールは、コンテキストを理解せずに翻訳するため、結果は通常非常に悪くなります。些細でないテキストを英語からドイツ語に翻訳してみてください。そうすれば、私の意味がわかります。

  • 翻訳する文章を同じ理由で別の部分に分割してはいけません。コンテキストを維持する必要があるため(前のポイントを参照)、一部の言語では文の最初または最後の変数。文を分割する代わりにプレースホルダーを使用します。たとえば、

  • の代わりに
  

"これはステップです '' "私たちの15ステップ   チュートリアル"

次のように記述します:

  

"これは、15ステップのチュートリアルのステップ%1です

プログラムでプレースホルダーを置き換えます。

  • 翻訳者がおもしろいまたは創造的であることを期待しないでください。特定の文章に名前を付けて追加料金を支払わない限り、通常、彼はそれを行うほどのモチベーションがありません。たとえば、言語資産にジョークがあり、単語のジョークがある場合は、翻訳者にサイドノートで翻訳するのではなく、そのままにしておくか、代わりにもっと落ち着いた文章に置き換えるように伝えます。それ以外の場合、翻訳者はおそらく冗談を単語ごとに翻訳しますが、通常は完全にナンセンスになります。私たちの場合、最も重要な翻訳(英語)のために1人の翻訳者と1人のジョークライターがいました。

  • 第一言語があなたのソフトウェアを翻訳しようとしている言語であり、その逆ではない翻訳者を見つけてみてください。そうでない場合、彼はそうかもしれないテキストを書くでしょう正しいが、ネイティブスピーカーにとっては奇妙または古風に聞こえる。また、翻訳の対象となる国に住んでいる必要があります。たとえば、スイスのドイツ語を話す人は、ドイツ語の翻訳には適していません。

  • 可能であれば、特定の翻訳を理解しているパブリックベータテストユーザーに、翻訳されたアセットと完成したソフトウェアを検証してもらいます。非常に良い翻訳と非常に悪い翻訳がありますそれを提供した人に応じて。一部のユーザーによると、スウェーデン語の翻訳はまったく意味不明でしたが、それについて何もするのは遅すぎました。

  • 新機能を備えた更新バージョンごとに、言語アセットを翻訳する必要があることに注意してください。これにより、深刻なオーバーヘッドが発生する可能性があります。

  • ソフトウェアが翻訳されている場合、エンドユーザーは技術サポートが彼らの言語を話すことを期待することに注意してください。再度、Babelfishはおそらくそうしないでしょう。

編集-もう少しポイント

  • ローカライズの切り替えをできるだけ簡単にします。 Gemsweeperには、異なる言語を切り替えるホットキーがあります。テストがはるかに簡単になります。

  • エキゾチックなフォントを使用する場合は、特殊文字が含まれていることを確認してください。 Gemsweeperに選択したフォントは英語のテキストには適していましたが、かなりの数の文字を追加する必要がありましたドイツ語、フランス語、ポルトガル語、スウェーデン語、...

  • にのみ存在する手作業
  • 独自のローカライズフレームワークをコーディングしないでください。おそらくはるかに良いでしょう

他のヒント

  
      
  • マイメニューとさまざまなリスト   アプリケーションはアルファベット順にソートされます   読みやすいように各言語で使用します。
  •   

リストはソートされるべきですが、メニューはソートされるべきではありません。特定のユーザーがアプリケーションを複数の言語で使用したい場合でも、同じ場所のどこでも見つける必要があることに注意してください。

ショートカットがある場合は同じ:翻訳しないでください

また、国際化と翻訳は非常に異なるものであることを覚えて、別々に管理してください。

DreamfallとAge of Conanのi18n / l10nの問題に取り組んだとき、心に留めておくべきいくつかの問題に出会いました。これらのいくつかは解決し、いくつかは解決してくれました。一部解決できなかった...

  • すべてのツールとすべてのコードが使用するすべての文字セットをサポートしていることを確認し、プロジェクトの過程でその仮定を2回確認し、さらに2、3回確認します。

  • 使用するすべての言語をサポートするフォントを使用してください。ユニコードであると主張するほとんどのフォントは、その文字が正しいコードポイントにあるという意味でのみユニコードです。すべてのコードポイントに使用可能な文字があるという意味ではありません。

  • テキストの折り返しはスペースで行われるだけではありません。一部の言語では単語を区切るためにスペースを使用しない ためです(中国語が思い浮かびます)。テキストラッピングルーチンがスペースをまったく含まないテキストを処理することを確認してください。

  • 複数形を正しく処理することは簡単な場合には注意が必要であり、難しい場合には厳しく罰せられます。複数の問題を正しく処理するためのコードを作成できるように、使用する言語について十分に理解してください。英語(および他の" western"言語は簡単なものの1つです。

  • 変数は別の言語の文の他の場所に配置される可能性があるため、文を中断して変数に合わせて文字列を作成しないでください。プレースホルダーを使用します。

  • 一部の言語では、プレースホルダーの値によって文の書き方が変わる可能性があることに注意してください。文法は難しいです。対処するための計画があることを確認してください。 (具体的には、性別や時間などに応じて、プレースホルダーで使用する値を分類する方法があることを確認してください。)

次のコメントをしたいと思います-これらは、クラス1製品が異なるロケールで 31 に翻訳されるいくつかの企業ガイドラインからのものです。これらのガイドラインに従うことで、私たち(会社全体ではなく開発チーム)が翻訳の生産性を最大限に高めることができました。

  • エラーメッセージのスニペットを再利用しないでください。たとえば、"間違ったメニュー項目を選択しました" "そのメニュー項目はまだ使用できません" の2つのエラーがあるため、 " menu item" を別のアイテムに抽出し、両方の場所で使用できます。翻訳はコンテキストに基づいて変化する可能性があるため、すべてのメッセージは自己完結型である必要があります。

  • テクノロジーに精通したプロの翻訳者を使用します。 BabelFishのようなサービスの近くに行けば、あなたが値するものすべてを手に入れるでしょう。たとえば、" Microsoft Windows" は地球上のどこでも" Microsoft Windows" であり、" Microsoft Fenster" にはなりませんドイツで。

  • 変数をメッセージ内に埋め込まないようにしてください(" The%1 has failed" %1 など)動的に)位置と実際には性別が変わる可能性があるため、" La table est rubbish" vs. " L'Homme est drunk" または"赤い表" vs " La table rouge" 。パラメーターが追加された汎用名詞を使用することをお勧めします:"アイテムは失敗しました[%1]"

  • ユーザーが見ると予想されるもののみを翻訳します。 ログファイル(自分だけが使用する)のログメッセージは、英語ではなく翻訳する必要があります(母国語)とにかく読むことができなかったスワヒリ語のようなものに。

  • メニューは、照合順ではなく機能別にソートする必要があります。

  • 翻訳可能なユニットは、コードに外部保存し、実行時にロードする必要があります。これにより、翻訳はコードの途中に変更を加えようとするのではなく、外部ファイルを出荷するだけの問題になります。また、将来的に他の言語を簡単に追加できるようになります。

これで十分です。眠りにつく前に止めた方が良い:-)

数字に関すること:英語では、私が理解しているように、1の単数形と2以上の複数形を使用します。たとえば、「メッセージが1つあります」。 「2メッセージ」。 「3 ...メッセージ」。ロシア語では、これらのことはより複雑になります。 1、21、31、41 ... 101、121に単数を使用します(したがって、11で終わる場合を除き、1で終わるすべての場合)。次に、2、3、4に単一の属格を使用します。 22、23、24; 32、33、34 ... 102、103、104; 122、123、124。そして、他のすべてのケースでは、複数の属格のケースを使用します。

実装するのはそれほど難しくありません。しかし、 困難なのは、アプリオリの未知の言語をその奇妙さですべて処理する方法を知っているものを実装することです:-)

それは単なる数字です:-)

これまでのところ、すばらしい回答に追加するものはあまりありませんが、ここでは考慮して確認すべきいくつかの事項を示します。

  • 仮定を立てない。これはすべてをキャッチするルールです。地域や言語固有のものを想定するのは簡単であり、これらの想定に気付くことは困難です。
  • 文字列の比較には細心の注意を払ってください。トルコ語など、視覚的には他の文字と似ているが異なる文字がある言語があります。
  • スモークテストとして擬似翻訳を使用します。リソースファイルから翻訳された文字列を読み取る場合は、理解しやすいが容量と機能を重視するファイルの擬似翻訳バージョンを作成します。アプリケーション内のすべての翻訳可能な文字列の。たとえば、「キャンセル」のような文字列を埋めます。 「CancelXXXX!」のようなもので翻訳された文字列の許容範囲と同じ幅になります。次に、すべての文字列が完全に表示されることを確認するためにテストできます。すべての場所で正しく表示されることを確認するためにレンダリングされる可能性が最も高い、最も複雑なキャラクターにこだわり続けることに対する追加のクレジット。
  • キーボードレイアウトについて想定しないでください。" ASDW" QWERTYキーボード用の方向キーの優れたコントロールセットかもしれませんが、他のキーボードレイアウトを持つ人々に使用することは不可能ではないにしても、使いにくいようにするハードコーディングです。
  • さまざまな日付設定をテストしてから、再度テストします。" AM / PM"の別の形式と同じくらい小さな問題が発生しました。地域の設定で。 mm / dd / yyyy対dd / mm / yyyyも多く表示されますが、ここの設定はすべて重要です。
  • さまざまな数値形式をテストしてから、再度テストします。たとえば、小数点や千単位の区切り記号に依存したくない場合。
  • サーバーにログインしているユーザーの有無でテストします。これはWindows特有のものかもしれませんが、ログインしたユーザーのユーザーを使用するように構成されたサーバー上のコンポーネントを取得するのは非常に簡単ですユーザーがログインしているときの地域設定と、ユーザーがログインしていないときのデフォルトの地域設定。これにより、奇妙で断続的な動作が発生する可能性があります。
  • さまざまな地域と言語の設定でテストします。例として、Windowsには地域と言語の設定があるだけでなく、IEには独自の言語設定があります。たとえば、en-usが最初にリストされているIEクライアントの動作は、en-nzが最初にリストされているものと常に同じではない場合があります。
  • 翻訳者がビジネスと言語を理解していることを確認してから、他の人とクロスチェックしてください。アプリケーション固有の用語を使用するときは常に注意してください。プログラムで特定の単語を使用してアプリケーションで特別な何かを意味する場合は、ヘルプテキストを含め、すべてのインスタンスで同様の方法で翻訳されていることを確認してください。特定の言語ターゲットがある場合は、そのような単語を事前に翻訳し、ターゲット言語での翻訳が不十分でないことを確認することさえできます。これは製品の研究に近いものですが、インターフェイスで使用される単語に違いをもたらす可能性があり、それらの単語が最初から適切に配置されていれば誰にとっても簡単です。また、うまく翻訳できないかもしれないイディオムも避けたいです。

さて、思った以上に言いたいことがありました...

難しい方法を学んだことの1つ:翻訳が必要なファイルが複数ある場合は、名前に追加のタグを含めて、後でそのタグをフォルダー全体で検索できるようにします。

e.g。ファイルに「sample-database.txt」という名前を付ける代わりに、英語版の「sample-database-loc-en.txt」、イタリア語版の「sample-database-loc-it.txt」

StackOverflowでの私の最初の回答です。バカが言われてもご容赦ください。

私の経験から:

  • PHP :gettextは非常に役立ちました。
  • 非西洋言語:どこでもUTF-8(コード、DB)。これまでのところ順調です。
  • 実際に経験した特定の落とし穴はありますか? i18nの長い段落を別の文に分割することは、サイトで文字列が複数回繰り返される場合、翻訳にかかる費用が少なくなります。一度だけ翻訳する必要があります。ただし、テキストを断片化すると、翻訳者が文脈を失ってしまうので注意してください。
  • 多くのプロジェクトやサイトで、コミュニティがアプリケーションやコンテンツの翻訳を提供しているのを見てきました。これをお勧めしますか?また、良い翻訳を確実にするためのいくつかの優れた戦略は何ですか?ボランティアの数が非常に多い場合、あなたが持っているテキストの量によっては、本当に必要になるかもしれませんボランティアのトン。また、翻訳の正確性を管理する校正者になるために、言語プロジェクトのリーダーであると信頼できる人がいることを常に確認してください。
  • 照合/ソートの規則は、言語によって大きく異なる場合があります。äは、スウェーデン語とドイツ語でソートが異なります。そのため、ソートは文化に固有である必要があります。
  • 上/下のケースには驚きがあります。ドイツの「シャープS」文字ßは大文字バージョンを持たず、「SS」に変換されるか、正確さが重要な場合は小文字のままです。トルコ語には、ドットなしの小文字iと大文字のドット付きIがあります。
  • 多言語Webアプリの場合、表示するバージョンを決定する方法と、URLに組み込む方法を慎重に検討してください。ユーザーは常に手動で言語を選択できる必要があり、検索エンジンは異なるURLで異なる言語バージョンを検索する必要があります。
  • 一部の東アジア言語(つまり、日本語と中国語、場合によっては他の言語)には単語の間にスペースがありません
  • 日本語(おそらく他の言語も)には、アラビア語の数字とスペースの個別のバージョン(「全角」)と、一部の独自の文字(半角と全角のカタカナ)の2つのバージョンがあります。

はい、これは大衆の主題です。それを正しくすることは非常に多くの作業です。

私のプログラムでは、すべてのテキストに整数キーを使用し、言語に応じて必要に応じてファイルで検索します。コードのどこにもリテラル文字列はなく、キーのみがあります。 「enum」でそれらを定義します; C ++なので、実際には数字を入力していません。列挙型を追加し、翻訳者が空白を埋めるときに、さまざまな言語ファイルを同期するユーティリティを作成しました。

各キーには、関連するツールチップ、画像、キーボードショートカットなどもあります。

時刻と日付については、繰り返しますが、これは思っているよりもはるかに複雑ですが、PHPはこれを処理しませんか? (私は知りません、私はC ++の男です...)

PHPを表す文字列として社内バイト-トはiso-8859-1の場合のエンコード。最も一部ご利用いただけUTF-8の場所にあります。一gotchaる場合、サイトの間に入力からそのユーザーがまとのできない100%れているコンテンツの提出により、適切なエンコーディングです。するために使用 mb_detect_encoding 検証の入力、または隠しフィールド"のエキゾチック"に登場するキャラクターを確認す。

このすべての文字列関連の機能PHPすることができる文字"を基本とし、その文字分=バイトになります。ることをすることになりますので一般的に信用できな文字列。してい このページ できます。

これからも省資源のためのPHP、 Nick Nettletonのcheatsheet.

というメディアにとっては非常に近い関係にある文字セット/エンコーディング、 照合.必要なものはcollationsに合わせた言語/文化とします。少なくともMySqlでは(おそらくその他のRDBMS'es)もご指定いただくことができますの照合順序の異なるレベル料などのデータベース、テーブル、カラムだけではなく、クエリそのものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top