【问题标题】:CodeIgniter: create a html template for different languagesCodeIgniter:为不同语言创建 html 模板
【发布时间】:2013-09-19 15:27:04
【问题描述】:

我对这个主题有点问题。

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

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

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

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

【问题讨论】:

    标签: php codeigniter templates translation


    【解决方案1】:

    Codeigniter 实际上有一个内置的language class

    语言文件通常存储在您的系统/语言目录中。 或者,您可以在您的内部创建一个名为 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);
    

    【讨论】:

    • 好的,语言文件而不是变量,但这接近第二个决定。我不能将变量放在语言常量字符串中。
    • @Bandydan 我更新了我的答案以展示如何使用变量。
    【解决方案2】:

    您应该使用语言数组,而不是使用常量,这就是为此目的而设计的。看: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 系列函数。

    【讨论】:

    • 是的,我明白了,语言常量而不是全局常量,但这仍然是我提到的第二种方式。
    • 这些不是常数,请不要误会两者。您可以使用更长的字符串和sprintf 您的数据,而不是使用许多小字符串。
    【解决方案3】:

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

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

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

    【讨论】:

    • 即使不定义全局常量,问题是,语言文件和不同模板后面是否有第三种方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2019-11-29
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多