On 3/25/19 2:32 PM, Juri Linkov wrote: > I don't know where to put i18n related code, so since ngettext should > have C calls anyway, I moved it to editfns.c near the function ‘message’ > where it still just returns the correct plurals without doing any translation. That stub had some problems: 1. It lacked documentation in the Elisp manual. Important changes like this should be documented -- to some extent the documentation is even more important than the code. Can you write something? 2. While you're thinking about (1) here are some other questions. How will ngettext determine the message catalog? Is the catalog visible to users as a global variable, or as a hidden part of the global state, or is it something explicit? How will catalogs from multiple packages be used? How would a multi-lingual application work in Emacs if the message catalog is part of global state? This seems to be a crucial issue, I'd say. For example, should Emacs export dcngettext to Lisp code, instead of just plain ngettext? (Emacs could then define ngettext in terms of dcngettext.) 3. User C code is not supposed to inspect the _LIBC macro; that's for glibc internal use. In Emacs _LIBC should be used only with code shared with glibc, and we should assume _LIBC is never defined when files are compiled for Emacs. 4. The stub doesn't work with bignums. 5. When calling the C-level ngettext, strings are not properly recoded. I fixed (3) and (4), and temporarily worked around (5), by installing the attached patch. To do a better job with (2) and (5) please see the gettext manual's instructions for package maintainers, here: https://www.gnu.org/software/gettext/manual/gettext.html#Maintainers To my mind (1) and (2) are the most-pressing problems.