используя локализацию в cakephp - PullRequest
2 голосов
/ 18 апреля 2010

Как я могу локализовать строки в cakePhp? У меня не было никакого успеха с онлайн-документацией. Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 18 апреля 2010

Существует несколько шагов:

  1. Сначала установите используемый языковой стандарт
  2. Создайте один или несколько .po файлов для этого языка
  3. Оберните все свои строки с поддержкой l10n с помощью вспомогательных методов __() или __d()

Вот выдержка из одного из моих проектов:

# app/app_controller.php
uses ( 'L10n' );

class AppController extends Controller {
  public function beforeFilter() {
    /**
     * Derive the desired locale by reading the subdomain from
     * the HTTP_HOST server variable. Locale subdomains can use
     * either the 2 or 3 character ISO code. Information on locale
     * ISO codes is at http://www.loc.gov/standards/iso639-2/php/code_list.php.
     */
    $this->L10n = new L10n();

    /** Auto-detect the request language settings */
    $this->L10n->get();

    /**
     * Set the default "domain" for translations. The domain is the
     * same as the po file name in a given locale directory. e.g.
     * __d( 'homepage', 'message_id' ) would look for the
     * message_id key in homepage.po. Using the __() convenience
     * function will always look in default.po.
     */
    $this->set( 'domain', 'default' );
  }

  # The rest of your AppController code
}

Этот фрагмент будет установленязык.Все, что вам нужно сделать, это предоставить соответствующие .po файлы в каталоге /app/locale/eng/LC_MESSAGES/.Книга CakePHP предоставляет достаточную информацию об этом , я думаю.

Если вы решите использовать только один .po файл, вы обернете свои строки с помощью помощника __().Я выбрал несколько файлов .po, чтобы избежать одного массивного файла, поэтому я использовал помощник __d(), чтобы я мог указать, какой домен (домен == имя файла .po без расширения .po).

ОБНОВЛЕНИЕ

Я должен добавить, что вам нужно использовать поведение Translate, чтобы помочь вам с содержимым базы данных, которое требует перевода.

0 голосов
/ 23 мая 2018

CakePHP 3.x Локализация

Создать действие для динамического изменения языка

Маршрут

$routes->connect('/locale', ['controller' => ' Users', 'action' => 'languageChange']);

Действие контроллера

UsersController

use Cake\Http\Session;
use Cake\I18n\I18n;

//Before filter in users controller
public function beforeFilter(\Cake\Event\Event $event)
    {
        parent::beforeFilter($event);
    }


      /**
     * Change language
     */
    public function languageChange()
    {
               if ($this->request->is('post')) {
            $session = $this->getRequest()->getSession();
            if (!empty($this->request->getData('locale'))) {
                $session->write('Config.language', $this->request->getData('locale'));
                $this->redirect($this->referer());
            } else {
                $session->write('Config.language', I18n::getLocale());
                $this->redirect($this->referer());
            }
        }
    }

Создать файл представления означает файл language_change.ctp

<?php
echo $this->Form->create("Localizations", array('url' => '/locale'));
echo $this->Form->radio("locale", [
    ['value' => 'en_US', 'text' => 'English'],
    ['value' => 'de_DE', 'text' => 'German'],
    ['value' => 'fr_FR', 'text' => 'French'],
]);
echo $this->Form->button('Change Language');
echo $this->Form->end();
?>
<h2><?php echo __('Hello'); ?></h2>
<h2><?php echo __('How are you?'); ?></h2>
<h2><?php echo __('Wel Come'); ?></h2>
<h2><?php echo __('Good Job'); ?></h2>
  • Этот поток выполнения
  • Смена языка действия первого вызова, например: http://example.local/locale
  • Затем поменяйте язык, выберите переключатель и поменяйте язык

AppController

use Cake\I18n\I18n;
use Cake\Http\Session;
use Cake\Core\Configure;


 public function beforeFilter(Event $event)
    {
        $session = $this->getRequest()->getSession();

        if ($session->check('Config.language')) {
            I18n::setLocale($session->read('Config.language'));
        } else {
            $session->write('Config.language', I18n::getLocale());
        }
    }

Создать это местоположение в файлах SRC / Locale / en_US / default.po

msgid "Hello"
msgstr "Hello"

msgid "How are you?"
msgstr "How are you?"

msgid "Wel Come"
msgstr "Wel Come"

msgid "Good Job"
msgstr "Good Job"
  • ЦСИ / Locale / de_DE / default.po

    msgid "Hello"
    msgstr "Hallo"
    
    msgid "How are you?"
    msgstr "Hoe gaat het met je?"
    
    msgid "Wel Come"
    msgstr "Wel kom"
    
    msgid "Good Job"
    msgstr "Goed gedaan"
    
  • Настройка в boostrap.php

    'Session' => [ 'defaults' => 'php', 'language' => 'en_US' ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...