Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.arch.embedded > #27283
| Subject | Re: Multi-language support on embedded plarforms |
|---|---|
| Newsgroups | comp.arch.embedded, comp.lang.c |
| References | <ooljr9$2kp$1@dont-email.me> |
| From | Richard Damon <Richard@Damon-Family.org> |
| Message-ID | <F0ysB.69878$EZ2.64724@fx22.iad> (permalink) |
| Organization | Forte - www.forteinc.com |
| Date | 2017-09-08 10:43 -0400 |
Cross-posted to 2 groups.
On 9/5/17 3:30 AM, pozz wrote:
> [This message is posted to comp.arch.embedded and comp.lang.c]
>
> Just for reference, an embedded platform based on a MCU with integrated
> Flash, for example a Cortex-Mx device.
> Here I consider only western languages (left-to-right and european
> chars, english, french, german, spanish and so on).
>
> The main problem is the translation of strings, maybe 10-100 strings.
>
> I know something about gettext package that can't be used in those
> embeded platforms. However I like the approach of gettext.
>
> print_to_display(x, y, "Hello world!");
>
> is simply changed in:
>
> #include <gettext.h>
> ...
> print_to_display(x, y, _("Hello world!"));
>
> In this way, the code stays highly readble as before introducing the
> multi-language support. If a member of a structure needs a string, it is
> a char * as usual.
>
> The solution I found in embedded platforms is to use an array of array
> of strings: one index for the string and one index for the language.
>
> enum lang_t { ENGLISH, ITALIAN, LANG_N };
> enum string_t { STR_HELLO_WORLD, STR_HOW_ARE_YOU };
>
> const char *strings[STRING_N][LANG_N] = {
> { // STR_HELLO_WORLD
> { "Hello world!", "Ciao mondo" }
> },
> { // STR_HOW_ARE_YOU
> { "How are you?", "Come stai?" }
> },
> };
>
> static enum lang_t lang = ENGLISH;
>
> const char *_(int string_idx) {
> return strings[string_idx][lang];
> }
>
> void set_language(enum lang_t new_language) {
> lang = new_language;
> }
>
>
> I don't like too much this approach for two reasons.
> The first, the line:
>
> print_to_display(x, y, _(STR_HELLO_WORLD));
>
> is much less readable than
>
> print_to_display(x, y, _("Hello world!"));
>
>
> The second, I need to change the type of some members/variables from
> char * to int:
>
> struct mystruct {
> int title; // Instead of char *title
> ...
> };
>
>
> Another approach I'm thinking is to embed all the translations in the
> string, using a separator character that can't be used in normal strings.
>
> print_to_display(x, y, _("Hello world!|Ciao Mondo!"));
>
> The _() function will search the translated string based on the current
> language. If he can't find, it could return the first translation
> (english).
>
> This approach has some disadvantages. It's difficult to exclude one
> language from the build. If the languages are more than a couple, the
> strings will be very long. The order of the translations (first english,
> than italian, ...) is important and you have to remember it for every
> string.
>
>
> What approach do you use?
If you really want to look by string, then your _ function just needs to
search the translation table for that value, and then return the string
desired translation instead of passing in the index. The lookup will
take a bit of time, but not that long given your number of strings, and
if you sort the strings by the base translation, you could binary search
to find it.
Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Multi-language support on embedded plarforms pozz <pozzugno@gmail.com> - 2017-09-05 09:30 +0200
Re: Multi-language support on embedded plarforms David Brown <david.brown@hesbynett.no> - 2017-09-05 10:43 +0200
Re: Multi-language support on embedded plarforms Robert Wessel <robertwessel2@yahoo.com> - 2017-09-05 09:56 -0500
Re: Multi-language support on embedded plarforms Ian Collins <ian-news@hotmail.com> - 2017-09-06 07:50 +1200
Re: Multi-language support on embedded plarforms Robert Wessel <robertwessel2@yahoo.com> - 2017-09-05 17:11 -0500
Re: Multi-language support on embedded plarforms Keith Thompson <kst-u@mib.org> - 2017-09-05 15:17 -0700
Re: Multi-language support on embedded plarforms Robert Wessel <robertwessel2@yahoo.com> - 2017-09-05 19:19 -0500
Re: Multi-language support on embedded plarforms raltbos@xs4all.nl (Richard Bos) - 2017-09-09 12:37 +0000
Re: Multi-language support on embedded plarforms Robert Wessel <robertwessel2@yahoo.com> - 2017-09-09 16:16 -0500
Re: Multi-language support on embedded plarforms raltbos@xs4all.nl (Richard Bos) - 2017-09-15 17:17 +0000
Re: Multi-language support on embedded plarforms Allan Herriman <allanherriman@hotmail.com> - 2017-09-06 11:27 +0000
Re: Multi-language support on embedded plarforms Paul <paul@pcserviceselectronics.co.uk> - 2017-09-05 10:04 +0100
Re: Multi-language support on embedded plarforms Theo Markettos <theom+news@chiark.greenend.org.uk> - 2017-09-06 10:55 +0100
Re: Multi-language support on embedded plarforms Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> - 2017-09-05 17:00 -0400
Re: Multi-language support on embedded plarforms Keith Thompson <kst-u@mib.org> - 2017-09-07 10:55 -0700
Re: Multi-language support on embedded plarforms scott@slp53.sl.home (Scott Lurndal) - 2017-09-07 18:41 +0000
Re: Multi-language support on embedded plarforms pozz <pozzugno@gmail.com> - 2017-09-08 11:33 +0200
Re: Multi-language support on embedded plarforms bartc <bc@freeuk.com> - 2017-09-08 11:32 +0100
Re: Multi-language support on embedded plarforms David Brown <david.brown@hesbynett.no> - 2017-09-08 13:37 +0200
Re: Multi-language support on embedded plarforms bartc <bc@freeuk.com> - 2017-09-08 14:48 +0100
Re: Multi-language support on embedded plarforms David Brown <david.brown@hesbynett.no> - 2017-09-08 16:45 +0200
Re: Multi-language support on embedded plarforms Richard Damon <Richard@Damon-Family.org> - 2017-09-08 10:43 -0400
Re: Multi-language support on embedded plarforms Mel Wilson <mwilson@the-wire.com> - 2017-09-08 17:33 +0000
csiph-web