From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carlos Maiolino Date: Tue, 20 Sep 2011 21:33:53 -0300 Subject: [Cluster-devel] [PATCH 3/3] mkfs i18n: In-Reply-To: <20110920172709.GA6360@andromeda.usersys.redhat.com> References: <1315330915-15039-1-git-send-email-cmaiolino@redhat.com> <1315336206.2741.28.camel@menhir> <20110920172709.GA6360@andromeda.usersys.redhat.com> Message-ID: <20110921003353.GA26970@andromeda.usersys.redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi Steve, I was looking through some codes from GNU project, and here are some examples I found: from fdisk tool (this is the latest version, but I think fdisk is not often updated): /* Prompt the user to answer a yes or no question. */ int command_line_prompt_boolean_question (const char* prompt) { char *user_ans; StrList *possibilities = str_list_create (_("yes"), _("no"), NULL); user_ans = fdisk_command_line_get_word (_(prompt), _("no"), possibilities, 0); if (strcmp (user_ans, _("yes")) == 0) return 1; /* user answered no */ return 0; } I found another idea in the gnu parted. The GNU parted adds the rpmatch function as a library into the parted source code, and adds a regex expression to be translated into the .pot file: #: lib/rpmatch.c:147 msgid "^[yY]" msgstr "" #: lib/rpmatch.c:160 msgid "^[nN]" msgstr "" Looking through both of the above codes, looks like there is no specific rule about how to translate "y/n" strings. In both cases these are translated via .pot file. One suggestion, would be to split the string "Are you sure? [y/n]" in three different strings like: "Are you sure?" "yes" "no" This way would be more 'understandable' for translators than the current one. Or, we can add to the .pot file a comment explaining what to do with this portion of translation. > > > Signed-off-by: Carlos Maiolino > > > --- > > > gfs2/mkfs/main_mkfs.c | 30 ++++++++++++++++++++++-------- > > > 1 files changed, 22 insertions(+), 8 deletions(-) > > > > > > diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c > > > index 4751f19..d68cf98 100644 > > > --- a/gfs2/mkfs/main_mkfs.c > > > +++ b/gfs2/mkfs/main_mkfs.c > > > @@ -456,8 +456,11 @@ fail: > > > > > > static void are_you_sure(struct gfs2_sbd *sdp) > > > { > > > - char input[32]; > > > + char *line = NULL; > > > + size_t len = 0; > > > int fd; > > > + int ret = -1; > > > + int res = 0; > > > > > > fd = open(sdp->device_name, O_RDONLY|O_CLOEXEC); > > > if (fd < 0) > > > @@ -465,14 +468,25 @@ static void are_you_sure(struct gfs2_sbd *sdp) > > > printf( _("This will destroy any data on %s.\n"), sdp->device_name); > > > check_dev_content(sdp->device_name); > > > close(fd); > > > - printf( _("\nAre you sure you want to proceed? [y/n] ")); > > > - if(!fgets(input, 32, stdin)) > > > - die( _("unable to read from stdin\n")); > > > + > > > + do{ > > > + printf( _("\nAre you sure you want to proceed? [y/n]")); > > This means that the translator needs to know that rpmatch is being used > > and to also know how to translate this accordingly. Why not use > > nl_langinfo() to put the response strings into this message? > > > I was looking how nl_langinfo() works, and all it does to help with yes/no > questions is to return a regex expression (like [^[SsyY].*) to be used to match > the user's answer, it does not return a string or char value like yes/no (en_US) or > sim/nao(pt_BR) we can use to replace the y/n in the question string. > > The rpmatch() function takes advantage of nl_langinfo() internaly to match the > customer's answer according to which l10n the system is set. > > This way, even using nl_langinfo(), the translator person will still need to translate > the y/n to s/n, since is not possible to use nl_langinfo to replace these values. > > What we could do, is to create an auxiliar function to check the return of nl_langinfo(), > and, according with this value, write an specific string (s/n, y/n, etc). But, imho, this > could lead to an error prone condition during string creation. > > What u think? > > Cheers, > -- > --Carlos > -- --Carlos