Hace un tiempo leía el artículo del W3C sobre 'Re-using Strings in Scripted Content', que contiene algunos consejos útiles sobre internacionalización, pero que me parece contradictorio con el principio DRY (No repetir) de eliminar el código repetitivo.No se repita frente a Internacionalización
Para tomar su ejemplo, podríamos tener algo de código como este ...
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";
}
Mi instinto sería eliminar la repetición más o menos de la siguiente manera ...
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";
}
}
... pero hacerlo causaría una dificultad en el código si necesitáramos localizarlo en español porque la palabra para 'on' es aparentemente diferente en esos dos casos.
Entonces, supongo que mi pregunta es, ¿cómo se han acercado otros desarrolladores a equilibrar el principio DRY con la internacionalización de su código?
Parte de mí quiere argumentar que la internacionalización es una de esas situaciones de programación extrema "you arent gonna need it". Por otro lado, sin embargo, se supone que refactorizar con el principio DRY equilibra esto al facilitar la implementación de la funcionalidad como se requiere, no más difícil que aquí.
mediante el uso de [i18next] (http://i18next.com/pages/doc_features.html#nesting) 'funcionalidad de anidación intento de reutilizar un glosario s, por ejemplo: 'The $ t (printer) is on'so tengo el término printer en un solo lugar. – jamuhl