AmberDB
view release on metacpan or search on metacpan
lib/AmberDB/Locale/Lang/gb.pm view on Meta::CPAN
package AmberDB::Locale::Lang::gb;
use 5.016;
use warnings;
use utf8;
our $VERSION = '5.24.0';
my $CREATED = '2026-09-03';
# -------------------------------------------------------
# Global Base (gb) Locale Data for AmberDB::Locale.
#
# Pure data module â no logic, no methods other than data().
#
# Design Principles for Global Base (gb):
# 1. Universal Multilingual Support: Designed for international,
# cross-border datasets combining English, Turkish, German,
# French, Spanish, Italian, Scandinavian, and Slavic-Latin text.
# 2. Comprehensive Alphabet: alphabet_chars includes all European,
# Nordic, and Turkish extended Latin letters so no valid characters
# are stripped during text sanitization.
# 3. Permissive Search Regex: regex_map expands characters across their
# accented and unaccented forms (e.g. searching 'cafe' matches 'café',
# 'munchen' matches 'münchen', 'seker' matches 'Åeker').
# 4. Canonical Accent Folding: accent_map flattens accented letters
# to base Latin forms for high-recall inverted search indexing (.src).
# 5. Lossless ASCII Transliteration: ascii_map cleanly converts
# non-decomposable Unicode ligatures (Ã->ss, æ->ae, Å->oe, ø->o,
# ı->i, Å->l, ð->d, þ->th, É->e) for URL slugs and ASCII IDs.
# 6. International Formatting: Default numbers, dates, and currency
# follow ISO and international English conventions (USD/cent, . decimal).
# -------------------------------------------------------
sub data {
return {
# ---------------------------------------------------------
# Casing special-cases
# uc_map: applied BEFORE Perl's uc()
# lc_map: applied BEFORE Perl's lc()
# Standard Unicode casing handles almost all Latin chars.
# Turkish dotted capital İ -> i is preserved during lc.
# ---------------------------------------------------------
uc_map => {},
lc_map => {
"\x{130}" => 'i', # Turkish dotted capital İ -> i
},
# ---------------------------------------------------------
# Case-insensitive & accent-tolerant search regex character map
# Maps both base and accented characters to a regex character class
# covering all regional variations.
# ---------------------------------------------------------
regex_map => {
# A variations: a, á, à , â, ä, ã, Ã¥, Ä, æ
'a' => '[aA\x{E1}\x{C1}\x{E0}\x{C0}\x{E2}\x{C2}\x{E4}\x{C4}\x{E3}\x{C3}\x{E5}\x{C5}\x{101}\x{100}\x{E6}\x{C6}]',
'A' => '[aA\x{E1}\x{C1}\x{E0}\x{C0}\x{E2}\x{C2}\x{E4}\x{C4}\x{E3}\x{C3}\x{E5}\x{C5}\x{101}\x{100}\x{E6}\x{C6}]',
# C variations: c, ç, Ä, Ä
'c' => '[cC\x{E7}\x{C7}\x{107}\x{106}\x{10D}\x{10C}]',
'C' => '[cC\x{E7}\x{C7}\x{107}\x{106}\x{10D}\x{10C}]',
"\x{E7}" => '[cC\x{E7}\x{C7}\x{107}\x{106}\x{10D}\x{10C}]', # ç
"\x{C7}" => '[cC\x{E7}\x{C7}\x{107}\x{106}\x{10D}\x{10C}]', # Ã
# D variations: d, ð, Ä
'd' => '[dD\x{F0}\x{D0}\x{111}\x{110}]',
'D' => '[dD\x{F0}\x{D0}\x{111}\x{110}]',
# E variations: e, é, è, ê, ë, Ä, Ä, Ä, É
'e' => '[eE\x{E9}\x{C9}\x{E8}\x{C8}\x{EA}\x{CA}\x{EB}\x{CB}\x{113}\x{112}\x{117}\x{116}\x{119}\x{118}\x{259}\x{18F}]',
'E' => '[eE\x{E9}\x{C9}\x{E8}\x{C8}\x{EA}\x{CA}\x{EB}\x{CB}\x{113}\x{112}\x{117}\x{116}\x{119}\x{118}\x{259}\x{18F}]',
# G variations: g, Ä
'g' => '[gG\x{11F}\x{11E}]',
'G' => '[gG\x{11F}\x{11E}]',
"\x{11F}" => '[gG\x{11F}\x{11E}]', # Ä
"\x{11E}" => '[gG\x{11F}\x{11E}]', # Ä
# I variations: i, I, ı, İ, î, ï, Ã, ì, Ä«
'i' => '[iI\x{131}I\x{130}i\x{EE}\x{CE}\x{EF}\x{CF}\x{ED}\x{CD}\x{EC}\x{CC}\x{12B}\x{12A}]',
'I' => '[iI\x{131}I\x{130}i\x{EE}\x{CE}\x{EF}\x{CF}\x{ED}\x{CD}\x{EC}\x{CC}\x{12B}\x{12A}]',
"\x{131}" => '[iI\x{131}I\x{130}i\x{EE}\x{CE}\x{EF}\x{CF}\x{ED}\x{CD}\x{EC}\x{CC}\x{12B}\x{12A}]', # ı
"\x{130}" => '[iI\x{131}I\x{130}i\x{EE}\x{CE}\x{EF}\x{CF}\x{ED}\x{CD}\x{EC}\x{CC}\x{12B}\x{12A}]', # İ
# L variations: l, Å
'l' => '[lL\x{142}\x{141}]',
'L' => '[lL\x{142}\x{141}]',
( run in 0.450 second using v1.01-cache-2.11-cpan-aadc1410aed )