1

我对那个主题有一点问题。

想象一下,我需要创建一个包含一些变量的模板:

<div class="main_text">
    We would like to tell you that ...blah-blah...
    <?php $username ?>
    and after that we want to blah blah... 
    <?php $first_variable ?>
    and
    <?php $second_variable ?> etc.
<div>

我可以看到两种使用不同语言的方法:

  1. 为每种语言创建一个模板。它速度更快,但编写的代码更多。
  2. 以 codeigniter 的方式为字符串的每个部分创建语言常量,如下所示:

    $lang['WE_WOULD_LIKE'] = 'We would like to tell you that ...blah-blah...';
    $lang['AND_AFTER_THAT'] = 'and after that we want to blah blah...';
    

然后在解析模板时填充它。这种方式也不是最好的,太多的小常数。

也许有人知道更好的方法?请给我指路。

4

3 回答 3

1

Codeigniter 实际上有一个内置的语言类

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

一旦设置了所需的语言,用法将如下所示:

$this->lang->line('language_key');

更新:要将变量传递给语言变量,您可以使用 PHP 的sprintf

$lang['WE_WOULD_LIKE'] = "We would like to tell you that %1$s and %2$s";

然后获取该变量:

$message = sprintf($this->lang->line('WE_WOULD_LIKE'), $first, $second);
于 2013-09-19T15:35:09.063 回答
0

您应该使用语言数组,而不是使用常量,这是为此目的而设计的。看:http ://ellislab.com/codeigniter/user-guide/libraries/language.html

创建语言文件后,将它们加载到控制器中,如下所示:

$this->lang->load('welcome_page', $lang_from_session_or_db);

$lang_from_session_or_db应该根据用户的语言而有所不同,因此您可以将其存储在会话变量或数据库中,具体取决于您的项目。

然后,您可以使用以下方法访问这些变量:

$this->lang->line('language_key');

因为放置变量的位置会因语言而异,所以您可能需要查看 printf 系列函数。

于 2013-09-19T15:34:17.863 回答
0

我不会使用 define() ,因为它会创建全局变量,而且您可能不想污染全局命名空间。

Code Igniter 提供了一个类来帮助解决这个问题。 http://ellislab.com/codeigniter/user-guide/libraries/language.html

这是可取的,因为您将能够仅在需要的地方加载语言类,并且您不会到处都有全局变量。

于 2013-09-19T15:35:30.067 回答