2013-01-22 17 views
5

Dla systemu wbudowanego z interfejsem GUI używamy naszego niestandardowego systemu tłumaczenia. Struny są przechowywane w kodzie ROM mikrokontrolera.Gettext bez systemu plików

Obecnie mamy do 10 języków i około 400 przetłumaczonych ciągów (w zależności od wersji produktu).

Nasz obecny system jest raczej uciążliwy i uważam, że lepszym rozwiązaniem byłby gettext.

O ile rozumiem gettext, wymaga użycia bindtextdomain do ustawienia katalogu zawierającego skompilowane pliki tłumaczeń (* .mo).

Czy istnieje sposób, aby zamiast tego odczytać tłumaczenie z pamięci? To znaczy, chciałbym dołączyć skompilowane pliki * .mo w pliku binarnym i skonfigurować gettext do ich użycia. Alternatywnie, dane translacji będą przechowywane w pamięci EEPROM danych bez systemu plików.

Czy możesz polecić inny system translacji do użycia w systemie mikrokontrolerów (16 lub 32-bitowy, 256 do 512 kilobajtów ROM) z interfejsem C?

Edycja: Powinienem dodać, że bycie w stanie utrzymać tłumaczenia poza oprogramowaniem mikrokontrolera byłoby powodem do przejścia na gettext. Odpowiednie dane translacyjne zostaną załadowane przez użytkownika za pomocą oprogramowania konfiguracyjnego, które już dostarczamy naszym systemom.

+2

Może gettext będzie zbyt duży w twoim przypadku? Może zrobisz coś takiego [this] (http://code.google.com/p/bta-meteo-logger/source/browse/C/daemon/lang.h)? –

+0

Można ustawić dysk RAM na wierzchu binarnego lub fałszywego pliku I/O. –

Odpowiedz

3

Oto, co powinienem zrobić: dołączę binarny ".mo" do stałych zmiennych w kodzie. Możesz napisać prosty konwerter z binarnego na tablicę znaków i mieć plik ".mo" skompilowany wewnątrz twojego programu. Będziesz mieć tablicę danych pliku ".mo", każdy z innym językiem.

Chciałbym zmodyfikować kod źródłowy libintl, aby uzyskać dostęp do jednej z tych tablic. Sprawdź plik loadmsgcat.c, funkcja _nl_load_domain. Zobacz, jak próbuje on użyć mmap() (więc jest przygotowany na wszystko w pamięci). Wystarczy dodać trochę kodu, aby zdecydować, który element tablicy ".mo" będzie używany na podstawie żądanego języka.

Nie próbowałem tego, ale to jest to, co chciałbym spróbować biorąc pod uwagę twoją sytuację. To nie wygląda na zbyt trudne.