Revision history for Perl module Locale::Unicode::Data

v1.9.0 2026-07-15T07:46:50+0900
    - Added support for Person Name Formatting - CLDR UTS #35 Part 8
    - Added four new SQLite tables covering person name formatting data extracted from
      main/*.xml/ldml/personNames:
      - person_name_formats: name format patterns keyed by locale, order (givenFirst,
        surnameFirst, sorting), length (long, medium, short), usage (referring,
        addressing, monogram), formality (formal, informal), and an optional 'alt'
        discriminator for locales that supply two patterns for the same context.
      - person_name_initial_patterns: locale-specific patterns for rendering name
        initials (types 'initial' and 'initialSequence').
      - person_name_order_locales: per-display-locale ordering rules recording whether
        names from a given source locale should be rendered givenFirst or surnameFirst.
        This is semantically distinct from the existing person_name_defaults table,
        which records the global supplemental default.
      - person_name_samples: sample name fields (nativeG, nativeGS, nativeGGS,
        nativeFull, foreignG, foreignGS, foreignGGS, foreignFull) used by the CLDR
        Survey Tool. Not intended for use as UI placeholders.
    - Stored three additional per-locale properties in the locales_info table:
      - person_name_native_space: space replacement for native names (e.g. empty string
        for Japanese, where name parts are written without any separator).
      - person_name_foreign_space: space replacement for foreign names (e.g. '・'
        U+30FB for Japanese, '·' U+00B7 for Chinese).
      - person_name_default_formality and person_name_default_length: locale-level
        parameter defaults from parameterDefault elements (e.g. formality=informal and
        length=medium for English).
    - Added eight new accessor methods corresponding to the new tables:
      person_name_format, person_name_formats, person_name_initial_pattern,
      person_name_initial_patterns, person_name_order_locale,
      person_name_order_locales, person_name_sample, person_name_samples.
    - Added two higher-level helper methods implementing key steps of the CLDR
      person name formatting algorithm (UTS #35 Part 8):
      - person_name_derive_order: derives givenFirst or surnameFirst for a
        (formatting_locale, name_locale) pair by consulting
        person_name_order_locales and falling back to 'und'.
      - person_name_space_replacement: returns the correct space replacement string for
        a (formatting_locale, name_locale) pair, applying the CLDR native/foreign
        distinction and the CJK equivalence rule ({ja, zh, yue}).
    - Updated create_database.pl to extract personNames data from all main/*.xml files,
      including proper resolution of <alias> elements via the existing resolve_alias()
      function (currently needed for root.xml, which provides the 'und' locale fallback
      patterns via intra-document XPath references rather than inline namePattern elements).
    - Added t/06.person_names.t: test suite covering all new methods, the locales_info
      person name properties, person_name_derive_order, and person_name_space_replacement
      (including the CJK group matching rule).

v1.8.6 2026-06-09T21:41:51+0900
    - Test-only maintenance release; no changes to the bundled CLDR data.
    - Reduced the default CPAN Testers workload in t/01.locale-data.t by making the most
      expensive unbounded CLDR scans author-only.
      Methods called without arguments that return every row of a CLDR table are now
      bypassed in smoke environments. On old hardware such as FreeBSD 10.1
      (vintage 2014) these exhaustive scans can take too much time an cause a SIGKILL.
    - Kept the exhaustive locale-data checks available under AUTHOR_TESTING for release
      validation.
    - Increased SQLite's per-connection page cache to 64 MiB for the bundled CLDR
      database, reducing repeated disk I/O during large lookup batches and exhaustive
      test runs.
    - Added diagnostic handling when SQLite PRAGMA setup fails, without making cache
      tuning fatal.

v1.8.5 2026-06-07T14:38:10+0900
    - Fixed a segmentation fault (SIGSEGV) on teardown under OpenBSD, and on any
      other platform whose memory allocator is strict about use-after-free. The
      END block now finalises the cached prepared statement handles, and then
      disconnects the cached database handles, in a deterministic order before
      Perl global destruction begins.
    - Previously the END block only called finish() on the statement handles
      without releasing them, so during global destruction a statement handle
      could be finalised after its parent SQLite connection had already been
      closed. On OpenBSD this use-after-free aborts the process: all subtests
      passed, then the test file dumped core during teardown.

v1.8.4 2026-06-07T07:20:16+0900
    - Fixed SQLite handle caching under ithreads. Database handles are now cached
      properly per thread.

v1.8.3 2026-04-23T21:36:14+0900
    - Correcting tests when running under non-threaded perl

v1.8.2 2026-04-23T18:43:55+0900
    [Thread Safety]
    - The package-level database handle cache ($DBH) and prepared statement cache
      ($STHS) are now keyed by thread ID (or PID when not running under threads).
      This prevents DBD::SQLite's "handle owned by thread X not current thread Y"
      errors when multiple threads perform CLDR lookups concurrently.
    - Added t/05.threads.t: thread safety test suite covering concurrent instantiation
      and concurrent calls to locale(), territory(), language(), plural_rule(), and
      lookups via a shared object across multiple threads.

v1.8.1 2026-04-16T15:08:09+0900
    - Correcting bad unit tests

v1.8.0 2026-03-19T17:44:56+0900
    - Release v1.8.0 for for CLDR 48.2

v1.7.0 2026-03-01T17:26:38+0900
    - Release v1.7.0 for CLDR 48.1
    - Apply patch to CLDR 48 supplemental/supplementalData.xml at xpath
      '//references/reference[@type="R1227"]' (fix https:// typo, CLDR-19101)

v1.6.0 2025-10-30T16:40:34+0900
    - Release v1.6.0 for CLDR 48
    - Apply patch to CLDR 48 supplemental/supplementalData.xml at xpath
      '//references/reference[@type="R1227"]' (fix https:// typo, CLDR-19101)

v1.5.0 2025-10-09T03:11:35+0900
    - Corrected methods plural_range, plural_ranges, plural_rule, and plural_rules
      to enable decoding of SQL array in 'aliases'
    - Added the method plural_forms to return a Gettext Plural-Forms string based on
      a given locale.
    - Update dependency from Want to Wanted

v1.4.0 2025-03-21T12:14:09+0900
    - Release for Unicode CLDR version 47
      See CLDR release notes for details: <https://cldr.unicode.org/downloads/cldr-47>

v1.3.2 2025-01-05T11:58:23+0900
    - Removed the INIT block not working well under modperl

v1.3.1 2025-01-04T08:15:48+0900
    - Removing allow_tags from JSON instantiation and some debugging tool in unit tests.
      Gitlab issue #2 and #3 reported by Slaven Rezić

v1.3.0 2025-01-03T22:52:22+0900
    - Added table time_relative_l10n to handle relative time
    - Added methods time_relative_l10n and time_relatives_l10n
    - Small correction to the method make_inheritance_tree() to ensure it build the
      inheritance tree using the locale 'base' information only.
    - Added tables plural_rules and plural_ranges
    - Added methods plural_rule, plural_rules, plural_range, plural_ranges, and
      plural_count
    - Correcting the method make_inheritance_tree to ensure language ID and territory
      combination is part of the tree.

v1.2.0 2024-12-20T06:27:46+0900
    - Release for updated Unicode data release version 46.1
      See CLDR release notes for details: <https://cldr.unicode.org/downloads/cldr-46>

v1.1.0 2024-11-09T11:45:17+0900
    - Release for updated Unicode data release version 46.0
    - Changed minimum perl required version from v5.10 to v5.10.1

v1.0.4 2024-10-03T06:34:57+0900
    - Added table date_terms to capture missing field display_name in
      main/*.xml/ldml/dates/fields/field[@type]/displayName
    - Updated the create_database.pl script to add the new table date_terms
    - Added 2 methods: date_term and date_terms
    - Updated the documentation to reflect the new table and methods

v1.0.3 2024-10-02T07:07:17+0900
    - Improved handling of UTC data for the timezones table in the script
      create_database.pl
    - Updated the SQL check constraint for the tables timezones, aliases, bcp47_values,
      locales_l10n, scripts_l10n, territories_l10n, variants_l10n,
      calendar_datetime_formats, and time_formats

v1.0.2 2024-09-16T18:20:54+0900
    - Removed test dependency
    - Updated method calendars to allow search by 'calendar'
    - Added missing 'calendars' field as containing array for methods territory() and
      territories()

v1.0.1 2024-09-09T18:22:29+0900
    - Corrected bug in the timezones_cities_extended view
    - Added column 'collations' in table 'locales' to contain the possible collations
      for a locale
    - Corrected minor oversight when loading locale default numbering systems into the
      database

v1.0.0 2024-09-05T15:03:16+0900
    - Added column is_primary to table timezones and associated documentation
    - Enabled array field search with the advanced search option 'has'
    - Corrected a bug in setting the absolute file path to the SQLite database on Windows
    - Corrected default value for column 'time_allowed' in table time_formats
    - Added table 'timezones_cities_supplemental' and view 'timezones_cities_extended'
    - Added method 'extend_timezones_cities'
    - Updated the 'create_database.pl' script to allow the addition of time zones
      cities extended data from a JSON file
    - Updated the documentation for the 'create_database.pl' script
    - Updated the documentation for Locale::Unicode::Data

v0.2.0 2024-08-18T12:12:26+0900
    - Added more data from CLDR with 5 new tables: metazones, timezones_city,
      timezones_formats, timezones_names and metazones_names, and their method to
      support the 'v' and 'V' formatting pattern
    - Improved the documentation
    - Corrected some bugs in the database creation perl script.
    - Corrected timezone region in table timezones when timezone is GMT*
    - Made the database file path global variable absolute
    - Corrected an ISA check in _dbh
    - Added method 'timezone_canonical'
    - Added table locale_number_systems, method locale_number_system and
      locale_number_systems and their documentation
    - Added the 'fatal' object option to force exceptions to be fatal
    - Changed the database handler to be a global re-usable object
    - Improved statements cache mechanism

v0.1.1 2024-08-03T13:40:30+0900
    - Minor unit test correction for perl compiled with uselongdouble (NetBSD?). GitLab #1

v0.1.0 2024-08-02T07:39:07+0900
    - Initial release
