Quốc tế hóa và địa phương hóa

Trong máy tính, quốc tế hóa và địa phương hóa (internationalization and localization), thường được viết tắt là i18n và l10n, là các thuật ngữ chỉ việc phát triển một phần mềm máy tính ở các ngôn ngữ khác nhau, các khu vực khác nhau cũng như yêu cầu kỹ thuật khác nhau của một địa phương mục tiêu. Quốc tế hóa là quá trình thiết kế một ứng dụng phần mềm để nó có thể được điều chỉnh cho nhiều ngôn ngữ và khu vực mà không có sự thay đổi về kỹ thuật. Địa phương hóa là quá trình đáp ứng một phần mềm đã quốc tế hóa cho một vùng hoặc ngôn ngữ cụ thể bằng cách bổ sung các thành phần của ngôn ngữ đang hướng đến, cũng như dịch các đoạn văn bản trong phần mềm qua ngôn ngữ đó.

== Đặt tên ==
Thông thường, vì các từ này quá dài nên người ta thường gọi tắt là "i18n "("18" viết tắt cho số các chữ cái giữa "i "và "n" trong từ "internationalization") và "L10n" đối với "localization."

Một số công ty như IBM và Sun Microsystem sử dụng thuật ngữ "toàn cầu hóa (globalization)", viết tắt là "g11n "để thay thế cho cả quốc tế hóa và địa phương hóa. Ngoài ra có khi người ta lại sử dụng thuật ngữ ""glocalization"" (một sự ghép chữ của "toàn cầu hóa" - "internationalization "và "địa phương hóa – localization").

== Phạm vi ==
Theo định nghĩa  Phần mềm không biên giới, các khía cạnh cần được xem xét khi quốc tế hóa một sản phẩm là "mã hóa dữ liệu, tài liệu, xây dựng phần mềm, hỗ trợ thiết bị phần cứng, tương tác người dùng".

Việc dịch thuật thường là giai đoạn tốn thời gian nhất của việc địa phương hóa. Việc này có thể liên quan đến những công việc sau:
- Đối với phim, video và âm thanh, bản dịch của lời nói hay bài nhạc thường sử dụng phương pháp lồng tiếng hoặc phụ đề.
- Dịch văn bản cho các tài liệu in, phương tiện kỹ thuật số (có thể dịch luôn các thông báo lỗi và tài liệu).
- Có thể thay đổi hình ảnh và logo có chứa văn bản qua bản dịch hoặc các biểu tượng dùng chung.
- Sự khác nhau giữa độ dài và kích thước của bản dịch so với bản gốc (ví dụ giữa các chữ cái Latinh và các chữ Trung Quốc) có thể khiến bố cục của phần mềm bị vỡ trong một số ngôn ngữ.
- Cần xem xét sự khác biệt trong phương ngữ hoặc các dạng đặc biệt của một ngôn ngữ.
- Quy ước cách viết đối với các thành phần sau:
- Cách viết chữ số (đặc biệt là dấu thập phân, và cách nhóm các chữ số)
- Cách viết ngày giờ, và bổ sung các hệ thống lịch địa phương

=== Chuẩn dữ liệu địa phương ===
Phần mềm máy tính có thể gặp phải các sự khác biệt ở trên và ngoài ra còn gặp những khó khăn khác nếu dịch các từ và cụm từ phức tạp, bởi vì các chương trình máy tính có thể tạo ra nội dung động. Những khác biệt này có thể cần phải được tính toán trước trong quá trình quốc tế hoá để chuẩn bị cho bản dịch. Một số sự khác biệt xảy ra thường xuyên đến nỗi việc chuyển đổi giữa các ngôn ngữ có thể được thực hiện một cách tự động. Kho lưu trữ dữ liệu địa phương dùng chung của Unicode có một tập hợp các sự khác biệt đó. Dữ liệu của nó được sử dụng bởi các hệ điều hành lớn, bao gồm Microsoft Windows, macOS, Debian, và bởi các công ty Internet hoặc các dự án lớn như Google và Wikimedia Foundation. Các ví dụ về những khác biệt đó bao gồm: 
- Các hệ thống chữ viết khác nhau sử dụng các ký tự khác nhau – một tập các chữ cái, syllogram, logogram hoặc các ký hiệu khác nhau. Các hệ thống hiện đại sử dụng tiêu chuẩn Unicode để thể hiện một ký tự trong nhiều ngôn ngữ khác nhau chỉ với một cách mã hóa.
- Viết từ trái sang phải trong hầu hết các ngôn ngữ Châu Âu, từ phải sang trái trong tiếng Hebrew và tiếng Ả Rập, hoặc cả hai trong kiểu boustrophedon và viết theo chiều dọc trong một số ngôn ngữ Châu Á.
- Bố cục văn bản phức tạp, cho các ngôn ngữ ở những nơi các ký tự thay đổi hình dạng tùy thuộc vào ngữ cảnh.
- Dạng viết hoa chỉ tồn tại trong một số ngôn ngữ.
- Các ngôn ngữ và hệ thống viết khác nhau có các quy tắc sắp xếp văn bản khác nhau.
- Các ngôn ngữ khác nhau có các hệ thống số khác nhau, có thể cần được hỗ trợ nếu ngôn ngữ đó không sử dụng chữ số Ả Rập
- Các ngôn ngữ khác nhau có các quy tắc chuyển số nhiều khác nhau, làm phức tạp các chương trình tự động hiển thị nội dung dạng số. Các quy tắc ngữ pháp khác cũng rất đa dạng, ví dụ quy tắc sở hữu từ.
- Các ngôn ngữ khác nhau sử dụng dấu chấm câu khác nhau (ví dụ: trích dẫn văn bản bằng cách sử dụng dấu ngoặc kép ("") trong tiếng Anh hoặc guillemets («») trong tiếng Pháp.
- Các phím tắt chỉ thực sự có nghĩa khi sử dụng trên bố cục bàn phím đang được địa phương hóa. Ví dụ: Ctrl + S là viết tắt của "save" bằng tiếng Anh, thì phím tắt này có thể cần phải thay đổi trong quá trình địa phương hóa.

=== Quy ước quốc gia ===
Các quốc gia khác nhau có những quy ước khác nhau về mặt công nghiệp, bao gồm:
- Khổ giấy
- Truyền hình và lưu trữ dữ liệu
- Định dạng số điện thoại
- Định dạng địa chỉ, mã bưu chính, các dịch vụ giao hàng
- Hệ thống tiền tệ (biểu tượng, vị trí của biểu tượng tiền tệ khi ghi giá) – trong trường hợp này người ta hay dùng mã ISO 4217
- Hệ thống đo lường
- Kích thước pin
- Các tiêu chuẩn dòng điện và điện áp
Múi giờ khác nhau trên toàn thế giới và điều này phải được tính đến nếu một sản phẩm ban đầu chỉ tương tác với những người trong một múi giờ và sau đó mở rộng thị trường ra quốc tế. Để quốc tế hóa, UTC thường được sử dụng nội bộ và sau đó chuyển đổi thành múi giờ địa phương để hiển thị.

Các quốc gia khác nhau có các khung pháp lý khác nhau, và việc địa phương hóa phần mềm phải tuân theo các khung pháp lý đó.

Việc địa phương hóa cũng cần xem xét các khác biệt trong văn hóa của địa phương đó, ví dụ:
- Các ngày lễ
- Tên người
- Cách đặt tên đề mục
- Tính thẩm mỹ
- Tính toàn diện và tính phù hợp văn hoá của hình ảnh và màu sắc của biểu tượng.
- Dân tộc, trang phục, và địa vị xã hội của người và kiến trúc của các địa điểm được mô tả trong sản phẩm
- Các phong tục địa phương và các quy ước chung, chẳng hạn như các điều cấm kỵ trong xã hội, các tôn giáo phổ biến ở địa phương, hay sự mê tín dị đoan đối với các nhóm máu trong văn hoá Nhật Bản, hoặc các ký hiệu chiêm tinh ở các nền văn hoá khác.
== Kỹ thuật ==
Cả việc tái thiết kế một phần mềm đã có sẵn hoặc thiết kế một phần mềm mới, bước đầu tiên của quốc tế hóa là chia nhỏ từng phần phụ thuộc vào ngôn ngữ (cho dù là mã, văn bản hoặc dữ liệu) vào từng module riêng biệt rồi xử lý một cách độc lập các module đó.

Trong thực tiễn", i18n" được hiện thực hóa bằng cách đặt các chuỗi văn bản trong các file tài nguyên, và có thể được chỉnh sửa/dịch dễ dàng. Sau đó chương trình chỉ việc gọi địa chỉ của chuỗi và hiển thị ra cho người dùng.
== Quá trình ==
Phương pháp toàn cầu hoá bao gồm ba bước thực hiện sau khi lập kế hoạch, bao gồm quốc tế hóa, địa phương hóa và đảm bảo chất lượng.

Ở một mức độ nào đó (ví dụ như để đảm bảo chất lượng), nhóm phát triển xử lý các giai đoạn cơ bản/trung tâm của quy trình, sau đó mở rộng ra và cho phép tất cả những người khác kiểm tra, thường là những người hiểu tiếng nước ngoài và nền văn hóa và có một số hiểu biết nền tảng về kỹ thuật.

Khi dịch văn bản hiện tại sang các ngôn ngữ khác, rất khó để duy trì các phiên bản song song của văn bản trong suốt vòng đời của sản phẩm. Ví dụ, nếu một thông báo được sửa đổi, tất cả các phiên bản dịch khác cũng phải được thay đổi.

== Cân nhắc về thương mại ==
Trong bối cảnh thương mại, lợi ích từ việc địa phương hoá là tiếp cận được nhiều thị trường hơn. Vào đầu những năm 1980, Lotus 1-2-3 mất đến hai năm để tách mã chương trình và văn bản và mất vị trí dẫn đầu thị trường ở châu Âu vào tay Microsoft Multiplan.