Как вынести языковые переменные

Статус
В этой теме нельзя размещать новые ответы.

NewS

Гуру форума
Регистрация
15 Авг 2008
Сообщения
254
Реакции
87
Вот решил я вынести весь язык в отдельный файл ru.php
А как теперь использовать яз. переменные внутри функций?
Получается что внутри каждой функции нужно с помощью include() подключать или есть какой-то способ получше?
Функций в одном файле очень много и не хочется в каждую пихать одну и туже строчку.
Файл ru.php:
PHP:
$lang = "Языковая переменная";

PHP:
function name($per)
{
include("./ru.php");
echo $lang;
}
 
Есть несколько вариантов - начиная от массивов и заканчивая gettext.
Пример:
PHP:
$lang = array();

$lang['admin'] = 'Админ';
$lang['user'] = 'Пользователь';
$lang['welcome'] = 'Привет'
PHP:
<?php

include './ru.php';

echo $lang['welcome'] . ', ' . ($is_admin ? $lang['admin'] : $lang['user']);

?>
 
Более того, ассоциативные массивы в пхп просто чудная вещь. Поэтому можешь накидать функцию локализации, как это сделано в фреймворках, например ZF.

В общих чертах там так. Есть класс, которому передется путь до файлов локализации. Потом, когда нужно, передается желаемый язык. Языковые файлы - массивы, хмл, ваш вариант.

вызов такой
PHP:
echo $lang->translate('this must be translated');
То есть при вызове пишем английскую фразу и если он не найдет ее локализированую версию, то вернет эту же английскую.
А все благодаря тому, что в пхп ключи могут быть такими как 'this must be translated'. То есть получается дефолтовый язык английский (работает всегда), а локализация может быть отложена и выполнятся по мере возмжностей.
 
Я константами пользуюсь:
russian.php
PHP:
define('USER_GREETING', 'Добро пожаловать!');
define('HOW_USER_FEELS', 'Как Вы себя сегодня чувствуете?');

index.php
PHP:
require 'russian.php';
echo USER_GREETING . '<br>' . HOW_USER_FEELS;
Введет:
Добро пожаловать!
Как Вы себя сегодня чувствуете?
 
Можешь порыться в phpMyAdmin и взять некоторые идеи из него
 
Все хорошо конечно, но вопрос-то немного в другом.
Обязательно подключать языковой файл в каждой функции или нет?
Так не работает:
PHP:
include("./ru.php");

function name($per) {
echo $lang; 
}
function name($per) { 
echo $lang; 
}
function name($per) { 
echo $lang; 
}
Так работает:
PHP:
function name($per) { 
include("./ru.php"); 
echo $lang; 
}
function name($per) { 
include("./ru.php"); 
echo $lang; 
}
function name($per) { 
include("./ru.php"); 
echo $lang; 
}
 
Нет естественно :)
Так у тебя скрипт будет как черепаха работать..

Вариантов несколько:
1) использовать global $lang в каждой функции
хз, неудобно ппц..
лучше если $lang - массив
2) использовать $GLOBALS['lang']['нужная фраза']
тоже неудобно
3) написать функцию
плюсы: функция всегда глобальна (видна отовсюду)

так вот, вариант 3..
возвращает перевод, при неудаче - переданный параметр
работает только на пхп5.

PHP:
function translate( $w ) {
static $lang = '';
if ( ! is_arary( $lang ) ) {
include '/путь/к/файлу/языков';
// в файле должен быть массив $lang
// например:
// $lang = array( 'hello' => 'превед', 'bear' => 'медвед' )
}
return isset( $lang[$w] ) ? $lang[$w] : $w
}
 
А что в этой функции специфичного для PHP5?
 
Статичные переменные работают как в моем скрипте только на пхп5, на 4 надо делать через стдкласс.

смотри тут..
Для просмотра ссылки Войди или Зарегистрируйся
 
Все хорошо конечно, но вопрос-то немного в другом.
Обязательно подключать языковой файл в каждой функции или нет?

Нет, необязательно сделай так как посоветовал Eihwaz
Файл test.php
Код:
<?php
include("lang.php");  

function name($per) {  
echo ""._HELLO." $per";  
} 
?>

файл lang.php

Код:
<?php
define("_MESSAGE","Доступ запрещен");
define("_HELLO","Привет");
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху