2013-06-10 3 views
2

Одна из моих самых больших проблем - использование языковых параметров для javascript. До сих пор мне удавалось загружать языковые файлы всякий раз, когда для этого языка обнаружен файл cookie. Хотя все хорошо работает на стороне PHP, часть javacript сайта все еще находится на английском языке; оповещения и пользовательские функции и т.д. Что я должен сделать, это, как я сделал с PHP стороне вещей: создать языковой файл с пользовательскими строками:Интернационализация в форматировании Javascript и String

//EN file 
$lang["TEST"] = " You have % order(s) waiting in your queue "; 
//FR file 
$lang["TEST"] = " Vous avez %s commande(s) dans votre file d'attente "; 

Что хорошего об этом, это я могу использовать sprintf($lang["TEST"], 4); по желанию на каждый страница. Было бы замечательно, однако, иметь возможность хранить такие строки в файле js, который может быть отформатирован одинаково в зависимости от того, что функции хотят вывести.

Как я могу это достичь?

+0

Это может быть стоит посмотреть на некоторых яваскрипт templateing языков, таких как рули или усы. – Orangepill

ответ

3

Мы делаем что-то подобное, где я работаю.

Создайте свой массив PHP, а затем экспортируйте его в основной документ как объект Javascript.

var resourceStrings = <?php json_encode($lang) ?>; 

(я не PHP работает прямо сейчас, так что вы должны проверить эту страницу для любых вариантов, которые могут понадобиться, чтобы убедиться, что она ускользает, как вам это нужно :)

http://php.net/manual/en/function.json-encode.php

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

JavaScript equivalent to printf/string.format

+0

Это на самом деле хорошая идея. Я не думал просто экспортировать его js-объект. Я думаю, что эквивалент printf не существует на родном языке JavaScript, но я дам этот метод плагина и посмотрю, что он дает ... – Dimitri

+0

Я заметил, что все мои строки выводятся бесполезно в исходный код. Должен ли я получить json закодированные строки через ajax-вызов с соответствующими заголовками в файле PHP? – Dimitri

+0

Существует несколько вариантов. Если у вас есть присвоенное выше приложение, завернутое в '' теги, то вы должны иметь полезное назначение. Получение их через AJAX - это еще один вариант - но вы должны взвесить стоимость звонка и стоимость вложения. Вы также должны иметь какой-либо метод для истечения срока действия кэшированных данных, если ваши строки ресурсов будут изменены. –

1

Я хотел бы посмотреть в библиотеку шаблонов как mustache

Тогда вы можете создать свой язык шаблонов в файле JSon на языке

// en.json 
{ 
    "test": " You have {{num_orders}} order(s) waiting in your queue " 
} 

// fr.json 
{ 
    "test": " Vous avez {{num_orders}} commande(s) dans votre file d'attente " 
} 

После этого вы можете либо установить файл от php на основе выбранного языка.

<script type='text/javascript'> 
    var allertTemplates = <?= file_get_contents($lang.".json"); ?>; 
</script> 

Или вытащить его с помощью запроса Ajax

Затем, когда вы хотите, чтобы ваш текст шаблона просто ...

var data = Mustache.render(lang.test, {num_orders:6}); 
+0

Это интересная идея. Мне просто нужно заглянуть в эту библиотеку шаблонов, я дам вам попробовать – Dimitri

0

Вы можете создать локализацию файл для расслоения плотного каждого языка

lang.en.js 
lang.fr.js 

then use condition для импорта этих файлов

<script src="lang.<?php echo $lang;?>.js"></script> 

или написать Js загрузчик самостоятельно в Js

PS: осуществлять .format функции в JS JavaScript equivalent to printf/string.format

+1

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

+0

ОК, но сервер должен работать больше, чтобы свалить эти JS :( –

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