Comments 16
А тесты? Где же тесты?
Создай топик
Тесты: функция форматирования для удобной локализации строк
Тесты: функция форматирования для удобной локализации строк
Както нужно было тоже самое на js зделать только в основном по отношению к деньгам. Так я прото передовал масив строк меньше обработак. Но ваш вариант мне больше нравится.
Почему бы языковые формулы не вынести во внешний массив тогда новый язык будет проще добавить.
например так:
______________________
Текст подготовлен в Хабра Редакторе от © SoftCoder.ru
например так:
String.lang = {
'en':function(n){return ( n != 1 ? 1 : )},
'ru':function(n){return ( n % 10 == 1 && n % 100 != 11 ? : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 )}
};
var idxForm = String.lang[ CultureInfo.name.split('-')[]](n); // Вставить во внутрь String.wformat
______________________
Текст подготовлен в Хабра Редакторе от © SoftCoder.ru
И да языковую функцию можно получить еще до цикла, чтобы не делать получение формулы в цикле
Это только у меня руки кривые глючит и ответы постятся не по месту?..
habrahabr.ru/blogs/development/55742/#comment_1496195
habrahabr.ru/blogs/development/55742/#comment_1496195
Можно, тогда лучше сразу в CultureInfo объект
var idxForm = CultureInfo.getNumeralForm(n);
и функцию тогда выносить не надо
var idxForm = CultureInfo.getNumeralForm(n);
и функцию тогда выносить не надо
все таки один раз получить функцию и несколько раз использовать будет оптимально в вашем варианте ведь каждый раз будет локация проверятся
интересно зачем хабр нолик от сюда вырезал CultureInfo.name.split('-')[0]
Честно не вижу смысла выносить один вызов CultureInfo.getNumeralForm и писать что-то вроде
String.wformat = function(f)
{
var getterForm = CultureInfo.getNumeralForm;
var a=arguments;return f.replace(/{(\d+)(.*?)}/ig,function($,$1,$2)
{
var idxForm = getterForm(n);
}
}
Это ведь только один вызов на каждый аргумент.
А другого цикла там больше нигде нет.
String.wformat = function(f)
{
var getterForm = CultureInfo.getNumeralForm;
var a=arguments;return f.replace(/{(\d+)(.*?)}/ig,function($,$1,$2)
{
var idxForm = getterForm(n);
}
}
Это ведь только один вызов на каждый аргумент.
А другого цикла там больше нигде нет.
У вас ведь где то будет выборка формулы по языку так вот эту выборку надо делать один раз а не каждый раз
Не понимаю.
Вот выбор формулы и сама формула сейчас
switch( CultureInfo.name.split('-')[0] )
{
case «en»: idxForm = ( n != 1? 1: ); break;
case «ru»: idxForm = ( n % 10 == 1 && n % 100 != 11?: n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 )? 1: 2 ); break;
}
Вы предложили я поддержал сделать так
idxForm = CultureInfo.getNumeralForm(n);
CultureInfo — глобальный объект, у меня он грузится отдельный скриптом для каждого языка
там будет такая строчка
CultureInfo = {
…
getNumeralForm: function(n) { return n != 1? 1: 0; },
…
};
Вот выбор формулы и сама формула сейчас
switch( CultureInfo.name.split('-')[0] )
{
case «en»: idxForm = ( n != 1? 1: ); break;
case «ru»: idxForm = ( n % 10 == 1 && n % 100 != 11?: n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 )? 1: 2 ); break;
}
Вы предложили я поддержал сделать так
idxForm = CultureInfo.getNumeralForm(n);
CultureInfo — глобальный объект, у меня он грузится отдельный скриптом для каждого языка
там будет такая строчка
CultureInfo = {
…
getNumeralForm: function(n) { return n != 1? 1: 0; },
…
};
Так да нормально я думал вы предлжили чтото типа
CultureInfo = {
…
getNumeralForm:function(n){
switch( CultureInfo.name.split('-')[0] )
{
case «en»: idxForm = ( n != 1? 1: ); break;
case «ru»: idxForm = ( n % 10 == 1 && n % 100 != 11?: n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 )? 1: 2 ); break;
}
return idxForm;
}
…
};
CultureInfo = {
…
getNumeralForm:function(n){
switch( CultureInfo.name.split('-')[0] )
{
case «en»: idxForm = ( n != 1? 1: ); break;
case «ru»: idxForm = ( n % 10 == 1 && n % 100 != 11?: n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 )? 1: 2 ); break;
}
return idxForm;
}
…
};
Sign up to leave a comment.
Реализация С#, Javascript: функция форматирования для удобной локализации строк