2013-01-22 59 views
5

Đối với một hệ thống nhúng có GUI, chúng tôi đang sử dụng hệ thống dịch tùy chỉnh của chúng tôi. Các chuỗi được lưu trữ trong ROM mã của một vi điều khiển.Gettext không có hệ thống tập tin

Hiện tại chúng tôi có tối đa 10 ngôn ngữ và khoảng 400 chuỗi đã dịch (thay đổi tùy theo biến thể sản phẩm).

Hệ thống hiện tại của chúng tôi khá cồng kềnh và tôi tin rằng gettext sẽ là giải pháp tốt hơn.

Theo như tôi hiểu gettext, nó yêu cầu sử dụng bindtextdomain để đặt thư mục chứa các tệp bản dịch đã biên dịch (* .mo).

Có cách nào để đọc bản dịch từ bộ nhớ không? Đó là tôi muốn bao gồm các tập tin * .mo biên dịch trong nhị phân, và thiết lập gettext để sử dụng chúng. Ngoài ra, các dữ liệu dịch sẽ được lưu trữ trong một EEPROM dữ liệu mà không có một hệ thống tập tin.

Hoặc bạn có thể giới thiệu một hệ thống dịch khác để sử dụng trong hệ thống vi điều khiển (16 hoặc 32 bit, 256 đến 512 byte ROM) với giao diện C không?

Chỉnh sửa: Tôi nên thêm rằng có thể duy trì bản dịch ngoài phần mềm vi điều khiển sẽ là lý do để chuyển sang gettext. Dữ liệu dịch phù hợp sẽ được người dùng tải bằng phần mềm cấu hình mà chúng tôi đã cung cấp với hệ thống của chúng tôi.

+2

Có lẽ gettext sẽ quá thừa trong trường hợp của bạn? Có thể bạn sẽ làm một cái gì đó như [this] (http://code.google.com/p/bta-meteo-logger/source/browse/C/daemon/lang.h)? –

+0

Bạn có thể thiết lập một đĩa RAM trên đầu trang của tệp nhị phân hoặc tệp giả mạo I/O. –

Trả lời

3

Đây là những gì tôi sẽ làm: Tôi sẽ bao gồm nhị phân ".mo" trong các biến không đổi trong mã. Bạn có thể viết một công cụ chuyển đổi đơn giản từ nhị phân sang mảng char và có tệp ".mo" được biên dịch bên trong chương trình của bạn. Bạn sẽ có một mảng dữ liệu tệp ".mo", mỗi tệp có một ngôn ngữ khác nhau.

Tôi sẽ sửa đổi mã nguồn libintl để truy cập một trong các mảng đó. Kiểm tra tệp loadmsgcat.c, hàm _nl_load_domain. Xem cách nó cố gắng sử dụng mmap() (vì vậy nó được chuẩn bị để có mọi thứ trong bộ nhớ). Chỉ cần thêm một số mã ở đó để quyết định phần tử nào của mảng ".mo" để sử dụng dựa trên ngôn ngữ được yêu cầu.

Tôi chưa thử điều này, nhưng đây là những gì tôi sẽ cố gắng đưa ra tình huống của bạn. Nó không quá khó.

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