-
Notifications
You must be signed in to change notification settings - Fork 1
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
I18n support #29
I18n support #29
Conversation
Also refactored some code.
By default it will try to apply it to the static fields in the form, but it can be accessed for other purposes. Check the new code's JavaDoc comments for more info.
Tiene buena pinta, y me gusta que la API esté documentada. Si se pudiera meter algún test sería genial. Un par de comentarios: AbstractSubForm.Los cambios deben ser aplicados también en AbstractSubForm. Como el flujo en SubForm y Form es ligeramente distinto yo lo metería ya, para ver si sobreescribir initGUI es la mejor opción o igual se puede hacer directamente en el constructor que suele ser lo preferido en SubForm. Tablas empotradas. Estaría bien reflexionar en si esto soluciona traducir las cabeceras de las tablas empotradas ( #23 ) y probar a hacer un ejemplo. Configuración vs Código. No prioritario. Este punto lo tengo menos claro, pero valoraría la opción de definir Orden de visualización. No prioritario. He añadido un punto en los requisitos. El del orden. Por si se le puede dar una pensada:
Visibilidad de objetos. Un formulario (que herede de AbstractForm / AbstractSubForm) probablemente tenga que tener acceso al I18nResourceManager. Por ejemplo al construir el panel de ordenar el formulario te hace falta generar Field o lo que sea y para eso hace falta acceso a I18nResourceManager. Esto sería lo más flexible, pero también podría existir en alguna clase un método toFields o parecido que me devuelva una lista de esos objetos directamente. Sobre el token sqlite vs postgresql. No prioritario. Relacionado con el punto anterior, si se puede hacer como comento evitamos el problema de tener el mismo proyecto sobre sqlite y postresql, donde en sqlite no se puede cualificar por esquema. |
Works in the exact same way as with forms.
We use the VM's default one if gvSIG doesn't provide one.
Also changed the way they are stored inside the manager.
It's used for the column aliases and the boolean values formatting.
Comento sobre los puntos y sugerencias del anterior comentario:
Hecho, los he aplicado igualmente dentro de initGUI.
También hecho, ahora hay constructores adicionales sin arrays de alias para los AlphanumericHandlers. En estos casos se busca en los recursos i18n del formulario correspondiente. También se emplean estos recursos para recuperar las traducciones de los valores boolean/bit de las columnas (e.g. 'table_true_value'), pidiéndolos en última instancia a gvSIG si no se encuentran en otro sitio, para que sea retrocompatible con las versiones anteriores donde esos valores se ponían en el fichero properties de la extensión.
Es una buena idea. Lo contemplaré después del resto de funcionalidades importantes.
No creo que esto sea competencia de i18n, parece más un tema del modelo y la lógica de negocio (la importancia que tengan ciertos campos en el contexto concreto), o al menos de maquetación. Yo contemplaría añadirlo en otro punto si el código no se complica demasiado.
Métodos añadidos. De hecho inicialmente los tenía en la primera versión pero en algún momento los quité, probablemente por error...
Sip, la idea es crear nuevos recursos para casos concretos donde se puede necesitar un tratamiento distinto en la recuperación de la cadena, como sería este caso. La interfaz a implementar es sencilla, así que no sería un problema. De todos modos, aquí ha habido un cambio de enfoque a la hora de almacenar las cadenas (lo comento más adelante) que quita sentido a esa nomenclatura en muchos casos: antes había un único fichero properties en el cual había que diferenciar cadenas con mismo nombre de distintos formularios, mientras que ahora cada formulario tiene sus recursos i18n que pueden apuntar a ficheros properties distintos.
Creo que el cambio de enfoque comentado en el punto anterior y la posibilidad de definir recursos i18n con comportamientos complejos evita este problema (aunque quizás haya que detectar el driver SQLite en algún caso debido a las limitaciones de ese SGBD). Otros puntos que estaría bien contemplar:
|
Lo de las traducciones de gvSIG estoy de acuerdo contigo. Sobre el token i18nkey y sobre si dar más peso a ún I18nResource o a otro, todavía no lo tengo claro. Yo lo dejaría estar porque hasta que lo usemos en dos o tres proyectos para las tres situaciones que tenemos (etiquetas, panel de ordenar formularios, consultas) creo que va a ser difícil afinar más. |
I plan on starting tomorrow to migrate all fonsagua forms to this approach. |
Wraps the text in html tags.
Me he encontrado un problema con el enfoque de identificación de campos empleado hasta ahora. Los checkboxes son tanto un componente de entrada de datos como una etiqueta, y por su primera condición deben tener el nombre del campo en la BDD para funcionar correctamente al guardar y leer. Esto implica que no podemos ponerles el nombre con el formato i18n.
|
La 3 no me gusta. Implica retocar todos los abeille existentes. Lo de tener que meter el token inicial en todos los "widgets traducibles" era algo que no acababa de ver claro del todo. Mi comentario con el título "Sobre el token i18nkey" iba un poco en esa línea. A pesar de esto me inclino más por la solución 1 que por la 2. Es pronto para saber que va a funcionar bien y que no y digamos que la 2 ya está implementada. Supongo que optaría por algo como añadir a translateComponentText, que si es un checkbox haga algo como:
|
El token i18n puede resultar innecesario en formularios nuevos, pero lo añadí para evitar traducciones indeseadas en abeilles previos. Quizás sea sobre-ingeniería, pero no quería romper proyectos antiguos. Si los demás lo veis innecesario, podemos quitarlo y ya evitamos este problema. |
Lo veo bien como está ahora :). Por cierto que si por tu parte viene bien, por la mía es un buen momento para que integres en master todo. |
They are a special case because checkboxes act as both a label and an input component. We will try to translate every checkbox that is already displaying a text, despite it having a name not starting by i18n.
OK, he solucionado el caso de los checkboxes como comentamos, sin requerir que empiecen por i18n.
En el segundo caso no es posible poner las opciones de formato (dd, html, upper...), así que el texto del fichero properties ya deberá ir correctamente formateado. |
Integrado en la rama master. |
Base i18n support for NavTableForms.
JavaDocs contain an explanation on its syntax, and fonsagua has another i18n branch with an example of its use.