1

CodeIgniter のライブラリを使用してサイトの言語を変更しています。これは、コントローラーから言語ファイルをロードする方法です。

$this->load->helper('language');
$this->load->helper('url');
$this->lang->load('custom','english');

しかし、データベースからその言語ファイル (custom_lang.php) にデータを渡す必要がありますが、方法がわかりません。お知らせ下さい...

4

2 に答える 2

0

これはCodeigniter 2.0用です。

その場で言語ファイル (custom_lang.php) を作成する必要があります (たとえば、データベースの言語コンテンツを更新するたびに)。

1つ目: データベースのレイアウト

lang_tokenidcategorydescriptionlangを含むテーブルを作成し、token次のようにフィールドに入力します。

    CREATE TABLE IF NOT EXISTS `lang_token` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `category` text NOT NULL,
      `description` text NOT NULL,
      `lang` text NOT NULL,
      `token` text NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

    INSERT INTO `lang_token` (`id`, `category`, `description`, `lang`, `token`) 
    VALUES
      (1, 'error', 'noMail', 'english', 'You must submit a valid email address'),
      (2, 'error', 'noUser', 'english', 'You must submit a username');

2回目:CodeIgniterの言語ファイルについて

CodeIgniter は最初に application/language ディレクトリを調べます。各言語は独自のフォルダに保存する必要があります。英語やドイツ語などのサブディレクトリが作成されていることを確認してください。application/language/english

3つ目:オンザフライで言語ファイルを作成するコントローラー機能

Codeigniter 言語ファイルについて: 特定のファイル内のすべてのメッセージに共通のプレフィックス (カテゴリ) を使用して、他のファイル内の同様の名前のアイテムとの衝突を避けることをお勧めします。構造は次のようになります。$lang['category_description'] = “token”;

    function updatelangfile($my_lang){
        $this->db2->where('lang',$my_lang);
        $query=$this->db2->get('lang_token');

        $lang=array();
        $langstr="<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
                /**
                *
                * Created:  2014-05-31 by Vickel
                *
                * Description:  ".$my_lang." language file for general views
                *
                */"."\n\n\n";



        foreach ($query->result() as $row){
            //$lang['error_csrf'] = 'This form post did not pass our security checks.';
            $langstr.= "\$lang['".$row->category."_".$row->description."'] = \"$row->token\";"."\n";
        }
        write_file('./application/language/'.$my_lang.'/custom_lang.php', $langstr);

    }

最終的な注意事項:

  1. データベースを変更するたびに、関数を呼び出しますupdatelangfile(‘english’)
  2. updatelangfile() が配置されているコントローラーのコンストラクターに、ファイル ヘルパー言語クラスをロードすることを忘れないでください。

    function __construct(){
        parent::__construct();
        $this->load->helper('file');
        $this->lang->load('custom', 'english');
    }
    
于 2014-05-31T17:35:35.483 に答える
0

「You have XYZ new messages」のように、翻訳テキストで変数を処理したいのではないでしょうか。

単純に翻訳テキストに特定のタグを配置し、後で str_replace を使用して目的の値を入力します。たとえば、「You have %num_messages% new messages」のようになります。

コントローラーでこれを使用します:

$parsed_text = str_replace ("%num_messages%", $msg_count, $input_translation_text);

後で $parsed_text を template/view に割り当てます。

于 2012-08-09T23:19:42.707 に答える