2011-12-09 13 views
7

Tôi đã nghiên cứu về xliffpo i18n file định dạng và có vẻ như chúng được sử dụng rộng rãi và được hỗ trợ. Có rất nhiều công cụ miễn phí để quản lý bản dịch trong các tệp xliff/po.Làm thế nào để sử dụng xliff hoặc po l10n các định dạng tập tin trong .net (C#/ASP.Net) phát triển

Tuy nhiên, cho đến nay tôi không thể tìm thấy giải pháp tốt về cách sử dụng tệp xliff hoặc po trong các dự án .net (C#/ASP.Net). Tôi sẽ mong đợi một số loại chuyển đổi xliff/po => resx, nhưng cho đến nay vẫn chưa tìm thấy một.

Tuy nhiên cùng một lúc, nhiều công cụ hỗ trợ chuyển đổi các tệp xliff/po sang định dạng java .properties.

Nếu bạn có kinh nghiệm triển khai l10n qua tệp xliff hoặc po trong dự án .Net - vui lòng cung cấp lời khuyên và chia sẻ các phương pháp hay nhất về cách hoạt động của nó.

PS: Tôi thích sử dụng định dạng xliff hơn, vì tôi thấy nó sạch hơn và nhiều tính năng hơn, nhưng po cũng là một tùy chọn.

+0

Bất kỳ lý do nào bạn không thể sử dụng tệp tài nguyên trực tiếp? – Oded

+2

Chúng tôi muốn sử dụng một định dạng duy nhất cho các bản dịch giữa các dự án khác nhau mà công ty chúng tôi xây dựng - đó là các dự án C# và Java và chia sẻ chúng để giảm thiểu trùng lặp và chi phí bổ sung cho các bản dịch riêng biệt cho các dự án khác nhau. – Paul

Trả lời

6

PO và các file XLIFF thường làm việc khác nhau: các file

  • PO là các tập tin tài nguyên mà có được tuân thủ sang một định dạng nhị phân và sau đó truy cập sử dụng gettext() thư viện. Đôi khi PO được sử dụng như một định dạng trích xuất như XLIFF, nhưng đó không phải là mục đích ban đầu của nó.

  • XLIFF là tệp trích xuất được tạo bằng cách trích xuất tệp tài nguyên của bạn (ví dụ: resx) thành XLIFF và sau đó được hợp nhất lại thành định dạng ban đầu.

vì vậy đối với XLIFF bạn nên tìm kiếm công cụ làm resx -> xliff -> resx thay vì xlif -> resx.

Các công cụ trích xuất/hợp nhất các tệp XLIFF thường được gọi là bộ lọc. Có khá nhiều công cụ dịch thuật thương mại sẽ chấp nhận XLIFF và một số công cụ cũng có thể tạo XLIFF (Swordfish, Trados Studio, v.v.).

Ngoài ra còn có một vài công cụ mã nguồn mở có thể trích xuất/hợp nhất XLIFF: File2XLIFF4j chẳng hạn (nhưng tôi không nghĩ rằng nó hỗ trợ resx).

Cầu vồng, từ dự án Okapi, không hỗ trợ resx. Phiên bản "cũ" .net (Rainbow 5: Okapi trên SourceForge) có một bộ lọc dành riêng cho tệp resx và có thể xử lý chúng rất tốt; ngay cả với dữ liệu nhị phân. Nó có thể gặp sự cố với các điều khiển của bên thứ ba mặc dù (Xem http://okapi.sourceforge.net/Release/Filters/Help/netres.htm để biết chi tiết).

Phiên bản java mới (Rainbow 6: http://code.google.com/p/okapi/) hỗ trợ resx thông qua bộ lọc XML của nó và hoạt động tốt với resx đơn giản, nhưng nếu bạn có dữ liệu nhị phân trong đó văn bản trong các mục đó sẽ không được trích xuất.

-ys

+0

Câu trả lời hay! Cảm ơn vì đã làm rõ điều đó với tôi. Tôi sẽ đào sâu hơn để tìm ra cách tiếp cận tốt nhất để giảm thiểu nỗ lực trên l10n cho sự kết hợp của các dự án .net và java. – Paul

4

Tôi đã sử dụng PO để quản lý dự án .Net sau.các tệp resx bắt đầu bị mất. Tôi đã sử dụng nó "dưới dạng định dạng trích xuất như XLIFF" (xem Yves comment). Các tệp .resx hiện có của chúng tôi đã được xuất/hợp nhất một lần thành một tệp .po trên mỗi ngôn ngữ, sau đó trở thành tệp ngôn ngữ có thẩm quyền của chúng tôi, từ đó tất cả các tệp resx sẽ được tạo tự động.

Các dự án tôi không phải là ASP nên tôi không biết về gói được đề cập bởi mcw0933, nhưng việc thực hiện Mono của resgen.exe có một số khả năng chuyển đổi đơn giản là < => resx. Tuy nhiên, để bảo toàn các nhận xét hiện có và tự động thêm văn bản gốc làm nhận xét bổ sung, tôi đã mở rộng công cụ chuyển đổi của mono thành điểm mà tôi sử dụng về cơ bản được viết lại.

I put the extended .po <=> .resx converter on github.

Để chọn .po để quản lý bản dịch của dự án C#, .po rất đơn giản và thân thiện nhưng có một số bất tiện khi sử dụng nó theo cách hơi khác so với việc sử dụng ban đầu trong gettext, và tôi không có kinh nghiệm để nói cho dù đó là một lựa chọn tốt hơn xliff, nhưng có thể quản lý các bản dịch và tự động hóa các tác vụ tốt hơn nhiều so với xử lý các tệp resx, như chúng ta đã từng làm trong quá khứ.

bất tiện nhỏ từ việc sử dụng PO một chút khác nhau để ý định của mình:

  • Bởi vì gettext sử dụng msgstr tăng gấp đôi như lĩnh vực để lưu trữ các chuỗi chưa dịch ban đầu vào, tôi bị buộc phải resgenEx lưu trữ các chuỗi dịch ban đầu vào một chú thích đính kèm thay vì một trường được thiết kế cho mục đích đó.
  • Một số công cụ giả sử sẽ chứa bản dịch tiếng Anh ban đầu (thay vì chỉ là một chuỗi ID), có nghĩa là tùy chọn kiểm tra lỗi tự động của công cụ đó không hữu ích lắm, hoặc nó có thể có nghĩa là công cụ khác nhau, vv Hầu hết các công cụ không đưa ra giả định.
  • Một số công cụ .po như \ n thay vì \ r \ n

Dự án ban đầu tôi đã viết resgenEx cho có hai file resx và một tập tin .isl cho mọi ngôn ngữ được hỗ trợ, nhưng không lâu sau tôi sẽ cần để quản lý tất cả các bản dịch cho dự án .Net có nhiều tệp resx cho mọi lớp trong mã. Khi điều này xảy ra, tôi sẽ quyết định liệu tôi có nên tiếp tục sử dụng .po hay tôi nên sử dụng xliff hay cái gì khác. Nếu tôi tiếp tục sử dụng .po thì tôi sẽ dọn sạch resgenEx và có lẽ cần phải thêm nhiều tính năng hơn, như khả năng tự động thêm tên assembly và tiền tố tên lớp vào msgids.

0

Bạn cũng có thể thử PhraseApp. PhraseApp là một nền tảng quản lý dịch thuật và hỗ trợ một loạt các định dạng. Bằng cách này, bạn có thể tải nó lên ở bất kỳ định dạng nào và xuất lại ở định dạng phù hợp nhất trong trường hợp của bạn như XLIFF, po hoặc resx. Bằng cách này bạn không cần phải quyết định cho một định dạng dịch duy nhất. Và bạn luôn có thể chuyển đổi dễ dàng sang định dạng khác. PS: Công bố đầy đủ Tôi làm việc cho nhóm PhraseApp.