#php #translation #gettext
#php #перевод #gettext
Вопрос:
У меня есть веб-страница на PHP, и я перевожу с помощью gettext _("STRING_TO_TRANSLATE")
.
У меня в моей БД есть одна таблица со всеми профилями пользователей для моего веб-сайта. Я помещаю их в поле выбора, чтобы выбрать один.
Теперь я хочу перевести имена профилей.
Есть ли КАКОЙ-ЛИБО способ перевести (ИСПОЛЬЗУЯ GETTEXT) имена профилей, поступающие из базы данных?
Пример кода моего окна выбора:
while($row = mysqli_fetch_array($result_user_type))
{
echo "<option $selected value="".$row['id']."">".$row['designation']." </option>";
}
Ответ №1:
Разве вы просто не сделали бы…
while($row = mysqli_fetch_array($result_user_type))
{
echo "<option $selected value="".$row['id']."">"._($row['designation'])." </option>";
}
Однако я не уверен, никогда не использовал gettext или что-то еще, но если это просто функция, которая принимает аргумент и возвращает переведенную строку, то это должно это сделать.
Комментарии:
1. Выполнили ли вы все шаги, описанные в этом руководстве, например: blog. lingohub.com/developers/2013/07 /…
2. @Adder Мои переводы с помощью gettext работают отлично. Моя проблема заключается в переводе переменных из БД.
3. Я уверен, что он знает вашу проблему. Он опубликовал это, потому что то, что я опубликовал, не сработало для вас. Итак, он спрашивает, правильно ли вы настроили gettext. И как вы используете его в других контекстах?? Найдите их и просто скопируйте точно такие же … и поместите переменную в скобки функции. Должно сработать.
Ответ №2:
Вы просто не можете переводить переменные PHP! PHP gettext
не выполняется, он просто сканирует ваш код, чтобы получить простые строки.
Вы должны посмотреть это, например http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong /
Приветствия
Комментарии:
1. Знаете ли вы какое-либо альтернативное решение для этого?
2. Может быть, вы могли бы создать массив, подобный этому массиву( [0] => __(‘ Тип пользователя 1’), [1] => __(‘ Тип пользователя 2’) […] ) и внутри вашего цикла вы вызываете свой $arr_user_type[ $row[‘id’]]. Надеюсь, это поможет. Приветствия!
Ответ №3:
Чтобы перевести мой массив user_type, я создал класс, который печатает результат из базы данных в файл translate.php
:
public function createArrayType()
{
$filePHP = fopen("translate.php", "a");
$initial = true;
if (!is_resource($filePHP))
return false;
$sql_activity = "SELECT id, name FROM user_type";
$result_activity = mysqli_query( $this->mysqli , $sql_activity );
fwrite($filePHP, "n $user_types = array(");
while($row = mysqli_fetch_array($result_activity))
{
if(!$initial)
fwrite($filePHP, ",");
fwrite($filePHP, "'".$row['id']."' => _('".$row['name']."')" );
$initial = false;
}
fwrite($filePHP, "); n");
fclose($filePHP);
}
Затем просто используйте poEdit для перевода и используйте массив $user_types:
while($row = mysqli_fetch_array($result_user_type))
{
echo "<option $selected value="".$row['id']."">".$user_types[$row['id']]." </option>";
}
Я не знаю, лучший ли это вариант, но этот вариант решает мою проблему.