From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Emacs i18n Date: Thu, 07 Mar 2019 05:37:42 +0200 Message-ID: <83sgvzbbi1.fsf@gnu.org> References: <87o97aq6gz.fsf@jidanni.org> <87tvgoud56.fsf@mail.linkov.net> <83o96wk2mi.fsf@gnu.org> <87k1hjfvjd.fsf@mail.linkov.net> <871s3p0zdz.fsf@mail.linkov.net> <83h8ckezyt.fsf@gnu.org> <83o96qegv1.fsf@gnu.org> <32b1ab1b-bef4-629a-8830-b1dcc6915087@cs.ucla.edu> <83a7iae9va.fsf@gnu.org> <05ed2dec-2a84-f7dc-1af5-c9d923992785@cs.ucla.edu> <87bm2p56gu.fsf@mail.linkov.net> <837edbdg33.fsf@gnu.org> <65e3fe78-3264-12ff-1edf-a05bfd86a9a9@cs.ucla.edu> <83zhq7bvsw.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="158042"; mail-complaints-to="usenet@blaine.gmane.org" Cc: juri@linkov.net, rms@gnu.org, emacs-devel@gnu.org To: Paul Eggert Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 07 04:38:58 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h1js2-000f1G-9T for ged-emacs-devel@m.gmane.org; Thu, 07 Mar 2019 04:38:58 +0100 Original-Received: from localhost ([127.0.0.1]:44496 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1js1-0006rs-0d for ged-emacs-devel@m.gmane.org; Wed, 06 Mar 2019 22:38:57 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:57202) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1jrI-0006on-Qj for emacs-devel@gnu.org; Wed, 06 Mar 2019 22:38:17 -0500 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:55449) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1jrI-0005cM-JN; Wed, 06 Mar 2019 22:38:12 -0500 Original-Received: from [176.228.60.248] (port=2805 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1h1jr3-00056S-Op; Wed, 06 Mar 2019 22:37:58 -0500 In-reply-to: (message from Paul Eggert on Wed, 6 Mar 2019 17:52:05 -0800) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:233878 Archived-At: > From: Paul Eggert > Date: Wed, 6 Mar 2019 17:52:05 -0800 > Cc: emacs-devel@gnu.org, rms@gnu.org, juri@linkov.net > > then it shouldn't be tough at all. The Elisp code should be rewritten > like this: > >    (message "The program says: %s" (shell-command-to-string "foo")) > > xgettext will automatically put "The program says: %s" into the pool of > translatable strings. The output of the "foo" command won't be > translated, nor should it be. > > Anyway, the Elisp code with "concat" needs to be rewritten regardless of > whether we do i18n, as it can throw an exception if the shell command's > output contains "%". > > All this is routine for program internationalization. Emacs is not > special here; we've often had to do this sort of thing for other GNU > packages. Sure, except that Emacs is so much larger, and gives the programmer a lot more freedom with treating code and data alike, than a typical C program. I just want people to realize how this job is more complicated in Emacs than in any other program. E.g., IIUC what you say, we will need to rewrite also the likes of this: (let* ((field (get-char-property pos 'field)) (button (get-char-property pos 'button)) (doc (get-char-property pos 'widget-doc)) (text (cond (field "This is an editable text area.") (button "This is an active area.") (doc "This is documentation text.") (t "This is unidentified text."))) (widget (or field button doc))) (when widget (widget-browse widget)) (message text))) And this is just a random, and not the most complicated, example.