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

3
我看到了以下代码,它可以替换语言文件中的一个变量,但我希望它能够替换多个变量,例如%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个回答

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> 标签,但经常需要传递变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接