¿Cómo mezclar scripts de izquierda a derecha y de derecha a izquierda sin que sus archivos se vean locos?

9

Digamos 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 quieres reemplazar eso acon algo de hebreo. Entonces reemplazas ese único personaje:

d = {'א': 1}

UH oh. Simplemente reemplazando un personaje, sin hacer ningún otro cambio , su pantalla se volvió loca. Todo, desde el hebreo hasta el, 1es al revés, y es extremadamente obvio que esto es incluso una sintaxis válida ( es ), y mucho menos 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 aparecerá 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 guiones. Los detalles son complicados.

Como tratas 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 cambia un tipo de ilegibilidad por otro. Incluso si se resigna a nombrar todo con caracteres del bloque latino básico y pegar todas las cadenas hebreas en los archivos de localización, es difícil evitar mezclar texto de derecha a izquierda con de izquierda a derecha.

JSON o CSV con hebreo estarán confusos. Si se suponía que esos archivos de localización en los que metiste tus cadenas eran legibles para los humanos, bueno, probablemente no lo sean. ¿Qué haces?

user2357112 es compatible con Monica
fuente
1
Creo que esto está relacionado con su editor de código o IDE. El orden lógico de inglés / hebreo mixto no tiene ningún problema. El problema existe solo en lo visual. Puse sus dos líneas de código en Visual Studio 2015 y se mostró bien. Eso significa que el carácter hebreo se muestra a la izquierda de 1.
Afshar Mohebbi
@afsharm: Si pones más hebreo, ¿aparece el hebreo de izquierda a derecha o de derecha a izquierda? Si es de izquierda a derecha, su hebreo se muestra al revés, y usted está en la situación en que se encontraría un nativo de inglés si Visual Studio mostrara sus cadenas como '.dlrow olleH'. Si es de derecha a izquierda, su Visual Studio está haciendo algo extraño que no es forzado de izquierda a derecha ni el algoritmo bidireccional Unicode adecuado. Cualquiera de los casos tiene sus propias fuentes de confusión.
user2357112 admite Mónica el
@afsharm: Tu perfil dice Irán, así que probablemente estés mucho más familiarizado con el texto de derecha a izquierda que yo. ¿Qué aspecto tiene cuando escribe Persa en Visual Studio? (¿O he hecho una mala suposición en alguna parte?)
user2357112 apoya a Monica el
Adivinas correctamente. Mi nativo es persa, que es un idioma RTL al igual que el árabe y el hebreo. Visual Studio 2015 no ensucia las cadenas de un solo idioma. Consulte tinypic.com/r/2em2137/9. Pero Visual Studio no es lo suficientemente inteligente como para mostrar cadenas que contengan tanto RTL como LTR simultáneamente correctamente.
Afshar Mohebbi
Otros editores pueden o no tener un mejor soporte de lenguajes RTL. Por ejemplo, Sublime no tiene un buen soporte de scripts RTL por defecto.
Afshar Mohebbi

Respuestas:

2

AFAIK, esto es principalmente relevante cuando usas letras que no son ASCII en los identificadores (y quizás comentarios) en tu código.

Si se disciplina a sí mismo para evitar eso, por ejemplo, si su código usa identificadores y palabras clave y comentarios con aspecto "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 y localización de su aplicación ocurre solo en mensajes , especialmente en cadenas literales .

Entonces podría usar algún catálogo de mensajes. Por ejemplo, en C y POSIX, usará 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 ese no es un gran mercado), tenga hebreo solo 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 comienzo de la ejecución llamando a algunos setlocale (3) con los argumentos apropiados.

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

Por supuesto, está el delicado problema de mostrar cadenas Unicode. La mayoría de las bibliotecas y kits de herramientas de visualización y GUI más serios (Qt, GTk, ...) pueden manejar cadenas de idiomas mixtos (por ejemplo, mostrar algo que contiene hebreo e inglés y ruso y chino).

Para una visión más amplia, lea el wikipage sobre internacionalización y localización de 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.

Quizás pueda encontrar un editor lo suficientemente bueno y personalizarlo según sus necesidades. Estoy seguro de que podría encontrar algunos submodos de Emacs (o personalizar uno) para cubrir el problema particular de tener cadenas literales hebreas en Python (pero aún tener identificadores y comentarios 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. Entonces, incluso para usted mismo, podría ser mejor escribir un código en inglés.

Con respecto a los datos JSON, debe poder configurar su editor para ver אcuándo contiene una cadena \u05d0(de lo contrario, use un convertidor JSON a la jq )

Por lo tanto, creo que su problema real debería ser elegir y configurar lo suficientemente bien un buen editor (aunque tenga el hebreo solo dentro de las cadenas literales; en el raro caso de que una cadena literal deba contener tanto hebreo como inglés, divídala en varias partes). Supongo que tanto Emacs como Vim podrían configurarse para satisfacer sus necesidades.

Basile Starynkevitch
fuente
Es bastante lamentable tener que incorporar un marco de localización para un programa monolingüe, y todavía tiene el problema de que los archivos de datos no sean legibles para los humanos. ¿Acepta que los formatos de datos destinados a la legibilidad humana pierden esa propiedad frente al texto bidireccional?
user2357112 es compatible con Monica el
Yo diría que sí, pero nunca codifiqué un programa monolingüe para cosas que no son ASCII. Yo no soy un hablante nativo de inglés (sino francés), pero mi código siempre es similar al inglés. Tengo que obligarme a codificar con identificadores franceses, y casi nunca hago eso (el único caso especial es cuando escribo el código solo para una persona en particular que no entiende bien el inglés; esto sucede raramente: los desarrolladores de software necesitan ser capaz de leer documentación en inglés)
Basile Starynkevitch