2011-02-04 39 views
5

Đây là khá nhiều This question với nhiều thông tin hơn một chút. Mục tiêu của tôi là tìm ra các ngôn ngữ được cài đặt trong hệ thống.Cách lấy tên ngôn ngữ cho một ngôn ngữ cụ thể trong linux

Lệnh sau

locale -a 

hiển thị tất cả các ngôn ngữ (trong một định dạng như en_AU.utf8). Điều này có vẻ tương ứng với nội dung của/usr/lib/locale.

Bên cạnh đó, cách gọi

LANG=fr_FR.utf8 locale -ck LC_IDENTIFICATION 

Cung cấp thông tin về điều đó địa phương cụ thể trong đó bao gồm tên ngôn ngữ (nào trong trường hợp này là tiếng Pháp).

Đây có vẻ là thông tin chứa trong /usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATION.

Có cách nào (có thể là cuộc gọi API) để nhận thông tin này không? Tôi nhìn vào nguồn của tiện ích miền địa phương nhưng nó sử dụng một cấu trúc riêng.

+0

Bạn không cần phải tự biến biến môi trường 'LANG' -' setlocale (LC_ALL, ""); 'sẽ đặt ngôn ngữ dựa trên cài đặt môi trường. – caf

+0

Bạn nên upvote và chấp nhận giải pháp của Yasir, không sao chép nó vào câu hỏi. Câu hỏi chỉ nên là câu hỏi. – tripleee

+1

@tripleee Cảm ơn. Câu hỏi được điều chỉnh và câu trả lời được thêm vào. – Dushara

Trả lời

0

Nhờ Yasir. Đây chính xác là những gì tôi muốn:

#include <langinfo.h> 

char *s; 
s = getenv("LANG"); 
if (s == NULL) 
    printf("LANG is not set"); 
else { 
    setlocale(LC_ALL, s); 
    printf(nl_langinfo(_NL_IDENTIFICATION_LANGUAGE)); 
} 
+0

Nếu có ai đang tìm kiếm mã ngôn ngữ, nó có thể được truy xuất bằng cách sử dụng _NL_ADDRESS_LANG_AB. Và mã quốc gia có thể được truy xuất bằng _NL_ADDRESS_COUNTRY_AB2. –

1

Tôi nghĩ rằng, bạn chỉ có thể nhận được biến môi trường, sử dụng, ví dụ: getenv(3), do đó bạn sẽ muốn chuyển nó tên biến, e. g .:

char *s; 
s = getenv("LANG"); 
if (s == NULL) 
    printf("LANG is not set"); 
else 
    printf(s); 
+0

Đó là tốt, nhưng tôi muốn biết những gì nội dung của đại diện LANG. Ví dụ: nếu LANG = fr_FR.utf, Làm cách nào để tôi hiểu rằng ngôn ngữ được trình bày là "tiếng Pháp"? – Dushara

+2

Tôi nghĩ bạn chỉ có thể kiểm tra nếu ngôn ngữ có giá trị 'fr_FR' trong tên của nó; sau khi tất cả, bạn biết đó là lối tắt cho tiếng Pháp. Hàm khác, có thể hữu ích là ['nl_langinfo (3)'] (http://linux.die.net/man/3/nl_langinfo). –

+0

Hmm nl_langinfo có vẻ đầy hứa hẹn. Tôi sẽ xem xét điều đó. – Dushara

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