AI & 技術
タイムスタンプを保持したままSRT字幕を翻訳する方法字幕翻訳が精密な作業である理由 SRTファイルは厳密に構造化されたフォーマットです。各字幕ブロックには、シーケンス番号、タイムスタンプの範囲(開始→終了)、そして1〜2行のテキストが含まれます。タイムスタンプに触れずにテキストだけを翻訳す…
Amanda Lee
PO、YAML、.properties、RESX、XLIFF、JSONのロケールファイルは文章のリストのように見えますが、文章なのは値だけです。キーはコードが参照する識別子であり、プレースホルダーは実行時にコードが埋めるスロットであり、エスケープやマークアップはパーサーが依存する構文です。行全体をテキストとして扱う翻訳者は、読みやすいのに読み込めないファイル、あるいは読み込めても画面が初めて数値をフォーマットした瞬間にクラッシュするファイルを生み出してしまいます。この不具合は通常ひとつの言語にしか現れないため、レビューで最も見つけにくい種類のバグになります。
英語には複数形が2つあるため、どの言語も同じだと考えがちです。GNU gettextマニュアルは、それがなぜうまくいかないかを示しています。各言語は独自のPlural-Forms規則を宣言し、英語はnplurals=2を使いますが、ロシア語では数値の末尾の桁によって選ばれる3つの形が必要です。ロシア語に翻訳されたPOファイルに2つの形しか埋められていない場合、コンパイルも実行もできますが、末尾が2、3、4で終わるすべての数に対して誤った文法を表示します。複数形を正しく扱うとは、原文の言語にたまたまあった数ではなく、翻訳先の言語が必要とする数のmsgstrエントリを用意することです。
語順は言語によって異なるため、2つの値を含む文では、それらを逆の順序に置かなければならないことがよくあります。%1$sや%2$sのような位置指定プレースホルダー、あるいは{count}や{user}のような名前付きプレースホルダーは、まさにそのために存在します。翻訳で順序を入れ替えてもかまいませんが、それぞれが必ずちょうど1回ずつ現れなければなりません。単なる%sのような匿名プレースホルダーは安全に並べ替えられないため、翻訳後ではなく翻訳前に原文の文字列で修正しておくべき問題です。
フォーマットにはそれぞれ落とし穴があります。YAMLでは、仕様がリテラルブロック(|)と折り畳みブロック(>)に異なる改行の扱いを定めており、アンカー(&)とエイリアス(*)によってあるノードが別のノードを再利用できるため、どちらもそのまま残す必要があります。XLIFF 2.1は元の書式を<ph>や<pc>のようなインライン要素で囲んでおり、翻訳ではそれらを正しい語句の周りの位置に保たなければなりません。.NETでは、RESXリソースは実行時に現在のUIカルチャに合わせて名前で検索されるため、名前が変わったdata要素は黙って既定の言語にフォールバックします。そしてJavaの.propertiesファイルは、最初のエスケープされていない=、:、または空白をキーの区切りとして扱うため、翻訳されたキーに紛れ込んだコロンがキーを2つに分割してしまいます。
ほとんどの場合、その言語でだけプレースホルダーが変更された——名前が変わった、削除された、または重複した——ためです。コードはすべての言語に同じ引数を渡すため、それと一致しなくなった唯一の訳文が、その画面をフォーマットする際に失敗します。
複数形の規則はソフトウェアではなく言語に属するものです。gettextでは各言語が独自の規則を宣言でき、ロシア語は数値の末尾の桁に基づいて3つの形から選ぶため、2つの形しかない訳文は多くの数に対して誤った文法を表示します。
従来のProperties.load(InputStream)がファイルをLatin-1として読み込むためです。その範囲外の文字は\uXXXXエスケープで記述するか、正しいエンコーディングを使うリーダーでファイルを読み込む必要があります。
はい。位置指定(%1$s、%2$s)や名前付き({count}、{user})の場合は可能で、自然な語順のために並べ替えが必要になることもよくあります。ただし、すべてのプレースホルダーはちょうど1回ずつ現れなければなりません。単なる%sプレースホルダーは安全に並べ替えられません。
キーはテキストではなく識別子だからです。コードはキーで文字列を要求するため、キーが翻訳されると検索が失敗し、アプリは生のキーを表示するか既定の言語にフォールバックします。
PO、YAML、.properties、RESXファイルをアップロードすると、キー、プレースホルダー、エスケープ、構造が元の位置のまま翻訳されて戻ってきます。
無料でロケールファイルを翻訳
AI & 技術
タイムスタンプを保持したままSRT字幕を翻訳する方法字幕翻訳が精密な作業である理由 SRTファイルは厳密に構造化されたフォーマットです。各字幕ブロックには、シーケンス番号、タイムスタンプの範囲(開始→終了)、そして1〜2行のテキストが含まれます。タイムスタンプに触れずにテキストだけを翻訳す…
Amanda Lee
AI & 技術
PowerPointプレゼンテーションをオンラインで翻訳する方法プレゼンテーション翻訳の本当の難しさ PowerPointのプレゼンテーションは単なるテキストではありません。各スライドは緻密に設計されたキャンバスであり、テキストボックスは視覚的なバランスのために配置され、フォントサイズが階層を作り出し…
Amanda Lee