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

Oud*_*din 3 variables codeigniter

我发现以下代码替换了语言文件中的一个变量但是我希望它能够做多个例如%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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器

<?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');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的郎文件:

<?php $lang['test'] = 'Hello %s';
Run Code Online (Sandbox Code Playgroud)

Wes*_*rch 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');
Run Code Online (Sandbox Code Playgroud)

使用该函数的第一参数来传递行索引,得到从CI的正确路线,并传递一个数组作为第二参数(方法1)或的参数作为每个变量(方法2)的其余部分.请参阅有关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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢分配,我把它变成了一个像魅力一样的帮手 (2认同)