2016-06-07 2 views
1

им с помощью Symfony 3 и я хочу сделать перевод нечто в моем приложении к испанской я позволил переводчик этим способом:Перевод файлов в Symfony не существуют

framework: 
#esi:    ~ 
#translator:  { fallbacks: ["%locale%"] } 
translator:  { fallbacks: en } 
secret:   "%secret%" 
router: 
    resource: "%kernel.root_dir%/config/routing.yml" 
    strict_requirements: ~ 
form:   ~ 
csrf_protection: ~ 
validation:  { enable_annotations: true } 
#serializer:  { enable_annotations: true } 
templating: 
    engines: ['twig'] 
#default_locale: "%locale%" 
default_locale: es 
trusted_hosts: ~ 
trusted_proxies: ~ 
session: 

файл с именем по умолчанию «сообщений .fr.xlf "должен появиться в/app/resources/translation или/src/BundleName/resources/translation, но после поиска во всей структуре папок файл" messages.fr.xlf "отсутствует, и нет «translation», поэтому я решил создать его сам, и я попробовал его во всех папках, в которых предполагается, что этот файл существует.

Так что мой файл «сообщения» содержит следующий код:

<?xml version="1.0"?> 
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> 
    <file source-language="en" datatype="plaintext" original="file.ext"> 
     <body> 
      <trans-unit id="1"> 
       <source>Next</source> 
       <target>Siguiente</target> 
      </trans-unit> 
      <trans-unit id="2"> 
       <source>Previous</source> 
       <target>Anterior</target> 
      </trans-unit> 
      <trans-unit id="3"> 
       <source>client</source> 
       <target>Cliente</target> 
      </trans-unit> 
      <trans-unit id="4"> 
       <source>user</source> 
       <target>Usuario</target> 
      </trans-unit> 
     </body> 
    </file> 
</xliff> 

Но он не работает, кажется, что Symfony не могу найти файл перевода, потому что я получаю эту ошибку: «Эти сообщения не доступны для данный локаль и не может быть найден в резервных локалях. Добавьте их в каталог переводов, чтобы Symfony не выводил нетранслированное содержимое ».

+0

1) По умолчанию имя папки перевода - ** переводы ** и NOT _translation_. 2) если вы хотите ** ** ** locale, вам нужно сделать ** messages.es.xlf ** файл и NOT _messages.fr.xlf_ –

+0

Я знаю, что я просто говорю, что файл по умолчанию - «messages.fr» .xlf ", файл, который я создал, -" messages.es.xlf ", а имя папки -" переводы ". Но это не работает – xXNukem

+0

Что делать, если вы устанавливаете 'es' в качестве стандартного языкового' транслятора: {fallbacks: es} 'и помещаете файл в'/app/resources/translations'? Является ли новая установка Symfony или вы используете некоторые пакеты из третьей части? –

ответ

3

Файлы сообщений должны быть в папке app/Resources/translations. Файлы должны быть названы [bundle]. [Language_code]. [Format]. Предполагая, что вы используете набор по умолчанию «AppBundle», код испанского языка «es» и формат «xlf», ваш файл будет иметь имя «AppBundle.es.xlf».

Чтобы проверить свои переводы создать действие в контроллере, чтобы сделать что-то вроде этого:

/** 
* @Route("/controller/test/{_locale}", name="cont_test") 
*/ 
public function testAction(Request $request, $_locale="en") 
{ 
    return $this->render('sometemplate.html.twig')); 
} 

Тогда вы бы просто пойти http://domain.com/controller/test/es проверить ваш перевод (см шаблон веткой ниже первого).

Следующее, что я заметил в вашем примере, это то, что ваш идентификатор транс-единицы неверен. Вы используете идентификаторы, которые являются своего рода автогенерированными идентификаторами mysql. В руководстве Symfony предлагается использовать метод ключевого слова для id. Так, например, если у вас есть поле «имя» в форме, вы можете использовать ключевое слово «form.name». Так что ваш файл сообщение будет выглядеть примерно так:

<trans-unit id="form.name"> 
    <source>name</source> 
    <target>Nombre</target> 

Если вы не кодирования для крупной компании, которые потенциально могут нанимать переводчиков, формат XLF не так желательно, как с помощью версии YAML, который гораздо более сокращенную и имеет много преимуществ использования, что я не буду здесь. Версия YAML может выглядеть следующим образом:

form: 
    name: 'Nombre' 
    price: 'Precio' 

В шаблоне прута вы можете перевести Ид что-то вроде этого:

{% trans_default_domain 'AppBundle' %} 
Please provide your {{'form.name'|trans}} 

Обратите внимание на первую строку в шаблоне говорит переводчику по умолчанию ищет в вашем комплекте для переводов, прежде чем отступить.

Еще одна вещь, касающаяся использования переводов, заключается в том, что вам нужно будет иметь файл перевода сообщения, созданный для выбранного вами по умолчанию языка (для большинства это английский (en)). В противном случае при выборе другого языка ваши идентификаторы будут хорошо переведены, но, вернувшись к языку по умолчанию, они не будут. Так что, если ваш язык по умолчанию английский, мой пример шаблон будет переводить мое высказывание что-то вроде этого:

Please provide your form.name 

Надеется, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^