Điểm:2

Dịch một trang web đa ngôn ngữ sang tiếng Anh

lá cờ sa

Lưu ý: Câu hỏi này chỉ tập trung vào các chuỗi bên trong tệp nguồn (tệp PHP).

Khi bạn đang tạo một trang web Drupal ở một quốc gia không phải là tiếng Anh (chẳng hạn như Pháp), bạn sẽ tạo tất cả các tệp PHP của mình bằng các chuỗi tiếng Pháp bên trong.

Sau đó, bạn có thể dịch trang web này, giả sử bằng tiếng Hà Lan. Bạn sẽ trích xuất các tệp PO, gửi chúng thành bản dịch và nhập lại chúng.

Cho đến thời điểm này, mọi thứ đều ổn.

Bây giờ, khách hàng của bạn muốn trang web cũng được dịch sang tiếng Anh.

Như bạn có thể biết, tất cả các tệp nguồn (có chuỗi tiếng Pháp) trên thực tế được hệ thống coi là bằng tiếng Anh.

Điều này có nghĩa là để xử lý thực tế này, tôi phải:

  1. Giải nén các tệp PO để dịch sang tiếng Pháp

  2. Chuyển đổi tất cả các tệp nguồn có chuỗi tiếng Pháp thành cùng một tệp nguồn nhưng có chuỗi tiếng Anh (sử dụng bản dịch được tạo ở bước 1)

  3. Hoàn nguyên ngôn ngữ của tệp PO được tạo ở bước 1 (ngôn ngữ nguồn trở thành ngôn ngữ đích và ngược lại)

  4. Nhập tệp hoàn nguyên được tạo ở bước 3 vào trang web

Nếu bạn nghĩ rằng tôi hoàn toàn sai với quy trình này, vui lòng giải thích cho tôi lý do tại sao. Bước phức tạp nhất là bước 2: Bạn có biết một quy trình trơn tru hoặc một công cụ tốt để xử lý nó không?

Tôi cho rằng tôi sẽ tìm thấy thứ gì đó cho bước 3, nhưng mọi ý tưởng đều được hoan nghênh.

Sohail avatar
lá cờ ru
Cách tốt nhất là luôn coi các chuỗi trong mã của bạn là tiếng Anh ngay từ bước đầu tiên và sau đó dịch chúng sang ngôn ngữ chính của bạn, chẳng hạn như tiếng Pháp nhưng vâng, nếu tôi là bạn, tôi sẽ đổi chuỗi của mình thành "tiếng Anh" và tiếp tục từ đó
apaderno avatar
lá cờ us
Hệ thống dịch Drupal hoạt động khi chuỗi nguồn bằng tiếng Anh.Nếu tôi gọi `t()` là `t('Sì, questa è una frase in italiano.")` thì chuỗi sẽ không được dịch vì không có chuỗi nguồn nào chứa các cụm từ không phải bằng tiếng Anh.
Baud avatar
lá cờ sa
@Sohail: khách hàng không muốn trả tiền cho bản dịch sang tiếng Anh nếu họ không cần... Nhưng bạn nói đúng... cách tốt nhất! Bất kỳ ý tưởng nào về quy trình hoán đổi chuỗi trong tệp php?
Baud avatar
lá cờ sa
@apaderno: Nó hoạt động tốt cho đến khi bạn thêm tiếng Anh làm ngôn ngữ bổ sung của trang web. Cho đến thời điểm này, bạn có thể làm t("une cụm từ en français") nó sẽ hoạt động tốt
apaderno avatar
lá cờ us
Có, nhưng bởi vì nó trả về cùng một chuỗi mà bạn đã chuyển đến `t()`, khi không tìm thấy bản dịch. Rõ ràng, nó không tìm thấy bản dịch cho `'une cụm từ tiếng français'` vì *une cụm từ tiếng français* không phải là một câu tiếng Anh. Đó không phải là dịch.
apaderno avatar
lá cờ us
`t()` luôn luôn dịch từ tiếng Anh sang ngôn ngữ được đặt làm mặc định từ trang web, ngôn ngữ mà người dùng đặt làm ngôn ngữ của họ hoặc ngôn ngữ được đặt cho một nút. Ví dụ, nó không dịch từ tiếng Ý sang tiếng Hà Lan hoặc tiếng Pháp sang tiếng Anh. Điều đó được ghi lại trong [`t()`](https://api.drupal.org/api/drupal/core%21includes%21bootstrap.inc/function/t/8.9.x). ***string $string**: Chuỗi chứa văn bản tiếng Anh cần dịch.*
Baud avatar
lá cờ sa
@apaderno bạn đúng, nhưng bạn có thể hiểu rằng khách hàng không muốn trả tiền để dịch một trang web tiếng Pháp sang tiếng Anh chỉ để có tệp nguồn bằng tiếng Anh (giả sử anh ta không cần trang web bằng tiếng Anh) Nếu bạn đồng ý điều này, bạn có thể hiểu tôi đang ở đâu.
apaderno avatar
lá cờ us
Bạn không cần dịch một trang web từ tiếng Pháp sang tiếng Anh: Tất cả các mô-đun đều sử dụng các chuỗi bằng tiếng Anh, vì vậy trang web đã được "dịch" sang tiếng Anh. Nếu ai đó chuyển đến `t()` một chuỗi bằng tiếng Pháp, thì đó là "lỗi" của người đó.
Baud avatar
lá cờ sa
@apaderno: không, tôi cần dịch nó vì tôi có một số mô-đun tùy chỉnh với hàng nghìn chuỗi tiếng Pháp trong đó...
apaderno avatar
lá cờ us
Chỉnh sửa các chuỗi mà các mô-đun đó chuyển đến `t()` để chứa các cụm từ tiếng Anh và trang web sẽ xuất hiện bằng tiếng Anh khi tiếng Anh được đặt làm ngôn ngữ mặc định.
Điểm:1
lá cờ de

Thực sự tốt nhất là để các chuỗi trong mã của bạn được viết bằng tiếng Anh (tôi sẽ không thảo luận về điểm đó).

Tuy nhiên, tôi đã từng gặp sự cố tương tự với một trang web (Drupal 7) do một đồng nghiệp của tôi phát triển. Ban đầu, khách hàng muốn có trang web bằng NL và FR và chỉ nhiều năm sau đó đã quyết định thêm phiên bản EN.

Sự cố: Các chuỗi trong mã là sự kết hợp giữa NL và FR...

Giải pháp thay thế mà tôi tìm thấy là kích hoạt ngôn ngữ "tiếng Anh, tiếng Anh" (và hủy kích hoạt ngôn ngữ chính "tiếng Anh" vì ngôn ngữ mặc định là NL).Bằng cách đó, tất cả các chuỗi của bạn có thể được dịch sang en-gb từ bản dịch giao diện hoặc từ việc nhập tệp .po.

Trong Drupal 8/9, điều đó thậm chí còn dễ dàng hơn vì có một hộp có nhãn "Bật dịch giao diện sang tiếng Anh" trên trang quản trị viên/cấu hình/khu vực/ngôn ngữ/chỉnh sửa/vi.

Baud avatar
lá cờ sa
Hiện tại, đây là cách tốt nhất để trả lời câu hỏi của tôi... Tôi rất hài lòng về tính năng Drupal 8/9 mới (thật không may, đây là trang web D7). Tôi nghĩ rằng tôi sẽ không sử dụng thủ thuật này vì tôi có nhiều nội dung khác đã được dịch sang tiếng Anh (Node, v.v.) Tôi ngại chuyển đổi tất cả nội dung này sang EN-GB... Nhưng, cảm ơn bạn, đây là một mẹo hay. (Tôi thưởng cho bạn)
Điểm:1
lá cờ ru

Như đã đề cập trong các nhận xét, Luôn bắt đầu với chuỗi tiếng Anh và dịch nó ngay cả khi đó là trang web chỉ có một ngôn ngữ, để giảm bớt khó khăn, đây là điều tôi luôn làm để giữ các chuỗi và bản dịch có trong chính chủ đề đó:

mở của bạn THEMENAME.info.yml tập tin và thêm vào như sau:

'dự án dịch giao diện': THEMENAME
'mẫu máy chủ dịch giao diện': 'themes/custom/THEMENAME/translations/%language.po'

sau đó tạo một bản dịch thư mục trong chủ đề của bạn và ở đó bạn có thể thêm bản dịch của mình .po tập tin, ví dụ. fr.po cho tiếng pháp hoặc nb.po cho Na Uy

Đây là cú pháp bạn cần có trong .po tập tin:

msgstr "Xin chào thế giới"
msgstr "Xin chúc cả thế giới"

Vì vậy, bất cứ khi nào bạn viết Chào thế giới chuỗi trong một t() chức năng hoặc dưới dạng bộ lọc trong tệp twig như vậy: {{Xin chào thế giới|t }} nó sẽ biết nhập các bản dịch từ đó

Nhưng làm cách nào để kích hoạt nhập bản dịch?

ngôn ngữ drush: kiểm tra - không cần thiết, nhưng hãy kiểm tra xem có chuỗi mới nào được thêm vào không

ngôn ngữ drush: cập nhật - Nhập bản dịch và bạn đã hoàn tất

Lưu ý rằng bạn cũng có thể thêm/chạy điều này vào quy trình triển khai của mình và giúp cuộc sống của bạn dễ dàng hơn, không cần dịch giao diện người dùng, chỉ cần thêm chuỗi của bạn vào .po tệp bất cứ khi nào bạn viết chuỗi mã hóa cứng vào tệp của mình

Cập nhật: Thậm chí không nhận thấy rằng chúng ta đang nói về Drupal 7, điều này đề cập đến Drupal 8 dành cho những người đọc trong tương lai

Baud avatar
lá cờ sa
Tôi đã thưởng cho câu trả lời của bạn ngay cả khi nó không trả lời câu hỏi của tôi vì tôi đã học được nhiều điều từ nó
Sohail avatar
lá cờ ru
Cảm ơn, thậm chí không nhận thấy chúng ta đang nói về Drupal 7, điều này đề cập đến Drupal 8

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.