Некоторое время назад я читал статью W3C на 'Re-using Strings in Scripted Content', в которой содержатся полезные советы по интернационализации, но которая поражает меня как в противоречии с принципом DRY (Do not Repeat Yourself) устранения повторяющегося кода.Не повторяйте себя против интернационализации
Для того, чтобы их примеру, мы могли бы иметь некоторый код, как это ...
print "The printer is ";
if (printer.working) {
print "on.\n";
} else {
print "off.\n";
}
print "The stapler is ";
if (stapler.working) {
print "on.\n";
} else {
print "off.\n";
}
Мой инстинкт должен был бы исключить повторение примерно следующим образом ...
report-state(printer, "printer");
report-state(stapler, "stapler");
function report-state(name, object) {
print "The "+name+" is ";
if (object.working) {
print "on\n";
} else {
print "off\n";
}
}
... но это может вызвать трудности с кодом, если нам нужно локализовать его на испанский язык, потому что слово «on» в этих двух случаях явно отличается.
Итак, я думаю, мой вопрос в том, как другие разработчики подошли к балансированию принципа DRY с интернационализацией их кода?
Часть меня хочет утверждать, что интернационализация является одним из тех экстремальных программ «you arent gonna need it». Однако, с другой стороны, рефакторинг с принципом DRY должен сбалансировать это, упрощая реализацию функциональности по мере необходимости, но не сложнее, чем здесь.
с помощью [i18next] (http://i18next.com/pages/doc_features.html#nesting) 's вложенности функциональность я попытаться повторно использовать глоссарий, например: `$ t (принтер) включен. У меня есть термин принтер в одном месте. – jamuhl 2012-10-22 11:29:25