Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2016, 11:20
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Методика глобализации
Здравствуйте.

Хочу посоветоваться с присутствующими специалистами насчет глобализации приложения. Имеем экст пятой версии,билд через ЦМД. Задача: отображать все тексты в зависимости от языка залогиненного пользователя.

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

Подумав, я это решил через вьюмодель. Все локализуемые компоненты имеют конфиг для связывания:

bind: {
		title: '{localtext.heading.projectinfo}'
	}


После старта приложения идет аджакс запрос за текстами, полученные данные передаются во вьюмодель ну и с помощью байнда отображаются в компонентах. Но это решение кажется не очень хорошим с точки зрения производительности, ведь мы получаем 100500 связей которые фактически нужны только один раз, при старте приложения. Потом текст уже меняться не будет.

Может присутствующие гуру посоветуют более изящное решение? Ну или скажите что перформанс не страдает и чтоб я не парился )
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2016, 12:14
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

простой способ
заведи какую-нибудь глобальную функцию типа
function _(textEn) {
    //...
    return text; 
}

и все строки в приложении пропускай через эту функцию
{
    //...
    text: _('Hello!');
    //...
}

и пусть эта функция, берет замены из нужного файла с переводами
Ответить с цитированием
  #3 (permalink)  
Старый 04.10.2016, 12:28
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Да, можно было бы... Но я не знаю как скачать тексты ДО того как фреймворк начнет обрабатывать конфиги классов. Например, у меня есть некий синглтон Localtext и он в своем конструкторе инициирует ajax запрос к текстам. В нем же и функция для раздачи. Но пока он там ждет ответа фреймворк обрабатывает конфиги, а текстов еще нет. И получаем пустые места вместо заголовков и прочего. Такая функция будет работать во время выполнения но плоха для конфигов.
Ответить с цитированием
  #4 (permalink)  
Старый 04.10.2016, 14:03
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от Infarch
ДО того как фреймворк начнет обрабатывать конфиги классов
перемести конфиги компонентов в initComponent,
они они будут выполняться только после инициализации компонента.
Ответить с цитированием
  #5 (permalink)  
Старый 04.10.2016, 15:31
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Ой, ну это совсем грубо. Думал о таком варианте, но мешать код и конфиги не хочется. Лучше уж как есть. Однако тестирую возможность задержать выполнение бутстрапа на время загрузки переводов.
Ответить с цитированием
  #6 (permalink)  
Старый 04.10.2016, 21:43
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Сообщение от Infarch Посмотреть сообщение
Вариант с несколькими билдами под разные языки не подходит. Все тексты сидят в базе данных и могут быть изменены отделом поддержки, а перебилдывать и обновлять веб серверы они не будут.
В качестве лирического отступления: перед тем, как перейти на Тёмную Сторону и заняться всякой фигнёйпрограммизмами, я десять лет проработал в бизнес-интеграции, где занимался втюхиванием и впариваниемпроектированием и внедрением всякой развесистой клюквы в крупные компании. Это было, в сущности, уже довольно давно, но у меня до сих пор рефлекторно дёргается колено, когда я слышу ключевую фразу... Да-да, см. выше. Потому что слышал я эту фразу столько раз, в стольких разных вариантах, и от такого количества разных людей, что вы не поверите. ;)

А ещё вы не поверите, что в примерно 95% случаев выяснялось, что "они", оказывается, вполне вменяемые люди и вполне себе всё "будут", если им спокойно и без драмы объяснить, что нужно и зачем. В данном случае, что есть рекомендованная производителем процедура локализации софта, и работает она через сборку отдельных файлов на каждый язык. Рекомендаций по альтернативным подходам производитель не даёт, реализация на свой страх и риск, без гарантированных результатов, но с большой вероятностью срыва сроков внедрения проекта. А теперь будьте добры, объясните пожалуйста, в чём причина технической невозможности обеспечить поддержку пересборки софта с вашей стороны. Возможно, мы сможем предложить варианты решения?

Если всё это обсуждать в письменном виде с копией руководству, то нужный результат практически гарантирован. ;) И вполне может оказаться, что скрипт о 10 строчках для выгрузки данных из БД и запуска сборки ребята из техподдержки даже и сами могут написать...
Ответить с цитированием
  #7 (permalink)  
Старый 05.10.2016, 10:22
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

nohuhu, я согласен, и медведя можно научить на велосипеде ездить. Но у клиента есть своя процедура обновлений, а мне приходится балансировать между требованиями и здравым смыслом. Вопрос этот уже поднимался, сказали - не надо. Там вообще все сложно. Основной клиент, его кастомеры что купили и поставили сайт себе, везде свои сапорты. И еще ядреная система локализации при которой, например, пользователям из компании А надо в текстах заменять некоторые слова. Так что костыль уже и не совсем костылем начинает казаться.
Да и не только в языках дело. Вот еще свои настройки формата даты и времени у каждого пользователя свои. Их бы тоже было полезно перед обработкой конфигов качнуть и принять во внимание. Сейчас это у меня как и языки, через вьюмодель.
Вот и не хватает мне некоего механизма для подкачки данных ПЕРЕД запуском микролоадера/бутстрапа. Пытаюсь скрестить ежа с павлином...
Ответить с цитированием
  #8 (permalink)  
Старый 05.10.2016, 16:15
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Ну вот, накостылил такой вот солюшен:
<!DOCTYPE HTML>
<html manifest="">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

    <title>SafetyRound</title>
		
		<!-- Pre-load all needed resource, like to texts, etc. -->
		<script type="text/javascript">
			
			function loader(){
				var script = document.createElement("script")
				script.src = "/controller?cmd=sr.assets.localtext&dc_"+(new Date()).getTime();
				script.type = "text/javascript";
				document.body.appendChild(script);
				script.onload = function(){
					var
						html = document.getElementById("sp").innerHTML,
						script2 = document.createElement("script"),
						attrs;
						
					html = html.replace(/<!--<script\s+/, "").replace(/><\/script>-->/, "").replace(/"/g, "");
					attrs = html.split(/\s|=/);
					while( attrs.length ){
						script2.setAttribute( attrs.shift(), attrs.shift() );
					}
					document.body.appendChild(script2);
				};
			}
			
		</script>
		
		
</head>
<body onload="loader()">
	<span id="sp" style="display: none"><!--<script id="microloader" type="text/javascript" src="bootstrap.js"></script>--></span>
</body>
</html>


Вроде работает...
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2016, 12:59
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

а нельзя было просто
перед bootstrap загрузку нужного скрипта прописать
типа

<script src="script-need.js"></script>
<script src="bootstrap.js"></script>

?
Ответить с цитированием
  #10 (permalink)  
Старый 06.10.2016, 13:49
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Нельзя, есть шанс что сервер стормозит и на момент запуска бутстрапа данных еще не будет
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
методика определения поддержки стилизации placeholdr'а Invis1ble Javascript под браузер 21 16.02.2013 18:21
Методика быстрого перебора элементов с css-свойством position uonax Общие вопросы Javascript 6 29.06.2010 09:18