1

Symfony2 を使用して、古いアプリを新しいアプリに変換しています。

テキストの一部は、私が翻訳に個人ライブラリを使用した古いアプリで翻訳されました。

目標は、transフィルターまたは{% trans %}ブロックが Twig で呼び出されたときに、Symfony2 が翻訳が存在するかどうかを確認することです。そうであれば、ユーザーのロケールを使用して正しい翻訳を返します。これは Symfony2 の仕組みです。

しかし、私が直面しているのは、私の古いライブラリの方が少しうまく機能するということです。翻訳が存在しない場合、翻訳者に通知されるように翻訳用のファイルに書き込みます。不足している翻訳をすべて確認できる小さなバックオフィスを使用していたので、翻訳者は自由な心で作業できました。また、開発者として、翻訳するテキストを自由な心で開発して表示することもできました。自分でテキストを翻訳ファイルに追加する必要はありません。また、バックオフィスを使用してデータベースにテキストを追加する人々も、テキストが自動的にファイルに書き込まれ、翻訳者がインターフェースでそれを見ることができることを知っているので、自由な心で作業できます.

Symfony2 コンソールがこれらすべての翻訳をいくつかのファイルに書き込むためにダンプできることは知っていますが、このシステムには 2 つの問題があります。

  1. まず、欠落している翻訳は、元のテキストと同じように、使用するかどうかに関係なく接頭辞を付けて書かれています。プレフィックスが翻訳内にあるかどうかを確認して、欠落しているかどうかを確認する必要があるため、これは重いです。また、Web サイトに表示されるテキストにはこの接頭辞が付きますが、これは使用したくありません。
    実際、翻訳がない場合は元のテキストが返されるようにしたいので、xml または xliff タグ内に空の文字列が必要です。文字列が空であることを確認する方がよいでしょう。
  2. 第二に、ほとんどのテキストはデータベースにあり、コントローラーによって動的に復元されます。データベース全体を抽出して翻訳を確認したくありません。私が必要としているのは、データを翻訳するときにファイルに書き込むことです。Web サイト上で自分自身をナビゲートして、すべての翻訳ファイルを「生成」します。これは、任意のロボットが Web サイト内をナビゲートできるため簡単です (たとえば、サイトマップ ジェネレーターは、すべての Web サイトの URL を取得してそれらをロードし、Symfony2 を強制するのに役立ちます)。フィルターまたはブロックを使用してから、trans不足しているデータを翻訳ファイルに書き込みます)。次に、すべてのページが読み込まれると、すべてのテキストが送信され、ファイルに書き込まれることが期待できます。
  3. そしてもちろん、すべての翻訳をチェックできるように、ちょっとしたバックオフィスが必要です。しかし、Symfony の友人たちはすでにそのためのバンドルを作成していると思います (実際、Symfony2 にはほとんどすべてのバンドルがあります)。自分で作ることができるので、これは大きなポイントではありません(古いアプリにはシステムがあり、新しいアプリに転送できます).

私は本当にこれに対する解決策を見つけたいと思っています。

もちろん、私の古いライブラリを Symfony2 に実装して、独自の twig 翻訳フィルターを作成することもできますが (既に実行済みです)、ネイティブの Symfony2 システムを使用するか、vendors ディレクトリ内にそのための別のバンドルをインストールする方が少し良いでしょう。バンドルなどに依存した開発はしたくないので(翻訳はバンドルごとに保存されるため)。

これに対するネイティブソリューションはありますか?(無ければ諦めて自前のライブラリを使いますが、Symfony2 の翻訳システムほど綺麗にはなりません)

編集 (2014 年 2 月 8 日) :

私は自分の Github ページで利用できる非常にシンプルなシステムで独自のライブラリを作成しました。翻訳が利用できない場合、翻訳をファイルに追加するだけです。

ただし、このライブラリに触発された別のライブラリを作成することにしましたが、データベースに依存しています。モジュールは現在開発中ですが、そのシステムは単純です。

ネイティブ トランスレータで翻訳を読み込みます。翻訳が利用できない場合 (つまり、ネイティブ トランスレータが空の文字列を返す場合)、translation_domain の値に応じて、データベース内のすべての翻訳を読み込みます。次に、サービス (コントローラーまたはコマンド ライン ツールで起動) がすべてのデータベース変換をファイルに書き込み、ネイティブ トランスレーターがそれらをより高速にロードし、SF2 キャッシュに格納できるようにします。

4

2 に答える 2

2

⚠️ 編集: 私が作成したライブラリはOrbitale/TranslationBundleで、重大な欠陥があったため、メンテナンスを中止し、使用をお勧めしません。代わりに、Symfony トランスレーターをオーバーライドする必要があり、翻訳形式などを自分で処理する必要があります。

一貫性と保守性のために、期待を変更し、ネイティブの Symfony の動作を受け入れました (フォールバック ロケールを使用し、翻訳がない場合は最初のテキストを表示します)。

このオーバーライドを実現する方法についてアドバイスが必要な場合は、私に連絡してください。


元の答え:

最後に、助けてくれてありがとう。

JMSTranslationBundle を試してみましたが、Symfony2 のすべてのキャッシュが壊れていました。

最後に、独自のライブラリを作成することにしました。Github と Packagist の両方に配置しました。packagist.org で orbitale/translation-bundle という名前で見つけることができます。

それは真新しいので、完全でなくても私を責めないでください! :)

于 2013-11-01T20:57:01.830 に答える
1

目標を達成するためにhttps://github.com/schmittjoh/JMSTranslationBundleを気に入っていただけると思います。それはあなたが望む小さなバックオフィスのものさえ持っています.

于 2013-10-24T09:38:36.863 に答える