0

現在、php アプリケーションを英語で実行しています。現在、他のいくつかの言語に対応する必要があります。一部のユーザーは、すべてのフォームを完全に翻訳し、翻訳された言語に従って新しいフォルダー ラベルを配置しています。それは最適化方法ですか?

4

5 に答える 5

2

文章を含むファイルを使用するか (またはデータベースを使用)、選択した言語に従ってそれらを含める必要があります。

例えば ​​:

Language_FR.txt:

hello = 'Salut'
delete='Supprimer'

Language_EN.txt:

hello = 'Hello !'
delete='Delete'
于 2013-09-14T17:32:09.203 に答える
1

翻訳の数によって異なります。すべての言語に対して 1 つの php インクルード ファイルを使用することも、各言語を個別のファイルに分割することもできます。

$lang['en']['submit'] = 'submit';//english
$lang['fr']['submit'] = 'soumettre';//french
$lang['es']['submit'] = 'presentar';//spanish

そして、プレースホルダーベースのhtmlで

<?php
$lang = 'fr'; //set the language somewhere
<button><?=$tang[$lang]['submit'];?></button>
?>

これは出力します<button>soumettre</button>

ただし、サイト全体のコピーを作成しないでください。編集を行うと、変更を加えるたびに何度も翻訳を編集することになります。

于 2013-09-14T17:43:11.803 に答える
1

ほとんどの実装では、基本的に言語 (データベースまたはテキスト ファイルのいずれか) によってインデックス付けされたルックアップ テーブルを使用します。

次に、ユーザー インターフェイス要素を表示するたびに、表示する言語の正しい文字列を検索する関数をコードに記述します。

非常に簡単な方法は、言語に応じて適切なファイルを含めることです。

テキストファイル(「de.php」と呼びましょう)では、次のようになります。

$lang[] = ['Are you Sure?']['Sind Sie sicher?'];

$lang[] = ['Cancel']['Abbrechen'];

次に、コードに次のものを含めることができます。

//適切な言語をロードします

include($userLang.".php");

....

echo $lang['よろしいですか?'];

于 2013-09-14T17:46:02.787 に答える
1

私はまだデータベースのアイデアを支持しています。

入力フィールドがあり、その横に英語の「ユーザー名」があり、デフォルトの値は「ユーザー名を入力してください」です。あなたは次のようなものを持つことができます:

<td><?=$obj->translate('username');?></td>
<td><input type="text" name="username" value="<?=$obj->translate('enter_username');?>" /></td>

だからあなたはあなたのdbテーブルにieを持っていますtranslations:

id | placeholder     |         en          |    pl                      |
-------------------------------------------------------------------------
1  | username        |      Username       | Nazwa użytkownika          |
2  | enter_username  | Enter your username | Wprowadź nazwę użytkownika |

あなたのクライアントは洗練されているので、あなたは彼を設定します$_SESSION['language'] = 'pl'

現在の言語翻訳を返す関数/メソッド translate() を作成します。

public function translate($word) {
    $sql = "SELECT $_SESSION['language'] FROM translations WHERE placeholder = '$word';";
    $this->db->query($sql);
    return $this->db->result();
}

基本的に、$obj->translate('enter_username');ポーランドのクライアントに対して実行する場合、次のようなクエリを作成します。

SELECT pl FROM translations WHERE placeholder = 'enter_username';

'Wprowadź nazwę użytkownika' を返します

何かを印刷する必要があるたびに、そのプレースホルダーをデータベースに挿入し、後でまたはすぐに翻訳する必要があります。

たとえば間違ったユーザー名の場合など、javascript を介してエラー アラートが必要な場合は、db にプレースホルダーを追加します。つまり、最近英語で「間違ったユーザー名を入力しました。戻ってもう一度やり直してください。」

あなたが持つことができます:

<script>
alert("<?=$obj->translate('wrong_username_from_login_form');?>");
</script>

クライアントが英語の場合、画面に次の警告が表示されます。「間違ったユーザー名を入力しました。戻ってもう一度やり直してください。」

于 2013-09-14T17:54:36.260 に答える
0

ユーザー インターフェイス要素の翻訳 (「静的」と呼びましょう) をデータベースに保存しようとしないでください。代わりに、テクノロジに適したローカリゼーション ファイル形式を使用してください。PHP を使用する場合、これは Gettext (PO)、CSV、または単純な PHP 配列ファイルになります。

利点: - ファイルをデータベースから抽出せずに翻訳者/翻訳サービスに送信できます - アプリケーションの開発/ステージング バージョンのデータベース ダンプを出荷する必要はありません - 翻訳を非常に簡単に使用できます別のテクノロジー - 速度: PHP での CSV/Ini ファイルの解析は、すべてのページで n 個のクエリを実行するよりもはるかに高速です

Andy Gee と FaceOfJock は、ソリューションがどのように見えるべきかを非常にうまく示していると思います。

于 2013-09-16T15:32:35.977 に答える