4

Web ベースの Google 翻訳を使用して、英語のファイルを別の言語に翻訳しようとしています。%s や %d などの文字が含まれています。それらが誤って翻訳されるのを防ぐ方法はありますか?

たとえば、テキストは次のとおりです。

アスリートは番号 %s で既に存在します

は次のように翻訳されます。

Athlete existe dejà avec nombre% s

私はそれが次のように翻訳されることを期待しています:

アスレテ・デジャ・アベク・ノーブル %s

(入力と出力を処理しているので、その周りに文字を追加して %s と %d 文字列を「エスケープ」することができました。既に %s を何かの単語に置き換えることを考えていました。Google は自分自身を翻訳しようとはしないでしょう。しかし、より良い解決策があることを願っています)

4

4 に答える 4

3

奇妙な考えですが..

次のように、各書式指定子をアンダースコア内の一意の数字 (または、翻訳を変更せずに存続し、数字の使用を妨げないもの) に置き換えます。

アスリートはすでに番号 %s で存在します => アスリートはすでに番号 _001 _ で存在します

中国語に翻訳: 運動員已經存在的號碼 _001_

その後、フォーマット文字列の翻訳に複数のフォーマット指定子がある場合は、翻訳後に数字が同じ順序になっているかどうかを確認し、そうであれば、指定子を元に戻します。

于 2010-08-01T21:16:30.640 に答える
2

sprintf に関する PHP の記事へのコメントも、この問題に対するきちんとした解決策を提供しています。

http://www.php.net/manual/en/function.sprintf.php#93552

/**
 * Converts any sprintf to a Google Translate suitable string.
 */
function _toTranslateSafeString($original)
{
    $pattern = '/(?:%%|%(?:[0-9]+\$)?[+-]?(?:[ 0]|\'.)?-?[0-9]*(?:\.[0-9]+)?[bcdeufFosxX])/';       
    $escapeString = '<span class="notranslate">$0</span>';
    return preg_replace($pattern, $escapeString, $original);
}

/**
 * Converts any Google Translate suitable string to a sprintf string.
 */
function _fromTranslateSafeString($translated)
{
    $escapePattern = '/<span class="notranslate">([^<]*)<\/span>/';
    return preg_replace($escapePattern, '$1', $translated);
}
于 2011-07-13T19:30:42.957 に答える
1

msgcatパッケージを使用して文字列を処理するようにプログラムを再構築しましたか? ドキュメントには、さまざまな置換順序の処理方法など、重要なポイントのほとんどが記載されています。漠然としたトリッキーな点は、%シンボルが移動する方法を処理する必要があることです。処理されるテキストの量が十分に少ない場合は、手で、または少しの機械的な支援でそれを行うこともできます (vi、emacs、および eclipse はすべて、必要な種類の一致/置換を実行できます。他のエディターもおそらく実行できますが、私はしません)。それらを使用しないでください)。

于 2010-08-01T21:29:23.910 に答える
0

文字列の各部分を個別に翻訳してから、c トークンを追加することをお勧めします。正確な翻訳が得られない場合がありますが、それは自動翻訳を使用するリスクです。

そして、常にベータテスターがいます:)

または、より良いアイデア: %d を任意の整数に変更し、%s を Google によって翻訳されない任意のラテン文字列に変更し (通常、まれな姓を使用するとうまくいきます)、%d を任意の数字に変更します。

于 2010-08-01T21:19:02.040 に答える