Bản địa hóa trong php, thực hành tốt nhất hoặc cách tiếp cận?


11

Tôi đang bản địa hóa ứng dụng php của mình. Tôi có một vấn đề nan giải về việc lựa chọn phương pháp tốt nhất để thực hiện tương tự.

Phương pháp 1: Hiện đang lưu trữ các từ được bản địa hóa trong một mảng trong tệp php

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

Tôi đang sử dụng một chức năng để trích xuất và trả lại từng từ theo yêu cầu

Phương pháp 2: Tôi có nên sử dụng tệp txt lưu trữ chuỗi giống nhau không?

<?php
$welcome = 'bienvenida'; 
?>

Câu hỏi của tôi là phương pháp nào tốt hơn, về tốc độ và nỗ lực để phát triển giống nhau và tại sao?

Chỉnh sửa: Tôi muốn biết phương pháp nào trong hai phương thức này nhanh hơn trong việc trả lời và tại sao lại như vậy? Ngoài ra, bất kỳ cải thiện về mã trên sẽ được đánh giá cao !!


2
bạn đã xem xét gettext chưa?
sagarchalise

@sagarchalise tôi đã xem xét nó, nhưng tôi muốn xây dựng phương pháp của riêng tôi, tôi, bất kỳ ai trong hai người trên. Vì vậy, tôi muốn biết phương pháp nào hoạt động nhanh hơn và đáng tin cậy hơn! :)
sree

Nếu bạn muốn biết về tốc độ, chỉ cần làm một số trường hợp thử nghiệm. Cái gì chạy nhanh hơn, 1 lần so với phương pháp thứ nhất hay thứ hai?
Francisco Presencia

2
Đừng phát minh lại một bánh xe hoạt động tốt.
gbjbaanb

Câu trả lời:


10

PHP có các khả năng tích hợp tuyệt vời để bản địa hóa. Cách phổ biến nhất dường như là gettext - hướng dẫn này cho thấy cách nó được sử dụng.

Vì PHP 5.3 cũng có intl cung cấp nhiều tính năng hơn (để định dạng số, ngày và tiền tệ tùy thuộc vào ngôn ngữ chẳng hạn).


Cảm ơn câu trả lời của bạn, nhưng, tôi có thể biết từ phương pháp nào tốt hơn để xây dựng về tốc độ và độ tin cậy.
sree

10

Trước hết, gettextlà một cách tốt để đi, vì vậy đừng bỏ qua nếu ban đầu nó không dễ nghe; Tuy nhiên, có những lựa chọn khác cũng hữu ích để biết. Trước khi giải thích rằng trước tiên hãy xem đề xuất của bạn:

Trong arrayquá trình thực hiện việc này, bạn có một giải pháp khá đơn giản. Điều tốt là bạn có thể lưu trữ các bản dịch của mình trong một bộ lưu trữ dữ liệu, sau đó tải nó vào tập lệnh PHP của bạn dưới dạng một mảng và đó là nó. Tuy nhiên, nếu bạn muốn lưu trữ mảng của mình một cách tĩnh trong một tệp PHP, sau đó chỉnh sửa nó cần một) Lập trình viên PHP hoặc một người dùng đã hết hạn sử dụng cú pháp PHP, chỉ để chỉnh sửa tệp b) đồng bộ hóa giữa bốn hoặc năm tệp ngôn ngữ khác nhau có thể khá khó chịu và dễ bị lỗi.

Điều bạn cần xem xét ở đây là: Làm thế nào sau này có thể thêm các yếu tố mới vào tệp ngôn ngữ? Tôi có thể để nó cho một dịch giả hay nên có một lập trình viên PHP?

Cách làm của bạn variablelà không thực tế. Tại sao? Tôi giả sử bạn sẽ có vài chức năng ít nhất trong ứng dụng của mình, phải không? Sau đó, bạn cần truyền tất cả các biến này khi bạn gọi hàm hoặc bạn cần đến globalchúng. Nếu bạn nghĩ rằng bạn sẽ có hơn mười biến như thế này, thì tôi không khuyến khích bạn làm điều này. Cũng có thể có xung đột tên - bạn có khả năng ghi đè giá trị của một biến khác có cùng tên, tuy nhiên điều này có thể được giải quyết bằng cách thêm tiền tố đơn giản như dấu gạch dưới, vì vậy bạn sẽ có $_welcomeví dụ. Dù sao, nếu tôi là bạn, tôi thậm chí sẽ không nghĩ về nó; Đừng làm điều đó.

Một cách tốt để làm điều đó là xác định các hằng số có tiền tố. Vì vậy, ví dụ trong bạn, en.lang.phpbạn sẽ có một cái gì đó như define( 'LABEL_WELCOME', 'Welcome' );và trong no.lang.phpbạn sẽ có define ( 'LABEL_WELCOME', 'Velkommen' );. Điểm hay của việc sử dụng hằng thay vì biến là chúng luôn có sẵn trong tập lệnh của bạn. Vì vậy, bạn không cần phải tiêm hoặc toàn cầu chúng. So với cả mảng và biến, chúng nhanh hơn do cách PHP xử lý chúng - chúng chiếm ít không gian hơn trong bộ nhớ. Hạn chế là bạn không thể chuyển chúng cho người dịch, vì vậy một lần nữa bạn cần một nhà phát triển PHP. Đồng bộ hóa giữa các tập tin có thể là một chút đau đớn một lần nữa.

Tùy chọn khác là có Hàm hoặc Lớp / Phương thức để truy xuất bản dịch. Nó sẽ kém hiệu quả hơn - tuy nhiên tôi không nghĩ bạn cần loại tối ưu hóa vi mô đó, nhưng lợi thế bổ sung là bạn có thể áp dụng logic tùy chỉnh trong khi truy xuất bản dịch. Ví dụ, hãy tưởng tượng một ngày nào đó người quản lý dự án yêu quý của bạn đến gặp bạn hỏi liệu bạn có thể chuyển đổi tất cả các văn bản đó thành chữ hoa không. Bạn không thể từ chối thực hiện, do đó, có một chức năng ở giữa có thể giúp bạn rất nhiều khi bạn cần áp dụng / thay đổi một mẫu cho tất cả các bản dịch của mình.

Để gói nó:

  1. Hãy suy nghĩ về cách các dịch giả có thể sử dụng nó và đưa ra giải pháp KISS hiệu quả cho họ.

  2. Hãy suy nghĩ về cách bạn có thể duy trì đồng bộ giữa các ngôn ngữ khác nhau.

  3. Hãy suy nghĩ về việc có thể cần bản dịch tương tự hay không, giả sử ứng dụng dành cho thiết bị di động. Một giải pháp đa nền tảng có thể tiết kiệm thời gian của bạn. Đừng bỏ qua JSON và cơ sở dữ liệu thông thường.

  4. Hãy suy nghĩ về cách bạn có thể áp dụng / thay đổi logic khi truy xuất các bản dịch.

  5. Quên về hiệu suất. 99,9% số lần bạn sẽ không đạt được điều đó để tối ưu hóa vi mô như Constant so với Biến so với các cuộc gọi chức năng . Tôi giả sử thời gian của bạn là một nhà phát triển / nhân viên đắt hơn là thời gian xử lý.

Cập nhật số 1

Chúa ơi, tôi đăng một câu trả lời cho một câu hỏi cũ. Tại sao không ai nói gì ở đây? Chúng tôi cần thông báo cho những trường hợp này.

Cập nhật số 2

Ở phía bên phải nó nói đó là một câu hỏi cũ; Tuy nhiên, nó đã được hỏi hai năm trước! Mọi thứ đều sai lệch ở đây!


u trông giống như một người du hành thời gian trở lại thời gian :) tnx cho câu trả lời mặc dù!
sree

3
@sree Vâng! Tôi đến từ ngày 4 tháng 4 năm 2014! Nếu bạn mua một số cổ phiếu Facebook hoặc WhatsApp vào năm 2012, bạn sẽ không cần phải viết mã PHP vào năm 2014!
Mahdi

1
rofl đồng ý !!!
sree
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.