使codeigniter网站成为多语言的最佳方式.从lang数组调用取决于lang会话?

des*_*ing 81 arrays session multilingual codeigniter

我正在研究时间和工作时间,但我找不到任何明确,有效的方法来制作它:/

我有一个英文的codeigniter基础网站,我现在必须添加波兰语.根据访客选择,以2种语言制作我的网站的最佳方法是什么?

有没有办法为每种语言创建数组文件,并在视图文件中调用它们取决于来自lang选择的会话?我不想使用数据库.

感谢帮助!我已经没过截止日期了:/谢谢!!

Ran*_*ell 93

你见过CodeIgniter的语言库吗?

语言类提供了检索语言文件和文本行以便国际化的功能.

在CodeIgniter系统文件夹中,您将找到一种包含多组语言文件的被调用语言.您可以根据需要创建自己的语言文件,以便以其他语言显示错误和其他消息.

语言文件通常存储在您的系统/语言目录中.或者,您可以在应用程序文件夹中创建一个名为language的文件夹,并将其存储在那里.CodeIgniter将首先在您的应用程序/语言目录中查找.如果目录不存在或未找到指定的语言,则CI将在您的全局系统/语言文件夹中查找.

在你的情况下......

  • 你需要创建一个polish_lang.phpenglish_lang.php内部application/language/polish
  • 然后在该文件中创建您的密钥(例如 $lang['hello'] = "Witaj";
  • 然后将它加载到你的控制器中 $this->lang->load('polish_lang', 'polish');
  • 然后获取该行,$this->lang->line('hello');只需将此函数的返回值存储在变量中,以便在视图中使用它.

重复英语和您需要的所有其他语言的步骤.

  • 这是不可编辑文本的解决方案,但它不包括从数据库存储和检索的任何多语言内容.具有使用CI制作的自定义内容管理系统的多语言站点将需要更多.我在URL中的语言段和/或唯一别名段的帮助下创建了自己的域,该段用于识别单一语言的唯一内容.我还没弄明白如何更好地管理这个.这就是为什么我碰到了这个主题. (2认同)

Mat*_*ati 22

另外,为了将语言添加到会话中,我将为每种语言定义一些常量,然后确保在config/autoload.php中自动加载会话库,或者在需要时加载它.将用户所需的语言添加到会话中:

$this->session->set_userdata('language', ENGLISH);
Run Code Online (Sandbox Code Playgroud)

然后你可以随时抓住它:

$language = $this->session->userdata('language');
Run Code Online (Sandbox Code Playgroud)


YoG*_*oGo 7

在控制器中,在创建构造函数时添加以下行

即,之后

父::控制器();

添加以下行

    $this->load->helper('lang_translate');
    $this->lang->load('nl_site', 'nl'); // ('filename', 'directory')
Run Code Online (Sandbox Code Playgroud)

使用以下函数创建帮助文件lang_translate_helper.php并将其放在目录system\application\helpers中

function label($label, $obj)
{
    $return = $obj->lang->line($label);
    if($return)
        echo $return;
    else
        echo $label;
}
Run Code Online (Sandbox Code Playgroud)

对于每种语言,在system\application\languages下创建一个语言缩写的目录,如en,nl,fr等

在上面(各自)目录中创建语言文件,该目录将包含$ lang数组保持对label => language_value,如下所示

nl_site_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';
Run Code Online (Sandbox Code Playgroud)

en_site_lang.php

$lang['welcome'] = 'Welcome';
$lang['hello word'] = 'Hello Word';
Run Code Online (Sandbox Code Playgroud)

您可以根据需要以不同的方式存储同一语言的多个文件,例如,如果您需要单独的语言文件来管理后端(管理员部分),您可以在控制器中使用它作为$ this-> lang-> load('nl_admin',' NL');

nl_admin_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';
Run Code Online (Sandbox Code Playgroud)

最后以所需语言打印标签,访问下面的标签

label('welcome',$ this);

要么

label('hello word',$ this);

请注意hello&word中的空格,你可以像这样使用它:)

如果语言文件中没有定义标签,它只会将它传递给您传递给功能标签的内容.