- On Red Hat distributions: python3.
- Other: https://repology.org/project/python/versions
- * GNU clisp
- + Homepage: http://clisp.org/
- + Pre-built package name:
- - On Debian and Debian-based systems: clisp, clisp-doc,
- - On Red Hat distributions: --.
- - Other: https://repology.org/project/clisp/versions
-
- * librep
- + Homepage: http://librep.sourceforge.net/
- + Pre-built package name:
- - On Debian and Debian-based systems: rep, rep-doc,
- - On Red Hat distributions: --.
- - Other: https://repology.org/project/librep/versions
-
- * GNU guile
- + Homepage: https://www.gnu.org/software/guile/
- + Pre-built package name:
- - On Debian and Debian-based systems: guile-2.2, guile-2.2-doc,
- or: guile-3.0, guile-3.0-doc,
- - On Red Hat distributions: guile.
- - Other: https://repology.org/project/guile/versions
-
- * GNU smalltalk
- + Homepage: http://smalltalk.gnu.org/
- + Pre-built package name:
- - On Debian and Debian-based systems: gnu-smalltalk, gnu-smalltalk-doc
- (only up to Debian 11),
- - On Red Hat distributions: gnu-smalltalk (EPEL).
- - Other: https://repology.org/project/smalltalk/versions
-
* A Java compiler
+ Homepage: http://openjdk.java.net/
+ Pre-built package name:
- On Red Hat distributions: dotnet7.0 or dotnet8.0.
- Other: https://repology.org/project/dotnet/versions
- * GNU awk
- + Homepage: https://www.gnu.org/software/gawk/
+ * The GNOME/Mozilla JavaScript interpreter
+ + Homepage: https://wiki.gnome.org/Projects/Gjs
+ Pre-built package name:
- - On Debian and Debian-based systems: gawk, gawk-doc,
- - On Red Hat distributions: gawk.
- - Other: https://repology.org/project/gawk/versions
+ - On Debian and Debian-based systems: gjs, gir1.2-gtk-3.0,
+ - On Red Hat distributions: gjs.
+ - Other: https://repology.org/project/gjs/versions
- * The Free Pascal compiler ppc386 or ppcx64
- + Homepage: https://www.freepascal.org/
- + Pre-built package name:
- - On Debian and Debian-based systems: fp-compiler, fp-docs,
- - On Red Hat distributions: fpc (EPEL).
- - Other: https://repology.org/project/fpc/versions
- * The Free Pascal Free Component Library
- + Homepage: https://www.freepascal.org/fcl/fcl.var
+ * GNU guile
+ + Homepage: https://www.gnu.org/software/guile/
+ Pre-built package name:
- - On Debian and Debian-based systems: fp-units-fcl,
- - On Red Hat distributions: --.
- - Other: https://repology.org/project/fpc/versions
+ - On Debian and Debian-based systems: guile-2.2, guile-2.2-doc,
+ or: guile-3.0, guile-3.0-doc,
+ - On Red Hat distributions: guile.
+ - Other: https://repology.org/project/guile/versions
- * Tcl
- + Homepage: https://www.tcl.tk/
+ * GNU clisp
+ + Homepage: http://clisp.org/
+ Pre-built package name:
- - On Debian and Debian-based systems: tcl, tcl-doc,
- - On Red Hat distributions: tcl.
- - Other: https://repology.org/project/tcl/versions
+ - On Debian and Debian-based systems: clisp, clisp-doc,
+ - On Red Hat distributions: --.
+ - Other: https://repology.org/project/clisp/versions
- * Perl
- + Homepage: https://www.perl.org/
- + Pre-built package name:
- - On Debian and Debian-based systems: perl, perl-doc,
- - On Red Hat distributions: perl.
- - Other: https://repology.org/project/perl/versions
- * The Perl packages Locale::Messages and libintl-perl
- + Homepage: http://search.cpan.org/~guido/libintl-perl/
+ * librep
+ + Homepage: http://librep.sourceforge.net/
+ Pre-built package name:
- - On Debian and Debian-based systems: libintl-perl,
- - On Red Hat distributions: perl-libintl.
- - Other: https://repology.org/project/perl:libintl-perl/versions
+ - On Debian and Debian-based systems: rep, rep-doc,
+ - On Red Hat distributions: --.
+ - Other: https://repology.org/project/librep/versions
- * php
- + Homepage: http://www.php.net/
+ * Rust
+ + Homepage: https://www.rust-lang.org/
+ Pre-built package name:
- - On Debian and Debian-based systems: php,
- - On Red Hat distributions: php.
- - Other: https://repology.org/project/php/versions
+ - On Debian and Debian-based systems: rustc, cargo,
+ - On Red Hat distributions: rust, rust-cargo.
+ - Other: https://repology.org/project/rust/versions
+ https://repology.org/project/cargo/versions
* Ruby
+ Homepage: https://www.ruby-lang.org/en/
- On Red Hat distributions: ruby-gettext.
- Other: https://repology.org/project/ruby:gettext/versions
+ * GNU awk
+ + Homepage: https://www.gnu.org/software/gawk/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: gawk, gawk-doc,
+ - On Red Hat distributions: gawk.
+ - Other: https://repology.org/project/gawk/versions
+
* lua
+ Homepage: https://www.lua.org/
+ Pre-built package name:
- On Red Hat distributions: --.
- Other: https://repology.org/project/lua:gettext/versions
- * The GNOME/Mozilla JavaScript interpreter
- + Homepage: https://wiki.gnome.org/Projects/Gjs
+ * The Free Pascal compiler ppc386 or ppcx64
+ + Homepage: https://www.freepascal.org/
+ Pre-built package name:
- - On Debian and Debian-based systems: gjs, gir1.2-gtk-3.0,
- - On Red Hat distributions: gjs.
- - Other: https://repology.org/project/gjs/versions
+ - On Debian and Debian-based systems: fp-compiler, fp-docs,
+ - On Red Hat distributions: fpc (EPEL).
+ - Other: https://repology.org/project/fpc/versions
+ * The Free Pascal Free Component Library
+ + Homepage: https://www.freepascal.org/fcl/fcl.var
+ + Pre-built package name:
+ - On Debian and Debian-based systems: fp-units-fcl,
+ - On Red Hat distributions: --.
+ - Other: https://repology.org/project/fpc/versions
+
+ * GNU smalltalk
+ + Homepage: http://smalltalk.gnu.org/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: gnu-smalltalk, gnu-smalltalk-doc
+ (only up to Debian 11),
+ - On Red Hat distributions: gnu-smalltalk (EPEL).
+ - Other: https://repology.org/project/smalltalk/versions
* The GNOME Vala compiler
+ Homepage: https://wiki.gnome.org/Projects/Vala
- On Red Hat distributions: vala.
- Other: https://repology.org/project/vala/versions
+ * Tcl
+ + Homepage: https://www.tcl.tk/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: tcl, tcl-doc,
+ - On Red Hat distributions: tcl.
+ - Other: https://repology.org/project/tcl/versions
+
+ * Perl
+ + Homepage: https://www.perl.org/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: perl, perl-doc,
+ - On Red Hat distributions: perl.
+ - Other: https://repology.org/project/perl/versions
+ * The Perl packages Locale::Messages and libintl-perl
+ + Homepage: http://search.cpan.org/~guido/libintl-perl/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: libintl-perl,
+ - On Red Hat distributions: perl-libintl.
+ - Other: https://repology.org/project/perl:libintl-perl/versions
+
+ * php
+ + Homepage: http://www.php.net/
+ + Pre-built package name:
+ - On Debian and Debian-based systems: php,
+ - On Red Hat distributions: php.
+ - Other: https://repology.org/project/php/versions
+
If you want to exercise the sample programs in gettext-tools/examples/, you
also need to install:
--- /dev/null
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test of gettext facilities in the Rust language.
+# Assumes an fr_FR locale is installed.
+# Assumes the following packages are installed: rustc, cargo,
+# and the following Rust packages ("crates"): gettext-rs, formatx.
+
+# Test whether we can build and run Rust programs.
+: ${CARGO=cargo}
+(${CARGO} --version) >/dev/null 2>/dev/null \
+ || { echo "Skipping test: cargo not found"; Exit 77; }
+
+cat <<\EOF > Cargo.toml
+[package]
+name = "gettext-lang-rust"
+version = "0.0.0"
+edition = "2021"
+
+[dependencies]
+gettext-rs = "0.7.2"
+formatx = "0.2.3"
+EOF
+
+mkdir src
+cat <<\EOF > src/main.rs
+use std::env;
+use std::process;
+use gettextrs::*;
+use formatx::*;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ let n: u32 = args[1].parse().unwrap_or_else(|_| { process::exit (1); });
+
+ setlocale (LocaleCategory::LcAll, "");
+
+ textdomain ("prog").expect ("textdomain failed");
+ bindtextdomain ("prog", ".").expect ("bindtextdomain failed");
+ /* gettext-rs requires UTF-8 encoding. */
+ bind_textdomain_codeset ("prog", "UTF-8").expect ("bind_textdomain_codeset failed");
+
+ println! ("{}", gettext ("'Your command, please?', asked the waiter."));
+ println! ("{}", formatx! (ngettext ("a piece of cake", "{} pieces of cake", n), n).unwrap());
+ println! ("{}", formatx! (gettext ("{} is replaced by {}."), "FF", "EUR").unwrap());
+}
+EOF
+
+: ${XGETTEXT=xgettext}
+${XGETTEXT} -o prog.tmp --omit-header --no-location src/main.rs || Exit 1
+LC_ALL=C tr -d '\r' < prog.tmp > prog.pot || Exit 1
+
+cat <<\EOF > prog.ok
+msgid "'Your command, please?', asked the waiter."
+msgstr ""
+
+#, rust-format
+msgid "a piece of cake"
+msgid_plural "{} pieces of cake"
+msgstr[0] ""
+msgstr[1] ""
+
+#, rust-format
+msgid "{} is replaced by {}."
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} prog.ok prog.pot || Exit 1
+
+cat <<\EOF > fr.po
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgid "'Your command, please?', asked the waiter."
+msgstr "«Votre commande, s'il vous plait», dit le garçon."
+
+# Les gateaux allemands sont les meilleurs du monde.
+#, rust-format
+msgid "a piece of cake"
+msgid_plural "{} pieces of cake"
+msgstr[0] "un morceau de gateau"
+msgstr[1] "{} morceaux de gateau"
+
+# Reverse the arguments.
+#, rust-format
+msgid "{} is replaced by {}."
+msgstr "{1} remplace {0}."
+EOF
+
+: ${MSGMERGE=msgmerge}
+${MSGMERGE} -q -o fr.po.tmp fr.po prog.pot || Exit 1
+LC_ALL=C tr -d '\r' < fr.po.tmp > fr.po.new || Exit 1
+
+: ${DIFF=diff}
+${DIFF} fr.po fr.po.new || Exit 1
+
+test -d fr || mkdir fr
+test -d fr/LC_MESSAGES || mkdir fr/LC_MESSAGES
+
+: ${MSGFMT=msgfmt}
+${MSGFMT} -o fr/LC_MESSAGES/prog.mo fr.po
+
+this_test_is_longrunning_
+
+: ${CARGO=cargo}
+# This takes between 2.5 minutes (on a fast machine) and 5 minutes,
+# most of it in "Compiling locale_config v0.3.0". Sigh.
+${CARGO} build || Exit 1
+
+# Test which of the fr_FR locales are installed.
+: ${LOCALE_FR=fr_FR}
+: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
+if test $LOCALE_FR != none; then
+ LC_ALL=$LOCALE_FR ../testlocale
+ case $? in
+ 0) ;;
+ 77) LOCALE_FR=none;;
+ *) Exit 1;;
+ esac
+fi
+if test $LOCALE_FR_UTF8 != none; then
+ LC_ALL=$LOCALE_FR_UTF8 ../testlocale
+ case $? in
+ 0) ;;
+ 77) LOCALE_FR_UTF8=none;;
+ *) Exit 1;;
+ esac
+fi
+if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then
+ if test -f /usr/bin/localedef; then
+ echo "Skipping test: no french locale is installed"
+ else
+ echo "Skipping test: no french locale is supported"
+ fi
+ Exit 77
+fi
+
+: ${DIFF=diff}
+cat <<\EOF > prog.ok
+«Votre commande, s'il vous plait», dit le garçon.
+2 morceaux de gateau
+EUR remplace FF.
+EOF
+
+: ${LOCALE_FR=fr_FR}
+: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
+if test $LOCALE_FR != none; then
+ prepare_locale_ fr $LOCALE_FR
+ LANGUAGE= LC_ALL=$LOCALE_FR target/debug/gettext-lang-rust 2 > prog.out1 || Exit 1
+ ${DIFF} prog.ok prog.out1 || Exit 1
+fi
+if test $LOCALE_FR_UTF8 != none; then
+ prepare_locale_ fr $LOCALE_FR_UTF8
+ LANGUAGE= LC_ALL=$LOCALE_FR_UTF8 target/debug/gettext-lang-rust 2 > prog.out2 || Exit 1
+ ${DIFF} prog.ok prog.out2 || Exit 1
+fi
+
+Exit 0