如何将多个变量放在Codeigniter的语言文件中

时间:2011-08-25 22:45:39

标签: codeigniter variables

我遇到了以下代码,替换了语言文件中的一个变量,但是我希望它可以做多个例如%1,%2,%3等......而不只是一个%s。我尝试调整它来计算行中的每个变量,但是有些不能让它起作用

我的_helper

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('line_with_arguments'))
{
    function line_with_arguments($line, $swap)
    {
        return str_replace('%s', $swap, $line);
    }
}

我的控制器

<?php
class Home extends CI_Controller
{
    public function index()
    {
        $this->lang->load('test', 'english');
        $this->load->helper('i18n');

        echo line_with_arguments($this->lang->line('test'), 'Matt');
    }
}

我的郎文件:

<?php $lang['test'] = 'Hello %s';

1 个答案:

答案 0 :(得分:7)

使用vsprintf()尝试这样的事情:

// Method 1: pass an array
function my_lang($line, $args = array())
{
  $CI =& get_instance();
  $lang = $CI->lang->line($line);
  // $lang = '%s %s were %s';// this would be the language line
  return vsprintf($lang, $args);
}

// Outputs "3 users were deleted"
echo my_lang('users.delete_user', array(3, 'users', 'deleted'));

// Method 2: read the arguments
function my_lang2()
{
  $CI =& get_instance();
  $args = func_get_args();
  $line = array_shift($args);
  $lang = $CI->lang->line($line);
  //  $lang = '%s %s were %s';// this would be the language line
  return vsprintf($lang, $args);
}

// Outputs "3 users were deleted"
echo my_lang2('users.delete_user', 3, 'users', 'deleted');

使用函数的第一个参数传递行索引,从CI获取正确的行,并将数组作为第二个参数(method1)或其余参数作为每个变量(method2)传递。有关格式化的信息,请参阅sprintf()上的文档:http://www.php.net/manual/en/function.sprintf.php

CI的原生lang()函数使用第二个参数传递HTML表单元素id,并将创建一个<label>标记 - 如果您问我,请不要使用此函数。如果您不使用标签功能,最好创建一个my_language_helper.php并覆盖lang()函数来本地执行此操作,而不是编写新函数。

这是我的实际lang()函数的样子,我不需要<label>选项,所以我覆盖了第二个参数来接受字符串或变量数组:

// application/helpers/my_language_helper.php
function lang($line, $vars = array())
{
    $CI =& get_instance();
    $line = $CI->lang->line($line);

    if ($vars)
    {
        $line = vsprintf($line, (array) $vars);
    }

    return $line;
}

这样一个小的,容易改变的好处,我希望它是默认的 - 我从不使用lang()输出<label>标签,但需要经常将变量传递给它。