私はこれまで取り組んできた多くのプロジェクトでGNUGettextをうまく使用してきましたが、最近の仕事で突然、非常に厄介なローカリゼーションシステムでの作業を余儀なくされました。
現在のシステムは翻訳をデータベースに保存し、新しい翻訳を追加すると次のようになります。
- 翻訳キーを使用した関数呼び出しをソースコードに追加します。例:
print translate('foo');
- ファイルにいくつかのSQLINSERTステートメントを追加し
translations.sql
ます。 - 名前でファイルを作成する
(current revision nr + 1).sql
- データベースで.sqlファイルを実行します。
- 変更をコミットします(他の誰かが現在のリビジョン番号をコミットして変更する前に)。
このプロセスはすべて完全に手動で行われるため、小さなタイプミスを修正する必要がある場合でも、ほとんどすべてを繰り返す必要があります。複数形はサポートされていません。翻訳データベース全体は、翻訳がデータベースから削除されることはほとんどなく、追加および更新されるだけなので、かなり混乱しています。
私は他の開発者(特に1人の特定の開発者)を説得するためにいくつかの議論を試みました:
- Gettextが標準として確立されていること、およびPOファイルを操作するために利用できるツールがたくさんあることについて話しました。
- 私は、翻訳をデータベースに保存しても、テキストファイルに保存するよりもメリットがないことを説明しようとしました。データベースからキーごとに翻訳を取得するだけで、それ以上のことはありません。
- 他の開発者はアプリのPHP部分に取り組んでおり、PHPにはGettextが組み込まれています。私はJavaScript側で作業しており、Gettextはサポートされていませんが、過去に独自のツールを作成しました。
- 私たちのアプリはそれほど大きくないので、古いシステムからGettextへの変換は手動で行った場合でもかなりの時間がかかり、簡単に自動化できると確信しています。
- 私は、会社の1つの小さなアプリにGettextを使用することに成功しました。
しかし、人々はまだ納得していません。私は何を間違っているのでしょうか?
編集:
この質問を投稿してから数か月後、ようやくGettextに移行します。2つ以上の言語をサポートする必要がある場合、現在のシステムの欠点は、これまでのところそれに抵抗している人々にとってより明白になりました。