Revision history for Perl module Text::PO

v1.0.2 2026-09-14T15:28:30+0900
    - Fixed parser bug where duplicate msgids skipped via includes leaked their state
      (msgid, msgstr, flags, reference) into the next block. With multi-line continuation
      lines, this could produce fused msgids spanning two PO entries, or attach a leaked
      msgstr to an unrelated msgid.
    - Setters for msgid, msgstr, msgid_plural and msgctxt now always reset the field on
      an empty quoted form (such as msgid "" / msgstr ""), even when the quoted content
      is empty, instead of leaving any prior value in place. This is a defence-in-depth
      fix that complements the boundary reset above.
      Side effect: empty msgstr values now serialise as "" in JSON output instead of null.
      Both forms are falsy in JavaScript, so consumers of as_json output are unaffected.
    - Fixed a latent bug in the meta header processing, exposed by the fix above. The
      block that parses the meta headers ran whenever the element list held a single
      entry, on the assumption that a lone element was always the meta block. This is
      not always true: when an include brings exactly one entry and the main file's
      first own entry is a duplicate that gets skipped, the lone element is a genuine
      entry whose msgstr is a plain scalar, and dereferencing it as an array reference
      died under strict refs. The block now runs only when the element actually looks
      like the meta block, that is an empty msgid whose msgstr is the array of header
      lines.
    - Added t/006_dup_include_leak.t regression test covering both the msgstr leak and
      the msgid fusion scenarios.
    - Corrected dngettext() to return a Text::PO::String instance by default too.

v1.0.1 2026-04-28T11:01:58+0900
    - Updated dependencies

v1.0.0 2026-03-30T09:52:15+0900
    - Improved plural handling in Text::PO::Element
    - Got rid of global variable in Text::PO::Gettext that would not be thread-safe
    - Implemented the use of Module::Generic::Global
    - Added warning about deprecated methods in Text::PO::Gettext

v0.9.2 2026-01-13T09:35:36+0900
    - Corrected the javascript method '_getSeparator' in gettext.js

v0.9.1 2025-12-05T07:38:33+0900
    - Fixed error in unit test with undeclared dependency.

v0.9.0 2025-12-03T20:42:17+0900
    - Added support for non-standard PO include directives (# $include "file.po") with
      recursive parsing, relative path handling, and duplicate suppression.
    - Added max_recurse attribute with circular-include detection.
    - Added include attribute (enabled by default).
    - Added as_string() method to serialize PO data to a string.
    - Updated parse() to support include and recursion limits.
    - Updated documentation accordingly in Text::PO.
    - Added a POD documentation for Text::PO::String
    - Improved the documentation for all modules.
    - Made Text::PO::Gettext thread-safe
    - Improved the CLI too po.pl, and added options --pp, --include, --max-recurse, --add-include, --before, and --after
    - Improved read and write method of Text::PO::MO

v0.8.1 2025-11-27T11:01:10+0900
    - Correcting msgctxt format in Text::PO::Element
    - Correcting setLocale in the companion JavaScript library gettext.js

v0.8.0 2025-10-08T09:00:25+0900
    - Improved the documentation for Text::PO and Text::PO::Element

v0.7.3 2024-12-22T19:12:30+0900
    - Improved gettext.js, adding promise polyfill and better handling of JSON data loading

v0.7.2 2024-12-07T17:53:35+0900
    - Minor correction in writing to po file
    - Added overloading and msgid_as_text and msgstr_as_text
    - Implement Promise polyfill for the JavaScript gettext library

v0.7.1 2024-09-05T22:52:38+0900
    - Updated dependencies

v0.7.0 2023-12-10T17:42:59+0900
    - Minor improvement when parsing a GNU PO file with dash comments found alone
    - Code improvement for speed

v0.6.4 2023-10-31T13:55:56+0900
    - Changing objects default value from empty string to undef

v0.6.3 2023-10-23T12:06:45+0900
    - Improved documentation for Text::PO::Element

v0.6.2 2023-10-15T16:24:13+0900
    - Minor correction of a bug due to a missing JavaScript function in scripts/gettext.js

v0.6.1 2023-06-14T19:46:54+0900
    - Correcting minor bug due to lack of precision in Text::PO::Element

v0.6.0 2023-04-14T21:28:01+0900
    - Added JavaScript function fetchLocalen() in share/gettext.js

v0.5.0 2023-01-04T19:55:54+0900
    - Changed gettext.js class GettextString property 'lang' to 'locale'
    - Implemented the class Text::PO::String containing the localised string and its locale property returned by Text::PO::Gettext methods

v0.4.1 2022-12-30T20:56:12+0900
    - Implemented a minor improvement in gettext.js to stringify msgids that are objects.

v0.4.0 2022-12-30T20:08:59+0900
    - Improved the gettext.js JavaScript library to have gettext() and other methods return a GettextString object containing the "lang" property. This is useful to know the actual language of the string returned. It inherits from String object class and stringifies automatically.
    - Updated POD documentation for gettext.js

v0.3.0 2022-12-29T22:53:32+0900
    - Improved the exists() method in Text::PO to take an optional hash or hash reference of parameters.

v0.2.4 2022-12-09T20:07:10+0900
    - Improved documentation for scripts/po.pl

v0.2.3 2022-07-11T00:01:25+0900
    - Trapped lack of local time zone support.

v0.2.2 2022-07-08T08:19:53+0900
    - More test units correction.

v0.2.1 2022-07-06T15:41:53+0900
    - Corrected error in test unit.

v0.2.0 2022-07-06T06:25:56+0900
    - Made the code more strict and cleaned it a bit.
    - Removed the use of INIT blocks.

v0.1.8 2022-07-05T13:46:04+0900
    - Corrected current_lang() test in test units and improved its method in Text::PO

v0.1.7 2022-07-04T15:17:16+0900
    - Added alias gettextf to getTextf

v0.1.6 2021-08-03T11:58:28+0900
    - Corrected test units

v0.1.5 2021-08-02T09:46:24+0900
    - Corrected test units

v0.1.4 2021-07-31T06:22:04+0900
    - Improved parsing of po files when there are leading blank lines to be ignored

v0.1.3 2021-07-30T18:36:27+0900
    - Added methods getDaysLong, getDaysShort, getMonthsLong, getMonthsShort, getNumericDict, getNumericPosixDIct to Text::PO::Gettext

v0.1.2 2021-07-28T15:18:39+0900
    - Corrected unnecessary module call

v0.1.1 2021-07-27T17:05:57+0900
    - Corrected test unit

v0.1.0 2021-07-24T17:17:08+0900
    - Initial release version
