PHP использует gettext для перевода массива

#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>";
}  
 

Я не знаю, лучший ли это вариант, но этот вариант решает мою проблему.