2011-10-01 14 views
5

私はスペイン語の聴衆のためだけに書かれた古いプロジェクトを救済しましたが、今は国際化する必要があります。既存のWebプロジェクトで翻訳を実装する方法は?

このプロジェクトは、テキスト文字列の3種類があります:PHPから書き込ま

  • 文字列:例:データベースフィールドにおけるエコーの "Hello World"
  • 短い文字列:テキストを含むデータベースフィールドをたとえば、国名リストなどです。
  • HTML組み込みの文字列(静的ファイル)は、たとえば、静的なHTMLファイルを含むファイル:<html>...<body>...<p>Hello world</p>を...
  • HTML組み込みの文字列(データベース):上記と同じですが、HTMLファイルが上で挿入されていますデータベース内のテキストフィールド。

実際には文字列がほとんどなく、ローカライズされていないため、最初は問題ではありません。 2番目のケースも非常にローカライズされているため、大きな問題ではありません。しかし、最後の2つのケースはunmanegeableです:内部の何百もの文字列を持つ何百ものHTMLファイル(静的+データベース)。

私は、すべての文字列を認識可能な形式に抽出し、翻訳者にそれを与え、その後他の言語のページを持つ自動化された方法を探しています。

類似のものが存在するのですか、カスタムソリューションを作成する必要がありますか?この場合、どんな考えですか?

答えて

8

I18n(国際化)は非常に奇妙なことです。コードを多言語化するためには、多くの変更を加えなければなりません。

私にとって、最良の解決策は、すでに多くの層でI18nをサポートしているCakePHP上でそれを動かすことです。しかし、このソリューションは、あなたが多くの時間を費やすようになります。 ES:だから....

echo "Hello World" 

または

<p>Hello World</p> 

のような内部のテキストを翻訳するための高速な方法は、すなわち(各言語用のPHP拡張子を持つ適切な言語ファイルを作成することです。 php、el.php、en.phpなど)、次のようなキーと値を持つ配列が含まれます。

$l = array(
    'WEB_TITLE' => 'My web site title', 
    'GEN_HELLO' => 'Hello World', 
    'MENU_HOME' => 'Home', 
    'MENU_PRODUCTS' => 'Products', 
    ... 
); 

echo $l['GEN_HELLO']; 

<p><?php echo $l['GEN_HELLO']; ?></p> 

がある:

は、その後、あなたのウェブサイトに、あなたはそのような何かを持っている各ページの先頭にし、あなたのページに適切な言語ファイルをロードする必要がありますアプリケーションのフロントエンド側。データを多言語化するには、データベース構造をいくつか変更する必要があります。

はあなたがタイトルとコンテンツ国際化を両立させるために持っているような構造では、そのテーブルに

ARTICLES 
id Title Content Date Active 

を考えてみましょう。列はあなたが上記の表にはその

ARTICLES_L 
ID POST_ID COLUMN LANGUAGE CONTENT 

のように見えますが、あなたは記事IDを保存する必要があります例ARTICLES_Lに呼ばれる別のテーブルを作成するために持っていることを翻訳するためには、翻訳が属している列(例:タイトル)言語、および翻訳されたコンテンツ。

だから、記事内のレコードが

ARTICLES 
id Title Content   Date     Active 
1  Title 1 This is content 1 2011-10-01 13:28:45 1 
2  Title 2 This is content 2 2011-10-01 13:28:45 1 
3  Title 3 This is content 3 2011-10-01 13:28:45 1 

テーブルARTICLES_Lは、実際には、レコード

ARTICLES_L 
ID POST_ID COLUMN LANGUAGE CONTENT 
1  1   title  es_ES  Título 1 
2  1   content es_ES  Este es el contenido 1 
3  1   title  el_GR  Τίτλος 1 
4  1   content el_GR  Αυτό είναι το περιεχόμενο 1 
5  2   title  es_ES  Título 2 
6  2   content es_ES  Este es el contenido 1 
.... 

は、あなたがしなければならない多くの多くの他のタスクがあることが含まれることを持っているが、これはある場合私があなたに与えている解決策の背後にあるアイデア:

いいえ幸運

PN:あなたのアプリケーションのフロントエンドでさえ、それを使用することです。http://php.net/manual/en/book.gettext.php この方法はWordPressとCakePHPで使われている方法ですが、非常に低いレベルです:?見てみましょう。これは、各言語のファイルを作成するよりも優れています。

+0

これは役に立ちましたか? –

+1

本当にありがとうございます! – Ivan

+0

あなたは歓迎です:) –

関連する問題