Làm thế nào để bạn trộn các tập lệnh từ trái sang phải và phải sang trái mà không làm cho các tập tin của bạn trông điên rồ?


9

Giả sử ngôn ngữ mẹ đẻ của bạn là tiếng Do Thái và bạn đang làm việc với ngôn ngữ lập trình như Python 3, cho phép bạn đặt tiếng Do Thái vào mã nguồn. Tốt cho bạn! Bạn đã có một dict:

d = {'a': 1}

và bạn muốn thay thế điều đó abằng một số tiếng Do Thái. Vì vậy, bạn thay thế ký tự duy nhất:

d = {'א': 1}

À ồ. Chỉ bằng cách thay thế một ký tự, mà không thực hiện bất kỳ thay đổi nào khác , màn hình của bạn trở nên điên rồ. Tất cả mọi thứ từ tiếng Do Thái đến 1lạc hậu đều lạc hậu và điều này cực kỳ không rõ ràng rằng đây thậm chí là cú pháp hợp lệ ( đúng là như vậy ), chứ đừng nói đến ý nghĩa của nó.

Tiếng Do Thái về bản chất là từ phải sang trái và thậm chí không có bất kỳ ký tự điều khiển vô hình nào, văn bản tiếng Do Thái sẽ hiển thị từ phải sang trái. Điều này cũng áp dụng cho một số ký tự "thông thường" ở các vị trí gần tiếng Do Thái, cũng như các ký tự từ một vài chữ viết khác. Các chi tiết phức tạp.

Làm thế nào để bạn đối phó với điều này? Bạn không thể dán các ký tự điều khiển vào mã nguồn của mình để sửa màn hình mà không làm hỏng mã. Viết tất cả mọi thứ trong hex thoát giao dịch một loại không thể đọc được cho người khác. Ngay cả khi bạn từ bỏ việc đặt tên mọi thứ bằng các ký tự từ khối Latin cơ bản và dán tất cả các chuỗi tiếng Do Thái vào các tệp bản địa hóa, thật khó để tránh trộn văn bản từ phải sang trái với từ trái sang phải.

JSON hoặc CSV có tiếng Do Thái trong đó sẽ bị cắt xén. Nếu những tập tin bản địa hóa mà bạn đưa chuỗi của bạn vào được cho là có thể đọc được, thì có lẽ chúng không phải. Bạn làm nghề gì?


1
Tôi nghĩ rằng điều này có liên quan đến trình soạn thảo mã hoặc IDE của bạn. Thứ tự logic của tiếng Anh hỗn hợp / tiếng Do Thái không có vấn đề. Vấn đề tồn tại chỉ trong thị giác. Tôi đặt hai dòng mã của bạn trong Visual Studio 2015 và nó chỉ hiển thị tốt. Điều đó có nghĩa là ký tự tiếng Do Thái được hiển thị ở bên trái của 1.
Afshar Mohebbi

@afsharm: Nếu bạn đặt thêm tiếng Do Thái, tiếng Do Thái có hiển thị từ trái sang phải hoặc phải sang trái không? Nếu nó từ trái sang phải, tiếng Do Thái của bạn sẽ hiển thị ngược và bạn sẽ ở trong tình huống một người bản ngữ tiếng Anh sẽ là nếu Visual Studio hiển thị các chuỗi của họ như '.dlrow olleH'. Nếu nó từ phải sang trái, Visual Studio của bạn đang làm một điều kỳ lạ không bắt buộc từ trái sang phải cũng như Thuật toán hai chiều Unicode thích hợp. Hoặc là trường hợp có nguồn gây nhầm lẫn riêng của mình.
user2357112 hỗ trợ Monica

@afsharm: Hồ sơ của bạn nói Iran, vì vậy bạn có thể quen thuộc hơn với văn bản từ phải sang trái so với tôi. Nó trông như thế nào khi bạn gõ tiếng Ba Tư trong Visual Studio? (Hoặc tôi đã đưa ra một giả định tồi ở đâu đó?)
user2357112 hỗ trợ Monica

Bạn đoán đúng. Bản địa của tôi là tiếng Ba Tư là ngôn ngữ RTL giống như tiếng Ả Rập và tiếng Do Thái. Visual Studio 2015 không làm rối các chuỗi ngôn ngữ đơn lẻ. Xem tinypic.com/r/2em2137/9 Nhưng Visual Studio không đủ thông minh để hiển thị chuỗi có chứa cả RTL và LTR một cách chính xác.
Afshar Mohebbi

Các biên tập viên khác có thể có hoặc không có sự hỗ trợ tốt hơn về ngôn ngữ RTL. Ví dụ, Sublime không hỗ trợ tốt các tập lệnh RTL theo mặc định.
Afshar Mohebbi

Câu trả lời:


2

AFAIK, điều này chủ yếu có liên quan khi bạn sử dụng chữ cái không phải ASCII trong mã định danh (và có lẽ là nhận xét) trong mã của bạn.

Nếu bạn kỷ luật bản thân để tránh điều đó, ví dụ nếu của bạn sử dụng từ định danh và từ khóa tìm kiếm "tiếng Anh", thì đây không phải là vấn đề (và mọi nhà phát triển phần mềm sẽ có thể đọc tài liệu và mã tiếng Anh). Sau đó, quốc tế hóa và bản địa hóa ứng dụng của bạn chỉ xảy ra trong các tin nhắn , đáng chú ý là các chuỗi chữ .

Sau đó bạn có thể sử dụng một số danh mục tin nhắn. Ví dụ: trong C và POSIX, bạn sẽ sử dụng gettext (3) và bạn bè. Danh mục tin nhắn được bản địa hóa chứa tất cả các biến thể được bản địa hóa / quốc tế hóa của tin nhắn. Nếu ứng dụng của bạn chỉ dành cho người dùng tiếng Do Thái (và đó không phải là một thị trường lớn) thì chỉ có tiếng Do Thái theo chuỗi.

Để cụ thể hơn, ứng dụng hello world sẽ chứa

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

và ứng dụng của bạn sẽ tự tùy chỉnh khi bắt đầu chạy bằng cách gọi một số setlocale (3) với các đối số thích hợp.

Xem miền địa phương (7) . Thích ứng tất cả điều này với Python và hệ điều hành của bạn. Nhiều khung nền tảng chéo (ví dụ Qt ) có hỗ trợ rộng rãi cho quốc tế hóa và nội địa hóa.

Tất nhiên có vấn đề tế nhị để hiển thị chuỗi Unicode. Hầu hết các thư viện và bộ công cụ GUI và hiển thị nghiêm trọng (Qt, GTk, ...) đều có thể xử lý các chuỗi ngôn ngữ hỗn hợp (ví dụ: hiển thị nội dung có chứa tiếng Do Thái, tiếng Anh và tiếng Nga và tiếng Trung Quốc).

Để có cái nhìn rộng hơn, hãy đọc wikipage về quốc tế hóa và bản địa hóa phần mềm.

Tệp JSON hợp lệ khi chỉ chứa các ký tự ASCII, với các ký tự khác (chỉ xuất hiện trong chuỗi JSON) được mã hóa bằng \u05d0(thay vì א) trong chuỗi.

Có lẽ bạn có thể tìm thấy một trình soạn thảo đủ tốt và tùy chỉnh nó cho nhu cầu của bạn. Tôi chắc chắn rằng bạn có thể tìm thấy một số mã con Emacs (hoặc tùy chỉnh khác) để giải quyết vấn đề cụ thể về việc có các chuỗi ký tự tiếng Do Thái trong Python (nhưng vẫn có các nhận dạng và nhận xét bằng tiếng Anh).

BTW, tôi không biết bàn phím tiếng Do Thái trông như thế nào, nhưng trong hầu hết các bố cục bàn phím, bạn có thể định cấu hình chúng để việc nhập các chữ cái ASCII (tức là tiếng Latin) nhanh hơn so với cách gõ không phải ASCII. Vì vậy, ngay cả đối với bản thân bạn, có thể tốt hơn để nhập mã tìm kiếm tiếng Anh.

Về dữ liệu JSON, bạn sẽ có thể định cấu hình trình soạn thảo của mình để xem אkhi nào một chuỗi chứa \u05d0(nếu không sử dụng trình chuyển đổi JSON à la jq )

Vì vậy, tôi tin rằng vấn đề thực sự của bạn nên lựa chọn và cấu hình cũng đủ một trình soạn thảo tốt (trong khi có Hebrew chỉ chuỗi bên đen;. Trong trường hợp hiếm hoi mà một chữ nhu cầu chuỗi để chứa cả tiếng Hebrew và tiếng Anh, chia nó thành nhiều mảnh). Tôi đoán rằng cả EmacsVim đều có thể được cấu hình để phù hợp với nhu cầu của bạn.


Thật là khập khiễng khi phải mang một khuôn khổ bản địa hóa cho một chương trình đơn ngữ và bạn vẫn gặp phải vấn đề về các tệp dữ liệu không thể đọc được. Bạn có chấp nhận rằng các định dạng dữ liệu dành cho khả năng đọc của con người sẽ làm mất tài sản đó khi đối mặt với văn bản hai chiều không?
user2357112 hỗ trợ Monica

Tôi sẽ nói rằng có, nhưng tôi chưa bao giờ mã hóa một chương trình đơn ngữ cho những thứ không phải ASCII. Bản thân tôi không phải là người nói tiếng Anh bản địa (mà là người Pháp), nhưng mã của tôi luôn giống tiếng Anh. Tôi phải ép mình viết mã bằng các định danh tiếng Pháp và tôi gần như không bao giờ làm điều đó (trường hợp đặc biệt duy nhất là khi tôi chỉ viết mã cho một người cụ thể không hiểu tiếng Anh; điều này hiếm khi xảy ra: các nhà phát triển phần mềm cần phải có thể đọc tài liệu tiếng Anh)
Basile Starynkevitch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.