summaryrefslogtreecommitdiff
path: root/src/editfns.c
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2019-03-25 23:32:09 +0200
committerJuri Linkov <juri@linkov.net>2019-03-25 23:32:09 +0200
commit389475dbcc4fb8ac52367e103306a632ef3fd101 (patch)
tree2ea141875aa59f25cb10725aca8547629973959a /src/editfns.c
parent1f8a6b56a5c4342b1fc3ec1d62b9418656a6f953 (diff)
downloademacs-389475dbcc4fb8ac52367e103306a632ef3fd101.tar.gz
emacs-389475dbcc4fb8ac52367e103306a632ef3fd101.tar.bz2
emacs-389475dbcc4fb8ac52367e103306a632ef3fd101.zip
* lisp/international/mule-cmds.el (ngettext): Move to editfns.c.
* src/editfns.c (Fngettext): Move from mule-cmds.el and use gettext's ngettext when available.
Diffstat (limited to 'src/editfns.c')
-rw-r--r--src/editfns.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/editfns.c b/src/editfns.c
index ac9b871835e..ab48cdb6fd1 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -53,6 +53,12 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "window.h"
#include "blockinput.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+#endif
+
static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
static Lisp_Object styled_format (ptrdiff_t, Lisp_Object *, bool);
@@ -2836,6 +2842,35 @@ usage: (save-restriction &rest BODY) */)
return unbind_to (count, val);
}
+/* i18n (internationalization). */
+
+DEFUN ("ngettext", Fngettext, Sngettext, 3, 3, 0,
+ doc: /* Return the plural form of the translation of the string.
+This function is similar to the `gettext' function as it finds the message
+catalogs in the same way. But it takes two extra arguments. The MSGID
+parameter must contain the singular form of the string to be converted.
+It is also used as the key for the search in the catalog.
+The MSGID_PLURAL parameter is the plural form. The parameter N is used
+to determine the plural form. If no message catalog is found MSGID is
+returned if N is equal to 1, otherwise MSGID_PLURAL. */)
+ (Lisp_Object msgid, Lisp_Object msgid_plural, Lisp_Object n)
+{
+ CHECK_STRING (msgid);
+ CHECK_STRING (msgid_plural);
+ CHECK_FIXNUM (n);
+
+#ifdef _LIBGETTEXT_H
+ return build_string (ngettext (SSDATA (msgid),
+ SSDATA (msgid_plural),
+ XFIXNUM (n)));
+#else
+ if (XFIXNUM (n) == 1)
+ return msgid;
+ else
+ return msgid_plural;
+#endif
+}
+
DEFUN ("message", Fmessage, Smessage, 1, MANY, 0,
doc: /* Display a message at the bottom of the screen.
The message also goes into the `*Messages*' buffer, if `message-log-max'
@@ -4554,6 +4589,8 @@ it to be non-nil. */);
defsubr (&Sinsert_char);
defsubr (&Sinsert_byte);
+ defsubr (&Sngettext);
+
defsubr (&Suser_login_name);
defsubr (&Sgroup_name);
defsubr (&Suser_real_login_name);