2016-11-23 15 views
0

Я использую symfony в своем бэкэнд и выставляю шаблоны через веточку. Для перевода с использованием следующего руководства, который отлично работает. https://symfony.com/doc/current/translation.htmlПеревести значение angularJS с symfony

работы:

{{ "Active Option" | trans({}, 'frontend', app.request.locale) }} 

Но проблема в том, что у меня есть некоторые слова, которые я должен перевести, в angularJS переменных. У меня есть несколько файлов .xlf для перевода, и я знаю angular.translate. Но я не хочу его реализовывать.

{{ '{{' }} item.optionTitle {{ '}}' | trans({}, 'option', app.request.locale) }} 

Может кто-нибудь объяснить мне, как я мог бы перевести значение переменной angleularJS с переводом twig?

ответ

1

https://github.com/willdurand/BazingaJsTranslationBundle

Перевод прута оказывается на стороне сервера, ваш JS является сторона клиента. С помощью этого пакета вы можете выставить переводы в js. Но у меня нет опыта с этой связкой и угловатой.

+0

благодарим за отзыв. Но я не хочу использовать другой пакет или плагин, если это возможно. – kristof

1

Использовать verbatim тег. Он отмечает разделы как сырые тексты, которые не следует анализировать.

Для exmple:

Создать переменную прут и воздействовать на него при значении углового-х переменной

{% set optionTitle %} 
    {% verbatim %} {{ item.optionTitle }}{% endverbatim %} 
{% endset %} 

Traslatate

{{ optionTitle | trans({}, 'option', app.request.locale) }} 

Теперь {{ item.optionTitle }} не будет разобран прутик но angularjs.

+0

Спасибо за подсказку. Но я использую twig/symfony для перевода. Поэтому мне нужно значение переменной angularJS в веточке. Ваши фрагменты не работают для меня – kristof

+0

Хеш-ключ должен быть цитируемой строкой, числом, именем или выражением, заключенным в круглые скобки (неожиданный токен «оператор» значения «%» - появляется как ошибка – kristof

+0

Вы правы я редактирую свой ответ – bobo

0

Вы можете создать конечную точку API, который принимает строку, чтобы перевести

/api/translate?string=Active+Option 

и перевести контроллер API

$translator->trans($string); 

Затем построить простой фильтр перевода в AngularJS

angular.filter('apiTranslate', function($http) { 
    return function(string) { 
    $http.get('/api/translate?string=' + string).then(function (response) { 
     return response; 
    }); 
    }; 
}) 

Keep в виду, что существуют другие решения, которые отлично справляются с этой проблемой (a предложил BazingaJsTranslationBundle), но вы упомянули, что не хотите использовать библиотеки и хотите использовать TWIG для перевода.

0

Существует не так много альтернатив. Вам нужно создать что-то подобное в вашем html

<script> 
    var Global = Global || {}; 
    Global.translation = {{ catalogue|raw|json_encode }} 
</script> 

Таким образом, вы разоблачить глобально перевод на другие ваши файлы.

Что такое catalogue?

От версия 2.6 Symfony дает вам возможность получить весь каталог перевода именно в случае, если вам нужно, чтобы выставить его на внешний интерфейс

В случае, если вы хотите использовать один и тот же каталог перевода за пределами приложения (например, использование перевод на клиенте сторона), можно получить необработанные сообщения перевода. Просто укажите локаль

Documentation

$catalogue = $translator->getCatalogue('fr_FR'); 
$messages = $catalogue->all(); 
while ($catalogue = $catalogue->getFallbackCatalogue()) { 
    $messages = array_replace_recursive($catalogue->all(), $messages); 
} 
// $messages contains the whole catalogue that you have to pass to frontend 

Так в основном ваш catalogue будет совместно с фронтэнда.

Вернуться к FRONTEND

Затем я создал функцию, которая просто возвращает мне перевод на ключ.

function _translate(key) { 
    return Global["translation"][key]; 
}