1 (edited by PunBB 2019.05.17 13:10)

Topic: Как перевести расширение PunBB на русский язык

Это небольшой мануал как перевести punbb расширение на русский язык.

Так как английские слова могут быть вшиты в расширения, то нам вначале нужно определить, а существует ли у выбранного нами расширения для перевода английская версия?

Как узнать есть ли английская версия?

Открываем директорию расширение, например Pan Widgets и смотрим существует ли в ней вложенная папка:
/pan_widgets/lang/English/pan_widgets.php
и соответственно файл pan_widgets.php с массивом слов.

Если директория English уже существует, значит половина работы разработчиками уже сделана, скажем за это им спасибо    PunBB_INFO_ICQ/bravo

Создаём рядом с папкой English, папку Russian и копируем в нее файл pan_widgets.php.

Теперь, если у вас в настройках вашего профиля установлен Русский, то можно смело приступать к переводу. Открываем скопированный нами файл pan_widgets.php в папке Russian и видим примерно следующее:

'Widgets'                =>   'Widgets',
//Options widgets
   'Options widgets'          =>   'Options widgets',
   'New widget added'          =>   'New widget added',
   'Activation widgets'       =>   'Activation widgets',
   'Activate'                =>   'Activate',
   'Activate immediately'       =>   'Activate immediately',
   'Available widgets'       =>   'Available widgets',
   'Blocks'                =>   'Blocks',
   'Header'                =>   'Header',
   'Sidebar'                =>   'Sidebar',

Нам нужно будет заменять английские слова после символа =>. По сути у вас должно получиться следующее:

'Widgets'             =>   'Виджеты',
//Options widgets
   'Options widgets'       =>   'Настройки виджетов',
   'New widget added'    =>   'Новый виджет добавлен',
   'Activation widgets'    =>   'Активация виджета',
   'Activate'          =>   'Активировать',
   'Activate immediately'  =>   'Активировать немедленно',
   'Available widgets'    =>   'Доступные виджеты',
   'Blocks'             =>   'Блоки',
   'Header'             =>   'Шапка',
   'Sidebar'          =>   'Сайдбар',

Сохраняем файл и смотрим результаты. Когда переведёте файл полностью, не забудьте поделиться с другими, смело кидайте заархивированный ланг-файл в тему соответствующего расширения.

Частые ошибки при переводе.
- в строке используются разные кавычки, должны быть либо все одинарные либо все двойные кавычки
- после строки не найдено запятой,
- между словами не найден символ =>,
- не найден слэш при использовании апострофа. Например, если внутри одинарных кавычек используете одинарные или одинарную (одну), то кавычку нужно слэшить обратным слэшем \:

   'Not found'    =>   'File can\'t be found',

Но это в основном требуется для перевода на французский или ещё какие нибудь языки где используются апострофы. Вот в общем то и все что нужно чтобы русифицировать punbb расширение.

PunBB_INFO_ICQ/write Я использую редактор кода с валидатром, таким образом это помогает отслеживать ошибки незаметные на первый взгляд с моим слабым зрением.

PS: Если же английские слова или будь-то какие либо другие вшиты в сам код, то вначале нужно создать перевод на английский, а затем уже переводить на русский или какой либо другой язык. Постараюсь рассказать об этом в следующий раз  PunBB_INFO_ICQ/bye

2

2 (edited by PunBB 2019.05.21 06:47)

Re: Как перевести расширение PunBB на русский язык

В некоторых расширениях английские или же слова на каком либо другом сложном языке вшиты в сам код расширения. В этом случае вначале нам потребуется создать патч на английском, так как это исходный язык форума punbb, ну так уж сложилось   PunBB_INFO_ICQ/dontknow

Итак, в корне какого либо безязычного расширения создаем php файл и следующие папки:

/lang/English/имя_расширения.php

К примеру:

/lang/English/pan_icons.php

/lang/ это директория где будут хранится наши языковые пэкэджи.
/English/ это обязательная директория на английском с файлами.
/pan_icons.php наш языковой файл.
В данном примере в директории содержится один файл, но если расширение довольно объемное, то есть смысл разделить на два файла: один для админки или разных настроек, а второй публичный. Так же в папке может присутствовать файл для перевода слов содержащихся в JS скриптах. На примере это можно увидеть в таком расширении как Pan Uploader.


Открываем файл pan_icons.php и пишем такой код:

<?php 

if (!defined('FORUM')) die();
// Называем массив по принципу: $lang_имя_расширения, то есть его id. Таким образом мы избежим путаницы между расширениями.
$lang_pan_icons = array(

    // добавляем ключ => значение для каждого слова или предложения и закрываем запятой
    'icons_uploading' => 'Loading icon',
    'icons_delete' => 'Delete icon',
    // ...и так далее
);

Сохраняем файл.
Так у нас есть пару ключей и значений. Попробуем теперь вывести Loading icon по ключу icons_uploading.

Чтобы мы смогли получить данные из файла pan_icons.php, нам потребуется его подключить. Вот универсальный способ, практически для любого расширения:

   if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
      require $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
   else
      require $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';

Буквально этот код говорит о том, что если файл для установленного в профиле языка не существует, то подключить английский, чем мы как раз и занимаемся  PunBB_INFO_ICQ/write

Этот код следует вставлять в самом верху хука, либо если хуков какого либо системного файла несколько, то достаточно подключить в самом верхнем хуке, чтобы не пришлось подключать файл триста тысяч восемьсот пятьдесят три раза  PunBB_INFO_ICQ/no

Выводим слова и предложения на экран

Теперь, когда мы подключили языковой файл, то можем обращаться к массиву, в нашем случае с именем $lang_pan_icons. Рассмотрим наш случай на примере кнопок: Загрузить иконку  и Удалить иконку.

Таким образом выглядит код со вшитыми словами:

         <div class="frm-buttons">
            <span class="submit primary"><input type="submit" name="load_icon" value="'Loading icon'" /></span>
            <span class="submit primary"><input type="submit" name="delete_icon" value="Delete icon" /></span>
         </div>

Так выглядит код с переведенными словами:

         <div class="frm-buttons">
            <span class="submit primary"><input type="submit" name="load_icon" value="<?php echo $lang_pan_icons['icons_uploading'] ?>" /></span>
            <span class="submit primary"><input type="submit" name="delete_icon" value="<?php echo $lang_pan_icons['icons_delete'] ?>" /></span>
         </div>

Надеюсь, вы заметили разницу  PunBB_INFO_ICQ/wink

То есть если мы заменяем слова в HTML коде, то меняем слово Loading icon на:

<?php echo $lang_pan_icons['icons_uploading'] ?>

В итоге, в настройках категорий в самом низу мы увидим следующее:

https://punbb.softplaza.net/uploads/images/2019/05/05dd65ab13fdb461406fa08bc762b083.png

Точно также производим замену и в коде php, в этом случае открывать и закрывать  интерпретаторы php <?php ....  ?> не нужно.

Если есть вопросы, пишите ниже  PunBB_INFO_ICQ/bye