私は何時間も研究していますが、それを作るための明確で効率的な方法を見つけることができませんでした:/
私は英語のcodeigniterベースのWebサイトを持っており、ポーランド語を追加する必要があります。訪問者の選択に応じて、2つの言語でサイトを作成するための最良の方法は何ですか?
言語ごとに配列ファイルを作成し、ビューファイルでそれらを呼び出す方法は言語選択からのセッションに依存しますか?データベースは使いたくない。
感謝します!締め切りが迫っています:/ありがとう!!
私は何時間も研究していますが、それを作るための明確で効率的な方法を見つけることができませんでした:/
私は英語のcodeigniterベースのWebサイトを持っており、ポーランド語を追加する必要があります。訪問者の選択に応じて、2つの言語でサイトを作成するための最良の方法は何ですか?
言語ごとに配列ファイルを作成し、ビューファイルでそれらを呼び出す方法は言語選択からのセッションに依存しますか?データベースは使いたくない。
感謝します!締め切りが迫っています:/ありがとう!!
回答:
CodeIgniterの言語ライブラリを見たことがありますか?
言語クラスは、国際化の目的で言語ファイルとテキスト行を取得する関数を提供します。
CodeIgniterシステムフォルダーには、言語ファイルのセットを含む言語と呼ばれるものがあります。エラーやその他のメッセージを他の言語で表示するために、必要に応じて独自の言語ファイルを作成できます。
言語ファイルは通常、システム/言語ディレクトリに保存されます。または、アプリケーションフォルダー内にlanguageというフォルダーを作成し、そこに保存することもできます。CodeIgniterは、最初にアプリケーション/言語ディレクトリを検索します。ディレクトリが存在しないか、指定された言語がそこにない場合、CIは代わりにグローバルシステム/言語フォルダを検索します。
あなたの場合...
polish_lang.php
とenglish_lang.php
内部を作成する必要がありますapplication/language/polish
$lang['hello'] = "Witaj";
$this->lang->load('polish_lang', 'polish');
$this->lang->line('hello');
、この関数の戻り値を変数に格納するだけのように行をフェッチして、ビューで使用できるようにします。英語と必要な他のすべての言語に対して手順を繰り返します。
また、言語をセッションに追加するには、言語ごとにいくつかの定数を定義し、セッションライブラリがconfig / autoload.phpに自動ロードされていることを確認するか、必要なときにいつでもロードします。ユーザーが希望する言語をセッションに追加します。
$this->session->set_userdata('language', ENGLISH);
次に、次のようにいつでも取得できます。
$language = $this->session->userdata('language');
コントローラーで、cunstructorを作成するときに次の行を追加します
すなわち、後
parent :: Controller();
以下の行を追加します
$this->load->helper('lang_translate');
$this->lang->load('nl_site', 'nl'); // ('filename', 'directory')
次の関数を使用してヘルパーファイルlang_translate_helper.phpを作成し、ディレクトリsystem \ application \ helpersに配置します。
function label($label, $obj)
{
$return = $obj->lang->line($label);
if($return)
echo $return;
else
echo $label;
}
言語ごとに、system \ application \ languagesの下に、en、nl、frなどの言語の省略形でディレクトリを作成します。
上記の(それぞれの)ディレクトリに言語ファイルを作成します。このファイルには、以下に示すように、label => language_valueのペアを保持する$ lang配列が含まれます。
nl_site_lang.php
$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';
en_site_lang.php
$lang['welcome'] = 'Welcome';
$lang['hello word'] = 'Hello Word';
要件に応じて異なる方法で同じ言語の複数のファイルを保存できます。たとえば、バックエンド(管理者セクション)を管理するための個別の言語ファイルが必要な場合は、コントローラーで$ this-> lang-> load( 'nl_admin'、 ' nl ');
nl_admin_lang.php
$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';
最後に、希望の言語でラベルを印刷するには、以下のようにラベルにアクセスします。
label( 'welcome'、$ this);
または
label( 'ハローワード'、$ this);
hello&wordのスペースに注意してください。このように使用することもできます:)
言語ファイルに定義されたラベルがない場合は、関数ラベルに渡したものを出力するだけです。
私はランデルの答えを2番目にしています。
ただし、http://www.maxmind.com/app/php やhttp://www.ipinfodb.com/などのGeoIPをいつでも統合できます。次に、codeigniterセッションクラスを使用して結果を保存できます。
ipinfodb.com apiを使用する場合ip2locationlite.class.phpファイルをcodeigniterアプリケーションライブラリフォルダーに追加してから、次のようなアプリケーションに必要なgeoipロジックを実行するモデル関数を作成できます。
function geolocate()
{
$ipinfodb = new ipinfodb;
$ipinfodb->setKey('API KEY');
//Get errors and locations
$locations = $ipinfodb->getGeoLocation($this->input->ip_address());
$errors = $ipinfodb->getError();
//Set geolocation cookie
if(empty($errors))
{
foreach ($locations as $field => $val):
if($field === 'CountryCode')
{
$place = $val;
}
endforeach;
}
return $place;
}
使いやすくするために、CIはこれを更新したので、
$this->load->helper('language');
とテキストを翻訳する
lang('language line');
ラベル内でワープしたい場合は、オプションのパラメータを使用してください
lang('language line', 'element id');
これは出力します
// becomes <label for="form_item_id">language_key</label>
よく読むために http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html
私はWiredesignzのMY_Languageクラスを使用して大成功を収めました。
どこにも痕跡が見つからないようですので、githubで公開しました。
https://github.com/meigwilym/CI_Language
私の唯一の変更は、新しいv2の変更に従って、クラスの名前をCI_Langに変更することです。
実際のファイルを管理する場合、本当に警戒しない限り、物事は非常に簡単に同期しなくなる可能性があります。そこで、Stringという(ベータ版の)無料サービスを開始しました。これにより、言語ファイルを簡単に追跡し、翻訳者と協力することができます。
既存の言語ファイル(PHP配列、PHP Define、ini、po、または.strings形式)をインポートするか、独自のセクションを最初から作成して、システムから直接コンテンツを追加することができます。
文字列は完全に無料ですので、ぜひチェックして、感想をお聞かせください。
実際にはCodeigniter上に構築されています!http://mygengo.com/stringでベータ版をチェックしてください
これに従ってくださいhttps://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
そのシンプルで明確な、ドキュメント@http ://ellislab.com/codeigniter/user-guide/libraries/language.htmlもチェックしてください
その方法はより簡単です
私はconfig.phpでそのようなコードを使用しています:
$lang = 'ru'; // this language will be used if there is no any lang information from useragent (for example, from command line, wget, etc...
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
$tmp_value = $_COOKIE['language'];
if (!empty($tmp_value)) $lang = $tmp_value;
switch ($lang)
{
case 'ru':
$config['language'] = 'russian';
setlocale(LC_ALL,'ru_RU.UTF-8');
break;
case 'uk':
$config['language'] = 'ukrainian';
setlocale(LC_ALL,'uk_UA.UTF-8');
break;
case 'foo':
$config['language'] = 'foo';
setlocale(LC_ALL,'foo_FOO.UTF-8');
break;
default:
$config['language'] = 'english';
setlocale(LC_ALL,'en_US.UTF-8');
break;
}
....そして私は通常CIの内部メカニズムを使用しています
o、ほとんど忘れて!ビューでは、ユーザーが好む言語でCookieの「言語」を設定するボタンを使用しています。
したがって、最初にこのコードは、ユーザーのユーザーエージェント(ブラウザー)に設定された「優先言語」を検出しようとします。次に、コードはCookieの「言語」を読み取ろうとします。そして最後に-スイッチはCIアプリケーションの言語を設定します
あなたはこのような機能を作ることができます
function translateTo($language, $word) {
define('defaultLang','english');
if (isset($lang[$language][$word]) == FALSE)
return $lang[$language][$word];
else
return $lang[defaultLang][$word];
}
isset($lang[$language][$word]) == FALSE
はこのように十分です。そして第三に、何かが間違っているかどうかを評価するときは、常にタイプを確認するために使用してください。isset($lang[$language][$word])
===
友だち、心配しないでください。codeigniterに組み込まれているアプリケーションがインストールされていて、言語パックを追加したい場合は、次の手順に従ってください。
1.フォルダーapplication / language / arabicに言語ファイルを追加します(ciに組み込まれているsma2にアラビア語の言語を追加します)
2. application / modules / settings / views /setting.phpで指定さsetting.php
れたファイルに移動します。ここに配列があります
<?php /*
$lang = array (
'english' => 'English',
'arabic' => 'Arabic', // i add this here
'spanish' => 'Español'
次に、アプリケーションを保存して実行します。それはうまくいきました。
setting.php
ライブラリまたはヘルパーを使用したことがある場合は、名前の付いたファイルはありません。最初に共有してください。