¿Cómo se mezclan los scripts de izquierda a derecha y de derecha a izquierda sin que tus archivos parezcan locos?

8

Diga que su idioma nativo es el hebreo, y está trabajando en un lenguaje de programación como Python 3, que le permite poner el hebreo en el código fuente. ¡Bien por usted! Tienes un dict :

d = {'a': 1}

y desea reemplazar ese a con algo de hebreo. Así que reemplaza ese único carácter:

d = {'א': 1}

Uh oh. Simplemente reemplazando un carácter, sin realizar ningún otro cambio , su pantalla se volvió loca. Todo, desde el hebreo hasta el 1 , está al revés, y no es obvio que sea una sintaxis válida ( es ), deja solo lo que significa.

El hebreo es intrínsecamente de derecha a izquierda, e incluso sin ningún carácter de control invisible, el texto hebreo se mostrará de derecha a izquierda. Esto también se aplica a ciertos caracteres "regulares" en posiciones cercanas al hebreo, así como a caracteres de algunos otros scripts. Los detalles son complicados.

¿Cómo lidias con esto? No puede pegar caracteres de control en su código fuente para arreglar la pantalla sin romper el código. Escribir todo en escapes hexadecimales intercambia un tipo de ilegibilidad por otro. Incluso si te resignas a nombrar todo con caracteres del bloque Latin básico y a pegar todas las cadenas hebreas en los archivos de localización, es difícil evitar mezclar texto de derecha a izquierda con izquierda a derecha.

JSON o CSV con hebreo en él será confuso. Si esos archivos de localización en los que metiste tus cadenas debían ser legibles por humanos, bueno, probablemente no lo sean. ¿Qué haces?

    
pregunta user2357112 09.04.2016 - 05:07

1 respuesta

1

AFAIK, esto es mayormente relevante cuando usa una letra que no es ASCII en identificadores (y quizás comentarios) en su código.

Si te disciplinas para evitar eso, por ejemplo. Si su código utiliza identificadores, palabras clave y comentarios con apariencia "en inglés", esto es mucho menos un problema (y cada desarrollador de software debería poder leer la documentación y el código en inglés). Luego, la internacionalización & la localización de su aplicación solo ocurre en mensajes , en especial cadenas literales .

Entonces podrías usar algún catálogo de mensajes. Por ejemplo, en C y POSIX, usarás gettext (3) y amigos. El catálogo de mensajes localizados contiene todas las variantes localizadas / internacionalizadas del mensaje. Si su aplicación es solo para usuarios hebreos (y eso no es un gran mercado), solo tiene hebreo en cadenas literales.

Para ser más específico, la aplicación hello world contendría

void say_hello(char*towhom) {
  printf(gettext("hello %s"), towhom);
}

y su aplicación se personalizaría al inicio de la ejecución llamando a algunos setlocale (3) con los argumentos apropiados.

Consulte locale (7) . Adapte todo esto a su Python y sistema operativo. Muchos frameworks multiplataforma (por ejemplo, Qt ) tienen un amplio soporte para la internacionalización & localización.

Por supuesto, existe el delicado problema de mostrar cadenas de Unicode. La mayoría de las bibliotecas y kits de herramientas de visualización y GUI (Qt, GTk, ...) son capaces de manejar cadenas de idiomas mixtas (por ejemplo, que muestran algo que contiene hebreo e inglés y ruso y chino).

Para una vista más amplia, lea la página wiki en internacionalización y localización del software.

Un archivo JSON es válido cuando contiene solo caracteres ASCII, con otros caracteres (que aparecerían solo en cadenas JSON) codificados con \u05d0 (en lugar de א ) en la cadena.

Tal vez puedas encontrar un editor lo suficientemente bueno y personalizarlo para tus necesidades. Estoy seguro de que podría encontrar algún submodo Emacs (o personalizarlo) para cubrir el problema particular de tener hebreo cadenas literales en Python (pero aún tienen identificadores y comentarios que parecen en inglés).

Por cierto, no sé cómo se ve un teclado hebreo, pero en la mayoría de los diseños de teclado, puede configurarlos para que escribir letras ASCII (es decir, latinas) sea más rápido que escribir letras que no son ASCII. Así que incluso para ti mismo, podría ser mejor escribir el código que busca inglés.

Con respecto a los datos JSON, debería poder configurar su editor para ver א cuando una cadena contiene \u05d0 (de lo contrario, use un convertidor JSON à la jq )

Por lo tanto, creo que su verdadero problema debería ser elegir y configurar bien un buen editor (mientras que en hebreo solo se encuentra dentro de cadenas literales; en el raro caso de que una cadena literal contenga tanto hebreo como Inglés, dividirlo en varias piezas. Supongo que tanto Emacs como Vim podría configurarse para adaptarse a sus necesidades.

    
respondido por el Basile Starynkevitch 09.04.2016 - 07:29

Lea otras preguntas en las etiquetas