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


Groups > comp.arch.embedded > #27232

Multi-language support on embedded plarforms

From pozz <pozzugno@gmail.com>
Newsgroups comp.arch.embedded, comp.lang.c
Subject Multi-language support on embedded plarforms
Date 2017-09-05 09:30 +0200
Organization A noiseless patient Spider
Message-ID <ooljr9$2kp$1@dont-email.me> (permalink)

Cross-posted to 2 groups.

Show all headers | View raw


[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?

Back to comp.arch.embedded | Previous | Next — 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