13

Tôi đang xây dựng một ứng dụng bằng Angular5 mới nhất và những gì tôi cần là để người dùng có thể chuyển đổi ngôn ngữ. Tôi đã không bao giờ phải thực hiện điều này trong một Angular2 + (thực sự tôi đang sử dụng Angular5).Góc 5 quốc tế hóa

Tôi cần phải thiết lập dịch ở hai nơi:

  • phần của mẫu html - nhãn thay đổi ngôn ngữ quy định
  • Trong mã trong file component.ts - Tôi có thể cần phải dịch một số chuỗi được tạo động theo các điều kiện cụ thể trong mã

Tôi đã xem ngx-translation và có vẻ như bạn cần làm mọi thứ tôi cần, vì nó cho phép bạn thay đổi ngôn ngữ mà không cần xây dựng lại mã của mình, hãy xem here. Tuy nhiên tôi đọc it was probably going to be deprecated do nhà phát triển chính chuyển sang nhóm góc để phát triển mã i18n của họ.

Tôi cũng hiểu rằng hiện tại i18n không hỗ trợ mọi thứ tôi cần ngay bây giờ, hãy xem here.

Câu hỏi của tôi - trạng thái phát bản dịch trong phiên bản mới nhất của Angular là gì? Có những thư viện khác mọi người sẽ khuyên bạn nên thay vào đó, nếu thực sự, Angular chính nó đã không có hỗ trợ đầy đủ như chưa (để thay đổi ngôn ngữ mà không biên dịch lại)? Là ngx-dịch tốt cho tương lai?

Bất kỳ hướng dẫn nào trong lĩnh vực này được đánh giá cao!

Trả lời

21

Sau khi dành thời gian nhìn vào điều này, tôi nghĩ rằng tôi muốn gửi những khác biệt chính tôi thấy giữa ngx-translateAngular-i18n:

  • góc chỉ làm việc với một ngôn ngữ tại một thời gian, bạn phải hoàn toàn tải lại ứng dụng để thay đổi ngôn ngữ. Hỗ trợ JIT chỉ có nghĩa là nó hoạt động với JIT, nhưng bạn vẫn phải cung cấp các bản dịch tại bootstrap vì nó sẽ thay thế văn bản trong các mẫu của bạn trong khi biên dịch trong khi lib này sử dụng các ràng buộc, có nghĩa là bạn có thể thay đổi bản dịch bất cứ lúc nào . Nhược điểm là ràng buộc có bộ nhớ, do đó, cách góc là performant hơn. Nhưng nếu bạn sử dụng OnPush cho các thành phần của mình, có thể bạn sẽ không bao giờ nhận thấy sự khác biệt
  • Góc chỉ hỗ trợ sử dụng i18n trong các mẫu của bạn, tôi đang làm việc với tính năng cho phép bạn sử dụng nó trong mã của bạn. công việc đang được tiến hành. Lib này hoạt động cả mã và mẫu
  • Hỗ trợ góc hoặc XLIFF hoặc XMB (cả hai đều là định dạng XML), mặc dù lib này hỗ trợ JSON theo mặc định nhưng bạn có thể viết trình tải của riêng mình để hỗ trợ bất kỳ định dạng nào bạn muốn (có trình tải Tập tin PO chẳng hạn). Cá nhân, các tệp Json khá đơn giản để đọc qua các định dạng khác, nhưng đó không phải là một trở ngại lớn.
  • Góc hỗ trợ biểu thức ICU (số nhiều và chọn), nhưng thư viện này không
  • Góc hỗ trợ trình giữ chỗ html bao gồm mã góc, trong khi thư viện này chỉ hỗ trợ html thông thường (vì nó được thực thi trong thời gian chạy, chứ không phải trong quá trình biên dịch và Không có biên dịch $ trong Angular như AngularJS)
  • API của thư viện này hoàn chỉnh hơn vì nó được thực thi khi chạy nó có thể cung cấp nhiều thứ hơn (quan sát, sự kiện, ...) mà Angular không có (nhưng không thực sự cần cho rằng bạn không thể thay đổi bản dịch) Tác giả của ngx-translate đã nói điều này:

Ocombe (nhà phát triển của NGX): @josersleal đó là chính xác những gì họ đã làm, đội góc thuê tôi để cải thiện i18n for everyone Nhưng không có cách để tích hợp lib của tôi trực tiếp vào cốt lõi, sau khi làm việc cho 3 tháng cho đội ngũ cốt lõi Tôi có thể nói với bạn rằng Angular i18n là nhiều hơn nữa phức tạp và phức tạp hơn lib của tôi. Nó xử lý rất nhiều công cụ phức tạp hơn , và nó làm nó mà không có tất cả các lỗi và thiếu sót mà lib của tôi có. Tôi hiểu rằng nó không làm cho lõi của bạn phát triển nhanh như những gì một thư viện có thể làm, nhưng có một số lý do cho và điều đầu tiên là bạn không thể thực hiện điều gì đó và thay đổi nó bất cứ khi nào bạn thấy mình quên để bao gồm một trường hợp sử dụng. Mọi thứ phải được lên kế hoạch kỹ lưỡng và suy nghĩ. Tuy nhiên, bạn sẽ có hầu hết những điều mà lib này có thể làm trong lõi trong tương lai , nhưng có thể mất một năm trước khi chúng tôi đến đó thật không may. Tin tốt là nó sẽ tốt hơn nhiều so với việc triển khai ngây thơ của tôi.

Đây là một bài viết tốt để thảo luận về những khác biệt chính giữa NGX-dịch và i18n góc của: https://github.com/ngx-translate/core/issues/495

Những thay đổi cho i18n là do trong phiên bản 6 của góc. Hôm nay, chúng tôi hiện đang sử dụng phiên bản 5:

Vài suy nghĩ ...

  • Angular-i18n hoạt động hiệu quả hơn khi bạn biên dịch ứng dụng bằng ngôn ngữ bạn yêu cầu (thay vì bản dịch diễn ra khi chạy). Cũng có thể là một nhược điểm vì bạn có thể cần phải có nhiều bản dựng ứng dụng của mình bằng các ngôn ngữ khác nhau.
  • Nếu chúng tôi đang sử dụng SEO, angular-i18n sẽ là con đường phía trước, do duyệt url. Đối với trường hợp của tôi, tôi không cần điều này chút nào.
  • Nếu chúng tôi yêu cầu chuyển đổi số nhiều, v.v.Một lần nữa, tôi không cần điều này - tôi chỉ cần một chuyển đổi ngôn ngữ thời gian chạy khá thẳng về phía trước trong các mẫu và mã.
  • Angular-i18n sẽ không được phát hành cho đến tháng 3 năm 2018 ít nhất. Đối với tôi, tôi không thể đợi cho đến lúc đó vì tôi cần phải xây dựng ứng dụng của mình ngay bây giờ.
  • ngx-translate sẽ không có một bộ đầy đủ các tính năng như angular-i18n NHƯNG một lần nữa, tôi chỉ cần bản dịch thời gian chạy đơn giản, vì vậy hãy suy nghĩ về những gì chúng tôi cần.
  • ngx-dịch là nguồn mở và đến ngày nó không còn được phát triển nữa, nếu có vấn đề nghiêm trọng, tôi đoán tôi có thể tự khắc phục (hy vọng vào thời điểm đó, mọi vấn đề có thể phát sinh sẽ được giải quyết).

Tôi cũng sẽ có một cái nhìn tại các thư viện góc-l10n vì nó trông rất tốt:

1

Có. ngx-dịch là tốt cho đến bây giờ, và tôi hy vọng nó sẽ được trong tương lai là tốt.

Tôi đang sử dụng ngx-translate trong dự án Angular 5 hiện tại của tôi với hơn 5 ngôn ngữ.

Nó vẫn hoạt động tốt cho tôi. Tôi không phải thực hiện bất kỳ thay đổi tùy chỉnh nào, nó hoạt động như điều cắm và chạy.

tôi sử dụng plugin này https://github.com/ngx-translate/core

+0

Hmm - yea, đồng ý, ngx- dịch là tuyệt vời! NHƯNG Tôi đã hy vọng cho một cái gì đó một chút vững chắc hơn "Tôi hy vọng nó sẽ được trong tương lai" ;-) như tôi phải thực hiện điều này ngày hôm nay –

+1

Haha, tôi đã thực hiện nó và hoạt động tốt đẹp :) –

Các vấn đề liên quan