Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Cortar string para Multilenguaje

Estas en el tema de Cortar string para Multilenguaje en el foro de Python en Foros del Web. Hola, Ya tenía hecho esto en PHP pero en Django ando un poco perdido. Lo que quiero es simple, yo tengo un string: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 09/05/2013, 19:16
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Cortar string para Multilenguaje

Hola,

Ya tenía hecho esto en PHP pero en Django ando un poco perdido.

Lo que quiero es simple, yo tengo un string:

Código Python:
Ver original
  1. string = '[es]Texto en español[/es][en]Texto en inglés[/en]'

Con ese string quiero sacar lo de dentro de los corchetes, para así comprobar en que idioma está la web ahora mismo y mostrar un contenido u otro.

Código Python:
Ver original
  1. es = 'Texto en español'
  2. en = 'Texto en inglés'

Espero que me podías guiar.
Gracias!
__________________
@JaimeMSE - ¡Sígueme!
  #2 (permalink)  
Antiguo 09/05/2013, 19:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cortar string para Multilenguaje

En la documentación hay una entrada sobre traducción de mensajes a varios idiomas.

https://docs.djangoproject.com/en/de...n/translation/
  #3 (permalink)  
Antiguo 10/05/2013, 05:31
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cortar string para Multilenguaje

Hola,

Ya sé que existe eso, y es más, lo estoy usando. Pero con eso no puedo traducir las cosas que están en la base de datos que introducen los usuarios, por ello quiero recorrer un string y cortarlo si está dividido entre [es][/es] etc.
__________________
@JaimeMSE - ¡Sígueme!
  #4 (permalink)  
Antiguo 10/05/2013, 09:23
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cortar string para Multilenguaje

Lo más sencillo es que nos muestres cómo lo hacías en PHP :)
Si lo hacías con expresiones regulares, lee sobre el módulo "re". Si era con búsqueda en cadenas, lee sobre los métodos index() y find()


Saludos.
  #5 (permalink)  
Antiguo 10/05/2013, 09:38
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cortar string para Multilenguaje

Así lo tengo hecho en PHP:

Código PHP:
Ver original
  1. function obtenerIdiomaTexto($texto)
  2. {
  3.     $idiomaActual = 'de';
  4.     if(!empty($texto))
  5.     {
  6.         if(strstr($texto, '[es]') AND strstr($texto, '[/es]') AND $idiomaActual == 'es')
  7.         {
  8.             $idiomaTexto = explode('[/es]', $texto);
  9.             $idiomaTextoBien = explode('[es]', $idiomaTexto[0]);
  10.             return $idiomaTextoBien[1];
  11.         }
  12.         elseif(stristr($texto, '[en]') AND stristr($texto, '[/en]') AND $idiomaActual == 'en')
  13.         {
  14.             $idiomaTexto = explode('[/en]', $texto);
  15.             $idiomaTextoBien = explode('[en]', $idiomaTexto[0]);
  16.             return $idiomaTextoBien[1];
  17.         }
  18.  
  19.         elseif(stristr($texto, '[de]') AND stristr($texto, '[/de]') AND $idiomaActual == 'de')
  20.         {
  21.             $idiomaTexto = explode('[/de]', $texto);
  22.             $idiomaTextoBien = explode('[de]', $idiomaTexto[0]);
  23.             return $idiomaTextoBien[1];
  24.         }
  25.     }
  26.     else
  27.     {
  28.         return FALSE;
  29.     }
  30. }
  31.  
  32.  
  33. $texto = obtenerIdiomaTexto('[es]Texto en español[/es][en]Texto en inglés[/en][de]Texto en alemán[/de]');
  34. echo $texto;
__________________
@JaimeMSE - ¡Sígueme!
  #6 (permalink)  
Antiguo 10/05/2013, 09:57
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cortar string para Multilenguaje

Si eso esta en la db entonces estas rompiendo una de las reglas de normalización de base de datos.

Lo que debes es tener un modelo de lenguaje, tu modelo donde tengas todos los campos que no necesitan traducción, como fechas, nombres propios, etc... y un modelo apuntando a un lenguaje.

Ejemplo:
Código Python:
Ver original
  1. class Language(models.Model):
  2.     locale = models.CharField(max_length=25, unique=True)
  3.  
  4. class MyModel(models.Model):
  5.     # Fields that doesn't require translation
  6.     first_name = models.CharField(max_length=150)
  7.     last_name = models.CharField(max_length=200)
  8.     publish_datetime = models.DateTimeField(default=datetime.datetime.now)
  9.  
  10. class MyModelTranslation(models.Model):
  11.     # Fields that require translation
  12.     my_model = models.ForeignKey(MyModel)
  13.     language = models.ForeignKey(Language)
  14.     title = models.CharField(max_length=150)
  15.     content = models.TextField(blank=True)
  16.  
  17.     class Meta:
  18.         unique_together = ('my_model', 'language')

Esa es mi recomendación para hacerlo de manera correcta.
  #7 (permalink)  
Antiguo 10/05/2013, 10:01
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cortar string para Multilenguaje

Cita:
Iniciado por razpeitia Ver Mensaje
Si eso esta en la db entonces estas rompiendo una de las reglas de normalización de base de datos.

Lo que debes es tener un modelo de lenguaje, tu modelo donde tengas todos los campos que no necesitan traducción, como fechas, nombres propios, etc... y un modelo apuntando a un lenguaje.

Ejemplo:
Código Python:
Ver original
  1. class Language(models.Model):
  2.     locale = models.CharField(max_length=25, unique=True)
  3.  
  4. class MyModel(models.Model):
  5.     # Fields that doesn't require translation
  6.     first_name = models.CharField(max_length=150)
  7.     last_name = models.CharField(max_length=200)
  8.     publish_datetime = models.DateTimeField(default=datetime.datetime.now)
  9.  
  10. class MyModelTranslation(models.Model):
  11.     # Fields that require translation
  12.     my_model = models.ForeignKey(MyModel)
  13.     language = models.ForeignKey(Language)
  14.     title = models.CharField(max_length=150)
  15.     content = models.TextField(blank=True)
  16.  
  17.     class Meta:
  18.         unique_together = ('my_model', 'language')

Esa es mi recomendación para hacerlo de manera correcta.
Hola,

Gracias por la respuesta.
Eso que dices no me vale, ya que son varias web con el mismo código y misma db (diferenciados de una manera) y si hay 5 idiomas, hacer eso y que los usuarios añadan el texto de esa manera sería algo engorroso.

Por eso quiero facilitar las cosas y hacerlo como tengo pensado.
__________________
@JaimeMSE - ¡Sígueme!
  #8 (permalink)  
Antiguo 10/05/2013, 10:06
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cortar string para Multilenguaje

Veo que no importa el lenguaje puede ser PHP, Ruby, Python definitivamente no importa.

Lo que importa es hacer las cosas de la manera mas correcta posible.

Ojo esta solución no lo es:
Código Python:
Ver original
  1. def get_translation(text, target_language):
  2.     pattern = re.compile(r'\[(\w+)\](.*?)\[\/\w+\]')
  3.     for language, translated_text in pattern.findall(text):
  4.         if language.upper() == target_language.upper():
  5.             return translated_text
  #9 (permalink)  
Antiguo 10/05/2013, 10:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cortar string para Multilenguaje

Cita:
Iniciado por JaimeMSE Ver Mensaje
Hola,

Gracias por la respuesta.
Eso que dices no me vale, ya que son varias web con el mismo código y misma db (diferenciados de una manera) y si hay 5 idiomas, hacer eso y que los usuarios añadan el texto de esa manera sería algo engorroso.

Por eso quiero facilitar las cosas y hacerlo como tengo pensado.
A nivel de usuario lo que importa mas es la usabilidad y casi todo eso va en el front-end. Para el usuario es transparente (o debería de ser) que método uses para almacenar datos. Si nos vamos al punto de vista del usuario prefería elegir un idioma en el comboBox o radio button group y que me aparezca el text area para escribirlo en ese idioma que tener un texto gigante separado por tags que el mismo usuario puede romper fácilmente (incluso por accidente).

Creo que es mas trabajo para el programador pero no mas difícil hacer este tipo de modelos (Con translation). Principalmente por que muchos programadores no le dedican nada tiempo a diseño y análisis del proyecto. O por que simplemente desconocen muchas cosas y van experimentando en el camino.
  #10 (permalink)  
Antiguo 10/05/2013, 12:32
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cortar string para Multilenguaje

Cita:
Iniciado por razpeitia Ver Mensaje
A nivel de usuario lo que importa mas es la usabilidad y casi todo eso va en el front-end. Para el usuario es transparente (o debería de ser) que método uses para almacenar datos. Si nos vamos al punto de vista del usuario prefería elegir un idioma en el comboBox o radio button group y que me aparezca el text area para escribirlo en ese idioma que tener un texto gigante separado por tags que el mismo usuario puede romper fácilmente (incluso por accidente).

Creo que es mas trabajo para el programador pero no mas difícil hacer este tipo de modelos (Con translation). Principalmente por que muchos programadores no le dedican nada tiempo a diseño y análisis del proyecto. O por que simplemente desconocen muchas cosas y van experimentando en el camino.
Llevas razón en lo que dices.

Me pensaré la primera manera que me dijistes.
Gracias por estar siempre atento!
__________________
@JaimeMSE - ¡Sígueme!

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:35.