1

これがシナリオです:

私は翻訳し、最終的にはそれに良いSEOを適用するウェブサイトを持っています。Google、Bing、Yandex、その他の検索エンジンで簡単にインデックスを作成しながら、コンテンツ(メニューリンク、約10の記事、altタグ、タイトルタグ、メタタグ、html langなど)を翻訳するのに最適な方法はどれですか。

私の最初のアイデアは、コンテンツを取得してユーザーの言語で表示する、自分で作成した配列(私はすでにそのプロトタイプを持っています)で構成される変換php関数を使用することです。

これは正しい道ですか?ここでの問題は、将来新しい言語を追加できる動的なシステムを確保したかったということです。

たぶんMySqlは正しい選択ですか?

ウェブサイトはcmsを使用していません。必要に応じて、MySqlに依存することに問題はありませんが、phpを使用して自分で作成しました。

前もって感謝します :)

4

2 に答える 2

4

基本的に3つの選択肢があり、それぞれに長所と短所があります。

1: Dainis Abolsが示唆しているように、データベースにそれをチャックします-サーバーの設定方法によっては、これは最も遅く、最もシステムが重いルートになる可能性があります(ただし、すべて相対的ですが、何百万ものサーバーを取得しない限り、違いが生じる可能性はほとんどありません1時間を表示)。

2: PHPライブラリファイルを使用します。私は、フィールドラベル(名前、名前など)などの小さな単一のアイテムにライブラリファイルを使用し、CMS管理のHTMLなどの大きなものをデータベースに保存する傾向があります...これにより、データベースの呼び出しは減りますが、ロードする辞書ごとに小さなオーバーヘッドが追加されますスクリプト<?php $this->page->dictionary->product = Dictionary::load("product"); ?>のようなものに。

3:最後に、PO(圧縮された翻訳ファイル)を維持するにはpoeditのようなものが必要ですが、個人的にはPHPのgettextの実装を確認する価値があると思います。これにより、単純なアンダースコア関数でテキストをラップすることにより、PHPドキュメントにテキストを入力するだけで、翻訳を非常に迅速に維持することができます。

例えば<?= _("Hello World"); ?>

次に、圧縮されたPOファイルで翻訳を維持します。これは非常に効率的です(ネイティブPHPファイルで行うよりも高速になる可能性があります)が、自然言語のニュアンスに関してはいくつかの欠点があります。

たとえば、フィールドラベル「title」がある<?= _("Title"); ?>場合、のすべてのインスタンスが_("Title")同じ方法で翻訳されます。

つまり、「タイトル」を人のタイトルのフォームラベルと本のタイトルの両方として使用することはできません。たとえば、ドイツ語では、一方の「タイトル」にAnredeを使用し、もう一方の「タイトル」にTitelを使用することができます。

ただし、実際に使用gettextするには、おそらく独自のサーバーを実行する必要があります。POファイルを変更するときにApacheの再起動が必要になる場合があります:\

検索エンジンに関しては、コードからの出力を読み取るため、翻訳を実行するために使用する方法に大きな違いはありませんが、理想的には、URLをRESTfulに保ち、PHP辞書を含めるかどうかにかかわらず、データベースまたはgettextを使用して(または後で気が変わったら)、URLを変更せずにプログラムの動作を変更http://www.mysite.com/en_gb/widgetsできるように言語をURLにマップすることができます。

于 2013-01-10T16:22:29.577 に答える
1

すべてのテキストをデータベース内に保存し、言語に別のフィールドを適用します。

+----+---------+---------+
| id | text_en | text_de |
+----+---------+---------+
|  1 | English | Deutch  |
+----+---------+---------+

これで、ユーザーが言語を切り替えるときに、その言語のフィールドを使用するだけです。

$lang = 'en';
$query = "SELECT text_".$lang." FROM texts WHERE id = 1";

そんな感じ。したがって、すべてのクライアント側のテキストは常にデータベース内に保存されます。したがって、出力は次のようになります。

<div id="header"><?=get_db_text_for_id(1)?></div>

もちろん、予防策やその他の分野が必要ですが、それが一般的な考え方です。

于 2013-01-10T15:55:07.080 に答える