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

时间:2009-08-25 13:52:51

标签: arrays session codeigniter multilingual

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

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

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

欣赏帮助!我已经没有截止日期了:/谢谢!

11 个答案:

答案 0 :(得分:91)

你见过CodeIgniter's Language library吗?

  

语言类提供功能   检索语言文件和行   用于国际化的文本。

     

在您的CodeIgniter系统文件夹中   找到一个包含集合的语言   语言文件。你可以创建你的   按顺序拥有自己的语言文件   显示错误和其他消息   其他语言。

     

语言文件通常存储在   你的系统/语言目录。交替   您可以创建一个名为language的文件夹   在应用程序文件夹和商店中   他们在那里。 CodeIgniter首先会看   在您的应用程序/语言目录中。   如果目录不存在或者   指定的语言不在那里   CI将改为寻找您的全球   系统/语言文件夹。

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

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

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

答案 1 :(得分:22)

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

$this->session->set_userdata('language', ENGLISH);

然后你可以随时抓住它:

$language = $this->session->userdata('language');

答案 2 :(得分:7)

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

,即

之后

父::控制器();

添加以下行

    $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;
}

对于每种语言,创建一个语言缩写的目录,如en,nl,fr等 系统\应用\语言

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

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';

最后 要以所需语言打印标签,请访问以下视图中的标签

标签('welcome',$ this);

OR

label('hello word',$ this);

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

如果语言文件中没有定义标签,它只会将您传递给函数标签的内容打印出来。

答案 3 :(得分:1)

我是Randell的第二个答案。

但是,人们总是可以集成GeoIP,例如http://www.maxmind.com/app/phphttp://www.ipinfodb.com/。然后,您可以使用codeigniter会话类保存结果。

如果您想使用ipinfodb.com api您可以将ip2locationlite.class.php文件添加到您的codeigniter应用程序库文件夹,然后创建一个模型函数来执行您的应用程序所需的任何geoip逻辑,例如: / p>

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;
}

答案 4 :(得分:1)

为了便于使用,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

答案 5 :(得分:1)

我使用过Wiredesignz的MY_Language课程取得了巨大的成功。

我刚刚在github上发布它,因为我似乎无法在任何地方找到它的痕迹。

https://github.com/meigwilym/CI_Language

我唯一的更改是根据新的v2更改将类重命名为CI_Lang。

答案 6 :(得分:0)

管理实际文件时,除非您真的保持警惕,否则事情很容易失去同步。因此,我们推出了一项名为 String 的免费服务,可让您轻松跟踪语言文件,并与翻译人员协作。

您可以导入现有的语言文件(PHP数组,PHP定义,ini,po或.strings格式),也可以从头开始创建自己的部分,直接通过系统添加内容。

字符串是完全免费的,所以请查看并告诉我们您的想法。

它实际上也建立在Codeigniter上!查看http://mygengo.com/string

上的测试版

答案 7 :(得分:0)

答案 8 :(得分:0)

我在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的内部机制

哦,差点忘了!在视图中我使用按钮,用语言设置cookie'语言',由用户提供。

因此,首先此代码尝试检测用户的useragent(浏览器)中设置的“preffered language”。然后代码尝试读取cookie'语言'。最终 - 切换设置CI应用程序的语言

答案 9 :(得分:-1)

你可以做这样的功能

function translateTo($language, $word) {  
   define('defaultLang','english');  
   if (isset($lang[$language][$word]) == FALSE)  
      return $lang[$language][$word];  
   else  
      return $lang[defaultLang][$word];  
}

答案 10 :(得分:-1)

朋友,不用担心,如果您在codeigniter中安装了任何应用程序,并且您想要添加一些语言包,请按照以下步骤操作:

1. 在文件夹application / language / arabic中添加语言文件(我在ci中使用sma2添加arabic lang)

2. :转到 application / modules / settings / views / setting.php 中名为setting.php的文件。在这里你可以找到数组

<?php /*

 $lang = array (
  'english' => 'English',

  'arabic' => 'Arabic',  // i add this here

  'spanish' => 'Español'

现在保存并运行该应用程序。它运作良好。