Bagaimana Anda mencampur skrip kiri-ke-kanan dan kanan-ke-kiri tanpa file Anda terlihat gila?

9

Katakanlah bahasa asli Anda adalah bahasa Ibrani, dan Anda bekerja dalam bahasa pemrograman seperti Python 3, yang memungkinkan Anda memasukkan bahasa Ibrani ke dalam kode sumber. Bagus untukmu! Anda punya dict:

d = {'a': 1}

dan Anda ingin menggantinya adengan beberapa bahasa Ibrani. Jadi Anda mengganti karakter tunggal itu:

d = {'א': 1}

Uh oh. Hanya dengan mengganti satu karakter, tanpa membuat perubahan lain , tampilan Anda menjadi gila. Segala sesuatu mulai dari bahasa Ibrani sampai yang 1terbelakang, dan sangat tidak jelas bahwa ini bahkan sintaksis yang valid ( itu adalah ), apalagi apa artinya.

Bahasa Ibrani secara intrinsik kanan-ke-kiri, dan bahkan tanpa karakter kontrol yang tidak terlihat, teks Ibrani akan muncul dari kanan ke kiri. Ini juga berlaku untuk karakter "reguler" tertentu di posisi dekat Ibrani, serta karakter dari beberapa skrip lainnya. Detailnya rumit.

Bagaimana Anda menangani ini? Anda tidak dapat menempel karakter kontrol ke kode sumber Anda untuk memperbaiki tampilan tanpa melanggar kode. Menulis semua yang ada di hex berhasil menukar satu jenis ketidakbacaan dengan yang lain. Bahkan jika Anda mengundurkan diri untuk menamai semuanya dengan karakter dari blok Latin Dasar dan menempelkan semua string Ibrani dalam file pelokalan, sulit untuk menghindari pencampuran teks kanan-ke-kiri dengan kiri-ke-kanan.

JSON atau CSV dengan bahasa Ibrani di dalamnya akan kacau. Jika file pelokalan tempat Anda memasukkan string Anda seharusnya dapat dibaca oleh manusia, ya, mungkin tidak. Apa yang kamu kerjakan?

user2357112 mendukung Monica
sumber
1
Saya pikir ini terkait dengan editor kode atau IDE Anda. Urutan logis campuran Bahasa Inggris / Ibrani tidak memiliki masalah. Masalahnya ada hanya secara visual. Saya menempatkan dua baris kode Anda di Visual Studio 2015 dan itu hanya ditampilkan dengan baik. Itu berarti karakter Ibrani ditampilkan di sebelah kiri 1.
Afshar Mohebbi
@afsharm: Jika Anda memasukkan lebih banyak bahasa Ibrani, apakah bahasa Ibrani muncul dari kiri ke kanan atau kanan-ke-kiri? Jika dari kiri ke kanan, bahasa Ibrani Anda muncul ke belakang, dan Anda berada dalam situasi yang sama dengan penduduk asli Inggris jika Visual Studio menampilkan string mereka sebagai '.dlrow olleH'. Jika kanan-ke-kiri, Visual Studio Anda melakukan sesuatu yang aneh yang tidak dipaksa dari kiri ke kanan atau Algoritma Bidirectional Unicode yang tepat. Kasus mana pun memiliki sumber kebingungannya sendiri.
user2357112 mendukung Monica
@afsharm: Profil Anda mengatakan Iran, jadi Anda mungkin lebih terbiasa dengan teks kanan-ke-kiri daripada saya. Seperti apa saat Anda mengetik Persia di Visual Studio? (Atau apakah saya membuat asumsi yang buruk di suatu tempat?)
user2357112 mendukung Monica
Anda menebak dengan benar. Asli saya adalah Persia yang merupakan bahasa RTL seperti bahasa Arab dan Ibrani. Visual Studio 2015 tidak mengacaukan string bahasa tunggal. Lihat tinypic.com/r/2em2137/9 Tapi Visual Studio tidak cukup pintar untuk menampilkan string yang berisi RTL dan LTR secara bersamaan dengan benar.
Afshar Mohebbi
Editor lain mungkin atau mungkin tidak memiliki dukungan bahasa RTL yang lebih baik. Misalnya Sublime tidak memiliki dukungan skrip RTL yang baik secara default.
Afshar Mohebbi

Jawaban:

2

AFAIK, ini sebagian besar relevan ketika Anda menggunakan huruf non-ASCII dalam pengidentifikasi (dan mungkin komentar) dalam kode Anda.

Jika Anda mendisiplinkan diri untuk menghindari hal itu, misalnya jika kode Anda menggunakan pengidentifikasi dan kata kunci yang mencari "Bahasa Inggris" dan komentar, ini bukan masalah (dan setiap pengembang perangkat lunak harus dapat membaca dokumentasi dan kode Bahasa Inggris). Kemudian, internasionalisasi & lokalisasi aplikasi Anda hanya terjadi di pesan , terutama string literal .

Anda kemudian dapat menggunakan beberapa katalog pesan. Misalnya dalam C dan POSIX, Anda akan menggunakan gettext (3) dan teman-teman. Katalog pesan terlokalisasi berisi semua varian pesan terlokalisasi / internasional. Jika aplikasi Anda hanya untuk pengguna Ibrani (dan itu bukan pasar besar) miliki bahasa Ibrani hanya dalam string literal.

Untuk lebih spesifik, aplikasi hello world akan berisi

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

dan aplikasi Anda akan menyesuaikan sendiri saat mulai dijalankan dengan memanggil beberapa setlocale (3) dengan argumen yang sesuai.

Lihat lokal (7) . Sesuaikan semua ini dengan Python dan sistem operasi Anda. Banyak kerangka kerja lintas-platform (misalnya Qt ) memiliki dukungan luas untuk internasionalisasi & lokalisasi.

Tentu saja ada masalah rumit untuk menampilkan string Unicode. Tampilan dan pustaka GUI yang paling serius dan toolkit (Qt, GTk, ...) dapat menangani string bahasa campuran (misalnya menampilkan sesuatu yang mengandung bahasa Ibrani dan Inggris dan Rusia dan Cina).

Untuk tampilan yang lebih luas, baca wikipage tentang internasionalisasi dan lokalisasi perangkat lunak.

File JSON valid ketika hanya berisi karakter ASCII, dengan karakter lain (yang hanya akan muncul dalam string JSON) yang dikodekan dengan \u05d0(bukan א) dalam string.

Mungkin Anda bisa menemukan editor yang cukup bagus dan menyesuaikannya untuk kebutuhan Anda. Saya yakin Anda dapat menemukan beberapa submode Emacs (atau menyesuaikan satu) untuk membahas masalah tertentu yaitu memiliki string literal bahasa Ibrani dengan Python (tetapi masih memiliki pengidentifikasi dan komentar yang terlihat dalam bahasa Inggris).

BTW, saya tidak tahu bagaimana keyboard Ibrani terlihat, tetapi di sebagian besar layout keyboard, Anda dapat mengonfigurasinya sehingga mengetik huruf ASCII (yaitu yang Latin) lebih cepat daripada mengetik yang bukan ASCII. Jadi, bahkan untuk Anda sendiri, bisa lebih baik untuk mengetik kode yang terlihat dalam bahasa Inggris.

Mengenai data JSON, Anda harus dapat mengkonfigurasi editor Anda untuk melihat אkapan sebuah string berisi \u05d0(jika tidak gunakan konverter JSON à la jq )

Jadi saya percaya masalah Anda yang sebenarnya adalah memilih dan mengonfigurasikan editor yang cukup baik (walaupun memiliki bahasa Ibrani hanya di dalam string literal; dalam kasus yang jarang terjadi di mana string literal perlu mengandung bahasa Ibrani dan Inggris, pisahkan menjadi beberapa bagian.). Saya kira Emacs dan Vim dapat dikonfigurasi agar sesuai dengan kebutuhan Anda.

Basile Starynkevitch
sumber
Cukup payah karena harus memasukkan kerangka kerja pelokalan untuk program monolingual, dan Anda masih memiliki masalah file data yang tidak dapat dibaca manusia. Apakah Anda hanya menerima bahwa format data yang dimaksudkan untuk keterbacaan manusia kehilangan properti itu di hadapan teks dua arah?
user2357112 mendukung Monica
Saya akan mengatakan itu ya, tetapi saya tidak pernah membuat kode program monolingual untuk hal-hal non ASCII. Saya sendiri bukan penutur bahasa Inggris asli (tapi yang Prancis), tetapi kode saya selalu seperti bahasa Inggris. Saya harus memaksakan diri untuk berkode dengan pengenal Prancis, dan saya hampir tidak pernah melakukan itu (satu-satunya kasus khusus adalah ketika saya menulis kode hanya untuk satu orang tertentu yang tidak mengerti bahasa Inggris dengan baik; ini jarang terjadi: pengembang perangkat lunak harus dapat membaca dokumentasi bahasa Inggris)
Basile Starynkevitch