Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.arch.embedded > #27283

Re: Multi-language support on embedded plarforms

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.

Show all headers | View raw


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


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