Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internacionalización como parámetro al objeto para identificar el idioma. #2

Open
2 tasks
fjavier opened this issue Aug 13, 2020 · 2 comments
Open
2 tasks
Assignees
Labels
enhancement New feature or request

Comments

@fjavier
Copy link

fjavier commented Aug 13, 2020

Problema:

Actualmente se requiere llamar diferentes clases por cada idioma del cual se requiere obtener el texto, teniendolo de esta manera, tendriamos que crear una clase por cada nuevo idioma que quisiéramos agregar.
Number2Text converter = new SpanishNumber2Text(1);

Recomendación:

Seria mucho mas sencillo para los que implementen la funcionalidad y mucho mas mantenible hacer el llamado a una sola clase, la cual se le pase como primer parametro el idioma, si no se le pasa el parámetro del idioma entonces por defecto que el idioma sea español.

Number2Text converter = new Number2Text("es", 1);
Number2Text converter = new Number2Text("en", 1);

Como recomendación seria utilizar internacionalización para crear este nuevo feature

Criterios de aceptación

  • Pruebas Unitarias.
  • Evidencias
@fjavier fjavier added the enhancement New feature or request label Aug 13, 2020
@fjavier fjavier self-assigned this Aug 13, 2020
@fjavier fjavier changed the title [FEATURE] - [FEATURE] - Internacionalización. Aug 13, 2020
@fjavier fjavier changed the title [FEATURE] - Internacionalización. [FEATURE] - Internacionalización como parámetro al objeto para identificar el idioma. Aug 13, 2020
@fjavier fjavier changed the title [FEATURE] - Internacionalización como parámetro al objeto para identificar el idioma. Internacionalización como parámetro al objeto para identificar el idioma. Aug 13, 2020
@armalagon armalagon assigned armalagon and unassigned fjavier Aug 26, 2020
@armalagon
Copy link
Contributor

armalagon commented Aug 27, 2020

Me parece muy buena la idea de no tener que instanciar las implementaciones de los idiomas directamente. Number2Text es una clase abstracta, por lo tanto no la podemos instanciar, lo que sí podemos hacer es agregar métodos de fábrica estáticos en esta clase que representen cada idioma. Como el constructor de la clase tiene diferentes firmas (5 versiones en total), debemos alinear la firma de estos nuevos métodos estáticos con los constructores.

El cambio se vería así:

Number2Text converter = Number2Text.spanish(1_250);
Number2Text converter = Number2Text.spanish(1_250, (eventType, conversionType, event, output) -> {});

String letter = converter.toText();

String anotherLetter = Number2Text.spanish(1_250).toText();

Hace poco @berroteran sugirió otra idea que me parece puede ser cubierta en esta historia: se debe invocar el método toText() para obtener el valor en letras y para simplificar aún más el código podrímos devolver directamente el texto y no una instancia del convertidor usando métodos estáticos de fábrica. Sólo hay un aspecto a considerar: el método toText tiene 4 firmas (una de ellas no tiene parámetros, lo que dejaría 3 en total) y sus parámetros deben ser incluídos en cada método estático para preservar la funcionalidad intacta. Esta idea hay que sopesarla porque se agregarían 2 parámetros y se tendrían que crear las combinaciones de uso con estos 2 parámetros lo que aumentaría la cantidad de firmas de los métodos estáticos.

A continuación las variantes usando el constructor Number2Text(long):

String letter = Number2Text.spanish(1_250); // sin parametros
String letter2 = Number2Text.spanish(1_250, (numberToLetter, decimalPart) -> numberToLetter, true); // 2 parametros
String letter3 = Number2Text.spanish(1_250, (numberToLetter, decimalPart) -> numberToLetter); // 1 parametro
String letter4 = Number2Text.spanish(1_250, true); // 1 parametro

Cuando soportemos más idiomas (digamos unos 4), retomaría tu idea con un ligero ajuste, usar el object Locale para parametrizar el idioma y no un String.

@berroteran
Copy link
Member

Number2Text(long) se ve mas fácil de implementar, aunque no estoy seguro si ya se instació previamente.

so? caso cerrado?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants