>>>>> Michael Chirico >>>>> on Mon, 12 Jul 2021 14:21:14 -0700 writes:
> Here is a reprex: > # initialize reprex package > cd /tmp > mkdir myPkg && cd myPkg > echo "Package: myPkg" > DESCRIPTION > echo "Version: 0.0.1" >> DESCRIPTION > mkdir R > echo "print.my_class = function(x, ...) { cat(gettext(\"'%s' is > deprecated.\"), '\n', gettext(\"'%s' is deprecated.\", > domain='R-myPkg'), '\n') }" > R/foo.R > echo "S3method(print, my_class)" > NAMESPACE > # extract string for translation > Rscript -e "tools::update_pkg_po('.')" > # add dummy translation > msginit -i po/R-myPkg.pot -o po/R-ja.po -l ja --no-translator > head -n -1 po/R-ja.po > tmp && mv tmp po/R-ja.po > echo 'msgstr "%s successfully translated"' >> po/R-ja.po > # install .mo translations > Rscript -e "tools::update_pkg_po('.')" > # install package & test > R CMD INSTALL . > LANGUAGE=ja Rscript -e "library(myPkg); print(structure(1, class = 'my_class'))" > # '%s' は廃止予定です > # %s successfully translated Trying to see if the current "R-devel trunk" would still suffer from this, and prompted by Suharto Anggono's suggestion on R's bugzilla, https://bugs.r-project.org/show_bug.cgi?id=17998#c24 I've finally started looking at this .. (Not having a Japanese locale installed though). > Note that the first gettext() call, which doesn't supply domain=, > returns the corresponding translation from base R (i.e., the output is > the same as gettext("'%s' is deprecated.", domain="R-base")). I don't see this (not having a Japanase locale? should I try with a locale I have installed?) > The second gettext() call, where domain= is supplied, returns our > dummy translation, which is what I would have expected from the first > execution. I can get the following which seems to say that everything is fine and fixed now, right? MM@lynne:myPkg$ LANGUAGE=ja R-devel -s --vanilla -e 'library(myPkg,lib.loc="~/R/library/64-linux-MM-only");structure(1,class="my_class");R.version.string' %s successfully translated %s successfully translated [1] "R Under development (unstable) (2021-09-30 r80997)" MM@lynne:myPkg$ LANGUAGE=ja `R-devel RHOME`/bin/Rscript --vanilla -e 'library(myPkg,lib.loc="~/R/library/64-linux-MM-only");structure(1,class="my_class");R.version.string' %s successfully translated %s successfully translated [1] "R Under development (unstable) (2021-09-30 r80997)" Note: During my experiments, I also do observe things confusing to me, when using Rscript and R from the command line... in some cases getting errors (in Japanese) ... but that may be just in those cases I have left any space in the string ((in the case of 'R' which in my case suffers from quoting hell because I use wrapper sh-scripts to call my versions of R ... )) > Here is what's in ?gettext: >> If domain is NULL or "", and gettext or ngettext is called from a function in the namespace of package pkg the domain is set to "R-pkg". Otherwise there is no default domain. > Does that mean the S3 print method is not "in the namespace of myPkg"? no. > Or is there a bug here? Yes, rather; or there *was* one. Thanks a lot, Michael! Best, Martin ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel