Попробуйте что-то подобное, используя 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>
, но мне нужно часто передавать ему переменные.