Página 1 de 2
Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 27 Jul 2010, 22:22
por jurrabi
He empezado a convertir el canal de TVShack a modo multilenguaje como prototipo para ver como de complicado es.
De entrada el ir editando los textos en cada strings.xml (español e ingles) es un dolor de muelas. pero bueno.
Me he encontrado con un problema al pasar los títulos que luego añado con xbmctools.AddNewFolder y es que la función urllib.quote_plus que utilizamos para crear el itmurl no admite cadenas utf (aunque debería).
El problema no es trivial y afecta al corazón de las librerías de python (si os apetece perder media hora podéis leer sobre el tema
aquí) Además el python 2.4 que hay en XBMC es lo que hay, y aunque existiera un parche no se lo podríamos aplicar)
He buscado algún workaround hasta el momento con poco éxito y cada vez que llamo a quote con un unicode obtengo errores diversos y nunca un resultado correcto.
Por probar eliminé la llamada a quote_plus del título y resultó que todo funcionaba sin problema. Esto me hace preguntarme cual es la necesidad real de utilizar dicha llamada ya que he probado con títulos que tenían caracteres espacios y todo funcionaba bien.
Imagino que habrá problemas si hay caracteres & o quizá +... voy a ir probando. Si fallan supongo que una solución sería modificar nosotros esos caracteres únicamente con un diccionario propio... Pero habría que buscar y pensar si algún caracter más puede ser problemático.
El caso es que necesitamos buscar una solución porque si no os ha pasado aún, os pasará.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 27 Jul 2010, 22:38
por jurrabi
Como era de esperar, los mencionados & y + son problemáticos.
Estoy, de momento, realizando un quote pedrestre a base de replace en el propio código de addnewfolderextra así:
Código: Seleccionar todo
title = title.replace("&","%26").replace("+","%2B").replace("%","%25")
De todas formas, hasta yo puedo ver que esto es matar moscas a cañonazos y me da que el cansancio no me deja pensar mejor... Tiene que haber una solución mejor o quizá simplemente estoy haciendo algo mal con los códigos de página o algo, porque ese urllib.quote_plus no ha fallado hasta ahora y hay montones de menús en todos los pelis a la carta con caracteres especiales que no han fallado hasta ahora... mañana será otro día.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 27 Jul 2010, 23:33
por jurrabi
Como soy un cabezón no he podido hacer lo razonable de dejarlo y seguir mañana. No me iba a poder dormir con tanto utf-8, unicode, quote y demás corriendo por mi cabeza.
A base de prueba y error he descubierto que el quote funciona si a la cadena unicode se le hace un .encode("utf-8"). Lamentablemente este encode no es compatible con las cadenas normales pero en estas el quote ya funcionaba bien sin el encode, así que he tirado por la calle de enmedio...
Código: Seleccionar todo
try:
title = title.encode ("utf-8") #Esto sólo se realizará en las cadenas unicode. El resto quedarán sin tocar
except:
pass
Esto sólo sirve para seguir, aunque un estudio y comprensión detallada de los p***s códigos de página, de las variables string en python y demás queda pendiente...
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 28 Jul 2010, 09:46
por jesus
Yo le di vueltas al tema de los encodings, pero es complicado. Usar quote o quote_plus es indiferente, lo hice por los espacios en blanco pero si dices que da igual...
Mi idea para la localización de cadenas era usar algo más parecido a lo que hace Drupal, porque sustituir todos los literales por códigos en el plugin va a ser un verdadero infierno. En Drupal si quieres localizar una cadena, pongamos en una variable:
cadena = "Hola mundo"
Lo consigues pasando esa misma cadena como parámetro a una función
cadena = L("Hola mundo")
De forma que la función coge la cadena, el idioma en curso, y devuelve el equivalente en otro idioma.
No tengo claro si eso encajará con el mecanismo de XBMC, pero siempre me ha parecido la forma más elegante.
¿Qué opinas?
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 28 Jul 2010, 09:59
por jurrabi
Si, yo había visto ideas parecidas y como dices es la más fácil de leer en el código. Pero como dices no lo veo muy factible con la filosofía XBMC. Estoy estudiando otros scripts a ver si encuentro algo interesante... os voy diciendo
De todas formas las cadenas a sustituir son sólo las que se imprimen en pantalla, no las del log.
De momento yo ahora estoy usando algo como:
Código: Seleccionar todo
from config import getLocalizedString as getStr
print getStr(40001) #Hola mundo
Por supuesto que en instrucciones más complejas no queda tan bonito.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 28 Jul 2010, 20:04
por jurrabi
Bueno. Después de un día leyendo y estudiando de códigos de página, cadenas en python y librerías estándar estoy empezando a controlar porqué fallan las cosas... ahora hay que ver si soy capaz de arreglarlas.
Pero una cosa que me está preocupando más es que la función xbmc.getLocalizedString (code) está devolviendo cadenas vacías en la versión 9.11.
No sé si alguno tendréis experiencias antiguas que nos puedan valer, porque ahora mismo esto impediría que el mismo plugin funcionara en dharma y pre-dharma.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 29 Jul 2010, 15:35
por bandavi
La verdad es que siempre fueron un problema los caracteres unicode, especialmente los acentos y la ñ, y se le daba tratamiento indiviadual en cada canal, tal vez ya sea hora de buscar una solucion global.
La funcion xbmc.getLocalizedString, creo que soy el primero en utilizarla y fue recientemente cuando hice lo de las busquedas salvadas, antes no era muy necesario porque no eramos multi-lenguaje, y a mi no me dio ningun problema, la probé en una svn rev.28874.
Puedes comprobarlo tu mismo con esta ultima version 217 en una dharma y pre-dharma, la utilizo en el menu de contexto para borrar una busqueda salvada.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 29 Jul 2010, 16:03
por jurrabi
En que canales?
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 29 Jul 2010, 16:48
por bandavi
De momento salvar busquedas esta habilitado en el Buscador general osea buscador.py con los modulos dentro, solo los canales yonkis las utilizan, cuando eliges la opcion "buscar", una vez que tengas tu lista llena si hay alguna que no te interese puedes borrarla entrando al menu de contexto con el boton "i" creo, yo utilizo el boton derecho del raton.
Tambien se puede elegir el limite de busquedas a salvar entre "10/20/30/40/50" en configuraciones.
Re: Conversión de Pelisalacarta a Muti-lenguaje
Publicado: 31 Jul 2010, 10:04
por jurrabi
2 cositas. Una pamí y otra quizá patí
1. Estoy realmente bloqueado con este tema de los textos. No consigo que los pinte en 9.11 Miré tu código en buscador.py y no veo diferencias. Lo único que encontré era que yo no había metido los textos todavía en el fichero inglés, pero los metí y siguen saliendome los textos en blanco (al debugear veo que xbmc.getLocalizedString devuelbe una cadena unicode vacia). En tu buscador funciona bien... Si se te ocurre algo te agradecería la ayuda. Voy a subir el código a medio tocar para que lo mires si quieres. (busca la función getstr que uso para renombrar config.getLocalizedString)
2. Veo que usas el menú de ámbito para añadir funcionalidad al buscador... en un caso así yo haría 2 cosas:
2.1 Pondría una nota al entrar en la búsqueda para indicar que pulsando el botón derecho se pueden hacer cosas (la gente no lo sabrá de entrada). Quizá incluso un contador guardado en un ficherito que haga que la nota deje de salir a las 2 o 3 entradas
2.2 Hay una opción (no la recuerdo exactamente ahora pero está en el post original donde comentabamos esa función) que hace que en vez de añadir opciones al menú de ámbito las sustituye. En un caso como el buscador (donde casi todas las opciones del menú no tienen mayor sentido) quizá quedaría mejor eliminar las opciones inútiles...
Un saludo y gracias.