2012-08-29 33 views
9

Tôi đang làm việc với các ngôn ngữ trong R ails, và tôi tự hỏi thực hành tốt nhất là gì khi viết hoa một từ.Phương pháp hay nhất để tận dụng các từ trong Rails là gì?

en.yml:

hello: "hello" 

application.html.erb:

<%= link_to t(:hello).capitalize, hello_path %> (with capitalization) 
<%= link_to t(:hello), hello_path %> (without capitalization) 

hoặc

en.yml:

Hello: "Hello" 
hello: "hello" 

application.html.erb:

<%= link_to t(:Hello), hello_path %> (with capitalization) 
<%= link_to t(:hello), hello_path %> (without capitalization) 
+2

Cần lưu ý rằng nội dung ngôn ngữ có thể rất phức tạp rất nhanh. Đây là một ví dụ khá đơn giản. Bạn có bất kỳ trường hợp sử dụng thực tế hơn? – tybro0103

Trả lời

21

Cách thứ hai có cơ hội tốt hơn là chính xác. Khi viết hoa và khi không phụ thuộc vào ngôn ngữ, bạn không thể biết liệu t(:hello).capitalize có mang lại kết quả chính xác hay không mà không nhìn vào bối cảnh xung quanh. Một cách tiếp cận tốt hơn so với một trong hai sẽ bao gồm các nội dung trong biểu tượng, một cái gì đó như thế này:

t(:hello_button) 

và sau đó bằng tiếng Anh YAML của bạn:

hello_button: "Hello" 

Bằng cách đó các bản dịch có thể sử dụng bất cứ trường hợp là phù hợp cho ngôn ngữ được đề cập. Ngoài ra, đôi khi tiếng Anh sẽ sử dụng cùng một từ cho hai điều khi các ngôn ngữ khác sẽ sử dụng các từ khác nhau: xem xét cam màu và cam quả; do đó tầm quan trọng của ngữ cảnh trong bản dịch của bạn.

Hơn nữa, capitalize chỉ hoạt động trên các ký tự ASCII, trừ khi bạn ném một mb_chars vào trộn:

> 'µ'.capitalize 
=> "µ" 
> 'µ'.mb_chars.capitalize.to_s 
=> "Μ" 

Bạn có thể không gặp một lãnh đạo µ nhưng đơn giản điểm nhấn ở phần đầu của từ này là khá phổ biến:

> 'éclair'.capitalize 
=> "éclair" 
> 'éclair'.mb_chars.capitalize.to_s 
=> "Éclair" 

Điều này chỉ làm xước bề mặt của những khó khăn mà bạn sẽ phải đối mặt bằng cách giả định rằng tất cả các ngôn ngữ đều hoạt động như tiếng Anh. Chỉ cần đợi cho đến khi bạn phải bắt đầu giao dịch với pluralization rules.

Quy tắc cơ bản trong L10N là xử lý các chuỗi hướng người dùng dưới dạng các mảng dữ liệu mờ mà bạn lấy ra khỏi cơ sở dữ liệu của một số loại và hiển thị cho người dùng mà không cần thao tác ở giữa. Có, điều này làm cho mã của bạn phức tạp hơn nhưng độ chính xác là rất quan trọng.


Trong khi tôi ở đây, cố gắng dịch các từ riêng lẻ có xu hướng tạo ra một mớ hỗn độn không thể hiểu nổi, bạn sẽ có kết quả tốt hơn nếu bạn dịch toàn bộ câu.

3

Đầu tiên. Không sao chép dữ liệu của bạn chỉ bằng cách viết hoa là sự khác biệt, nó chỉ làm cho việc duy trì khó hơn.

+6

Xin lỗi, tôi không đồng ý với bạn về điều đó, viết hoa phụ thuộc vào ngữ cảnh. –

+0

Chắc chắn, tôi cũng đã nghĩ đến việc sử dụng đầu tiên. Nhưng trong khi hiệu suất là đắt hơn để gửi một ngôn ngữ var hoặc sử dụng phương pháp để tận dụng? – Gabamnml

+1

@Gabamnml Running '' hello'.capitalize' 1.000.000 lần trên máy tính của tôi mất 820ms. Các hit hiệu suất nhỏ làm điều này một vài lần mỗi trang không phải là giá trị chi phí bảo trì. –

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