Cakephp i18n получить перевод локалей - PullRequest
3 голосов
/ 08 марта 2012

Я должен сказать, что у CakePHP (с использованием версии 1.3, потому что проект был создан с этим) есть странная концепция i18n. Я успешно перевел статические строки, но динамические ... идеи торта о том, как управлять многоязычным контентом, кажутся мне, скажем так, неуместными. Я настроил таблицу i18n (разделю ее на несколько таблиц позже, когда получу работу) и прикрепил поведение translate к желаемым моделям. Пока все хорошо, тогда в add-actions я добавил поле выбора, содержащее локали (en_us, de_de ...), чтобы пользователь мог выбрать, какую из них сохранить. Сохраняя записи, я сделал $this->Modelname->locale = $locale;, чтобы сообщить модели, какую локаль использовать. Запись успешно сохранена, но вот проблемы: - У меня есть index-action с большим количеством записей, я хочу, чтобы у пользователя была возможность иметь разные переводы для каждого элемента (скажем: один элемент переведен на английский (нас) и немецкий, другой переведен на английский ( us), итальянский и французский, как я могу дать пользователю возможность редактировать / удалять отдельные переводы? - Я использовал $this->Modelname->bindTranslation(...) внутри действий, где мне нужно было получить имена локалей (какие переводы существовали), чтобы пользователь мог решить, какой из них редактировать, есть ли другой, более элегантный способ сделать это? Кроме того, когда я делаю это: $this->Modelname->bindTranslation(...); и затем вместо использования метода find () я использую paginate (), он не возвращает никаких переводов ... = /

Я надеюсь, что кто-то понял мой немного слишком сложный текст и, возможно, может помочь мне; -)

Заранее спасибо !!

1 Ответ

1 голос
/ 24 марта 2012

У меня есть решение для Cakephp2.0, которое, возможно, тоже работает с Cakephp1.3, также я никогда не тестировал. Вы должны переименовать вещи и редактировать некоторые вещи, но это может сработать. В случае: я рекомендую вам обновить Cakephp2.0 до тех пор, пока вы находитесь в раннем состоянии вашего проекта. 1.3 устарела с тех пор, как Cakephp2.1 был наконец выпущен. Я прошел этот процесс обновления два или три раза, и это день работы, может быть, два. В моем случае это перезапущенный проект с нуля. Я не очень доверяю этой обновленной оболочке, хотя она действительно отлично работает.

Короче говоря.

Мой метод включает перезапись существующего TranslateBehavior, добавление нового TranslationBehavior, помощника и компонента.

Вот архив с файлами.

http://www.func0der.de/cakephp/MultiLanguageForms.zip

Как только я пойму, как правильно использовать GIT, я отправлю запрос им. Билет с файлами уже находится в: http://cakephp.lighthouseapp.com/projects/42648/tickets/2463-multi-language-forms#ticket-2463-4;)

Использование довольно просто. В контроллере вы включаете компонент и помощник. Модели получают перевод и перевод. Translatio идет первым из-за обратного вызова. Но скрипт все равно будет выдавать исключение.

Компонент сам найдет все языки, существующие в папке «Locale», и сохранит их в классе Configure.

В представлении вы используете $ this-> Translation-> input ('Modelname.field') ;. Название модели важно, потому что я еще не нашел способ определить это автоматически, потому что я не уверен, совпадает ли экземпляр FormHelper в моем помощнике с представлением. И у меня есть утечка времени. ^^

Поведение перевода подтвердит КАЖДУЮ! языковых полей на основе имени поля.

Если есть какие-либо вопросы: Задайте вопрос ^^ Я не часто бываю здесь, постараюсь взглянуть на этот вопрос;)

Поздравления func0der

...