* Bug 16064 fixed: tbx_make(Dir,'localization') never updated .mo files 44/20944/5
Samuel GOUGEON [Sun, 14 Apr 2019 17:21:13 +0000 (19:21 +0200)]
  http://bugzilla.scilab.org/16064

Change-Id: I7ec1a07b3d9000f8196c7f912413574662c209f5

scilab/CHANGES.md
scilab/modules/modules_manager/macros/tbx_build_localization.sci
scilab/modules/modules_manager/tests/nonreg_tests/bug_16064.tst [new file with mode: 0644]

index ec2f8c2..9141e84 100644 (file)
@@ -391,6 +391,7 @@ Bug Fixes
 * [#16015](https://bugzilla.scilab.org/16015): `intg(a,b,f)` called f(x) with x outside [a,b].
 * [#16019](https://bugzilla.scilab.org/16019): `polarplot(x,Z)` yielded an error when x is a vector and Z a matrix.
 * [#16021](https://bugzilla.scilab.org/16021): `tand([-90 90])` answered [Nan Nan] instead of [-Inf, Inf]. `cotd([-90 90])` answered [Nan Nan] instead of [0 0]. `1 ./cosd([-90 90])` answered [Inf -Inf] instead of [Inf Inf].
+* [#16064](https://bugzilla.scilab.org/16064): `tbx_make(Dir,'localization')` did not update `.mo` files from `.po`.
 * [#16026](https://bugzilla.scilab.org/16026): For `atanh`, neither the documentation pages nor the `m2sci` converter were up to date.
 * [#16028](https://bugzilla.scilab.org/16028): The length of `intdec(intdec(x, r), 1/r)` was most often different from length(x).
 * [#16046](https://bugzilla.scilab.org/16046): After `w=ssrand(2,3,4)`, `[]+w`, `[]-w`, `w+[]` and `w-[]` yielded an "operation +/- []" warning.
index a679121..30c1121 100644 (file)
@@ -1,8 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2013 - Scilab Enterprises - Antoine ELIAS
-// Copyright (C) 2016, 2018 - Samuel GOUGEON
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2016, 2018, 2019 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
@@ -79,7 +78,7 @@ function tbx_build_localization(tbx_name, tbx_path)
 
     // find list of .po files
     // ----------------------
-    poFiles = gsort(findfiles(localePath, "*.po"), "lr", "i");
+    poFiles = gsort(listfiles(localePath + "*.po"), "lr", "i");
 
     if getos() == "Windows" then
         cmd = SCI + filesep() + "tools/gettext/msgfmt";
@@ -97,10 +96,9 @@ function tbx_build_localization(tbx_name, tbx_path)
         poFile = moFile + tbx_name + ".po";
         moFile = moFile + tbx_name + ".mo";
 
-
         //check mo file is newest po, don't need to generate it
         if newest(poFiles(i), moFile) == 1 then
-            copyfile(localePath + poFiles(i), poFile);
+            copyfile(poFiles(i), poFile);
             cmd1 = cmd + " -o " + moFile + " " + poFile;
             host(cmd1)
         end
diff --git a/scilab/modules/modules_manager/tests/nonreg_tests/bug_16064.tst b/scilab/modules/modules_manager/tests/nonreg_tests/bug_16064.tst
new file mode 100644 (file)
index 0000000..d891dad
--- /dev/null
@@ -0,0 +1,53 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 16064 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16064
+//
+// <-- Short Description -->
+// tbx_make(Dir, "localization") = tbx_build_localization(Dir)
+// never updated .mo files after changing .po files
+
+dest = TMPDIR+"\bug_16064";
+rmdir(dest, "s");
+copyfile(SCI+"/contrib/toolbox_skeleton", dest);
+
+tbx_make(dest, "localization");
+addlocalizationdomain("toolbox_skeleton", dest+"\locales");
+setlanguage fr;
+assert_checkequal(_("toolbox_skeleton","Outline"), "Contour");
+
+// Initial state of the fr_FR .mo file:
+x0_fr = fileinfo(dest+"\locales\fr_FR\LC_MESSAGES\toolbox_skeleton.mo");
+x0_en = fileinfo(dest+"\locales\en_US\LC_MESSAGES\toolbox_skeleton.mo");
+
+// We change the fr_FR.po translated file:
+txt = mgetl(dest+"\locales\fr_FR.po");
+txt($) = "msgstr ""CONTOUR""";
+mputl(txt, dest+"\locales\fr_FR.po");
+sleep(2, "s")
+
+// We rebuild the toolbox:
+tbx_make(dest, "localization");
+
+// The fr_FR .mo file must have been updated:
+x1_fr = fileinfo(dest+"\locales\fr_FR\LC_MESSAGES\toolbox_skeleton.mo");
+assert_checktrue(x1_fr(6) > x0_fr(6));
+sleep(2, "s")
+// But not the en_US one:
+x1_en = fileinfo(dest+"\locales\en_US\LC_MESSAGES\toolbox_skeleton.mo");
+assert_checktrue(x1_en(6) == x0_en(6));
+
+//addlocalizationdomain("toolbox_skeleton", dest+"\locales");
+//assert_checkequal(_("toolbox_skeleton","Outline"), "CONTOUR");
+
+rmdir(dest,"s");