diff -Nru libkylin-chkname-1.0.10kylin3uk1/debian/changelog libkylin-chkname-1.0.10kylin3uk1/debian/changelog
--- libkylin-chkname-1.0.10kylin3uk1/debian/changelog	2022-11-16 09:53:32.000000000 +0800
+++ libkylin-chkname-1.0.10kylin3uk1/debian/changelog	2025-03-18 15:16:51.000000000 +0800
@@ -1,3 +1,10 @@
+libkylin-chkname (1.0.10kylin3uk1-0k2) nile; urgency=medium
+
+  * i18n: 维吾尔,哈萨克,柯尔克,藏文,蒙古文,繁体中文
+    #I9KEKB, #IAP65C
+
+ -- mengyuan <mengyuan@kylinos.cn>  Tue, 18 Mar 2025 15:16:51 +0800
+
 libkylin-chkname (1.0.10kylin3uk1-0k1) jammy; urgency=medium
 
   * 修复本地化相关问题
diff -Nru libkylin-chkname-1.0.10kylin3uk1/debian/libkylin-chkname1.install libkylin-chkname-1.0.10kylin3uk1/debian/libkylin-chkname1.install
--- libkylin-chkname-1.0.10kylin3uk1/debian/libkylin-chkname1.install	2022-11-16 09:53:32.000000000 +0800
+++ libkylin-chkname-1.0.10kylin3uk1/debian/libkylin-chkname1.install	2025-03-18 15:16:51.000000000 +0800
@@ -1,3 +1,3 @@
-po/kylin-chkname.mo usr/share/locale/zh_CN/LC_MESSAGES/
+usr/share/locale
 reserved-names usr/share/kylin-chkname/
 usr/lib/*/lib*.so.*
diff -Nru libkylin-chkname-1.0.10kylin3uk1/debian/patches/0001-fix-compile-errors.patch libkylin-chkname-1.0.10kylin3uk1/debian/patches/0001-fix-compile-errors.patch
--- libkylin-chkname-1.0.10kylin3uk1/debian/patches/0001-fix-compile-errors.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkylin-chkname-1.0.10kylin3uk1/debian/patches/0001-fix-compile-errors.patch	2025-03-18 15:16:51.000000000 +0800
@@ -0,0 +1,2270 @@
+From: mengyuan <mengyuan@kylinos.cn>
+Date: Tue, 18 Mar 2025 15:54:01 +0800
+Subject: fix compile errors
+
+Signed-off-by: mengyuan <mengyuan@kylinos.cn>
+---
+ ABOUT-NLS              |   1 +
+ ChangeLog              |   7 +
+ Makefile.am            |   6 +
+ Makefile.in            |   2 +-
+ config.rpath           | 684 +++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac           |   3 +-
+ po/ChangeLog           |  12 +
+ po/LINGUAS             |   7 +
+ po/Makefile.in.in      | 510 ++++++++++++++++++++++++++++++++++++
+ po/Makevars            |  81 ++++++
+ po/POTFILES.in         |   2 +
+ po/Rules-quot          |  62 +++++
+ po/bo_CN.gmo           | Bin 0 -> 2729 bytes
+ po/bo_CN.po            |  62 +++++
+ po/boldquot.sed        |  10 +
+ po/en@boldquot.header  |  25 ++
+ po/en@quot.header      |  22 ++
+ po/insert-header.sin   |  28 ++
+ po/kk.gmo              | Bin 0 -> 1771 bytes
+ po/kk.po               |  58 +++++
+ po/ky.gmo              | Bin 0 -> 1754 bytes
+ po/ky.po               |  59 +++++
+ po/mn.gmo              | Bin 0 -> 2834 bytes
+ po/mn.po               |  64 +++++
+ po/quot.sed            |   6 +
+ po/remove-potcdate.sin |  25 ++
+ po/ug.gmo              | Bin 0 -> 1754 bytes
+ po/ug.po               |  59 +++++
+ po/zh_CN.gmo           | Bin 0 -> 1286 bytes
+ po/zh_CN.po            |  58 +++++
+ po/zh_HK.gmo           | Bin 0 -> 1290 bytes
+ po/zh_HK.po            |  51 ++++
+ 32 files changed, 1902 insertions(+), 2 deletions(-)
+ create mode 100644 ABOUT-NLS
+ create mode 100755 config.rpath
+ create mode 100644 po/ChangeLog
+ create mode 100644 po/LINGUAS
+ create mode 100644 po/Makefile.in.in
+ create mode 100644 po/Makevars
+ create mode 100644 po/POTFILES.in
+ create mode 100644 po/Rules-quot
+ create mode 100644 po/bo_CN.gmo
+ create mode 100644 po/bo_CN.po
+ create mode 100644 po/boldquot.sed
+ create mode 100644 po/en@boldquot.header
+ create mode 100644 po/en@quot.header
+ create mode 100644 po/insert-header.sin
+ create mode 100644 po/kk.gmo
+ create mode 100644 po/kk.po
+ create mode 100644 po/ky.gmo
+ create mode 100644 po/ky.po
+ create mode 100644 po/mn.gmo
+ create mode 100644 po/mn.po
+ create mode 100644 po/quot.sed
+ create mode 100644 po/remove-potcdate.sin
+ create mode 100644 po/ug.gmo
+ create mode 100644 po/ug.po
+ create mode 100644 po/zh_CN.gmo
+ create mode 100644 po/zh_CN.po
+ create mode 100644 po/zh_HK.gmo
+ create mode 100644 po/zh_HK.po
+
+diff --git a/ABOUT-NLS b/ABOUT-NLS
+new file mode 100644
+index 0000000..0a9d56d
+--- /dev/null
++++ b/ABOUT-NLS
+@@ -0,0 +1 @@
++<https://www.gnu.org/software/gettext/manual/html_node/Users.html>
+diff --git a/ChangeLog b/ChangeLog
+index e69de29..2298948 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -0,0 +1,7 @@
++2025-03-18  gettextize  <bug-gnu-gettext@gnu.org>
++
++	* Makefile.am (SUBDIRS): New variable.
++	(ACLOCAL_AMFLAGS): New variable.
++	(EXTRA_DIST): New variable.
++	* configure.ac (AC_OUTPUT): Add po/Makefile.in.
++
+diff --git a/Makefile.am b/Makefile.am
+index d5f4d6b..01e29bc 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2,3 +2,9 @@ lib_LTLIBRARIES=libkylin_chkname.la
+ libkylin_chkname_la_SOURCES=kylin-chkname.c
+ 
+ include_HEADERS=kylin-chkname.h
++
++SUBDIRS = po
++
++ACLOCAL_AMFLAGS = -I m4
++
++EXTRA_DIST = m4/ChangeLog
+diff --git a/Makefile.in b/Makefile.in
+index f6d9c0e..6b24cce 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -378,7 +378,7 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
+ $(top_srcdir)/configure:  $(am__configure_deps)
+ 	$(am__cd) $(srcdir) && $(AUTOCONF)
+ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++	$(am__cd) $(srcdir) && $(ACLOCAL) -I m4 $(ACLOCAL_AMFLAGS)
+ $(am__aclocal_m4_deps):
+ 
+ config.h: stamp-h1
+diff --git a/config.rpath b/config.rpath
+new file mode 100755
+index 0000000..24be79c
+--- /dev/null
++++ b/config.rpath
+@@ -0,0 +1,684 @@
++#! /bin/sh
++# Output a system dependent set of variables, describing how to set the
++# run time search path of shared libraries in an executable.
++#
++#   Copyright 1996-2020 Free Software Foundation, Inc.
++#   Taken from GNU libtool, 2001
++#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
++#
++#   This file is free software; the Free Software Foundation gives
++#   unlimited permission to copy and/or distribute it, with or without
++#   modifications, as long as this notice is preserved.
++#
++# The first argument passed to this file is the canonical host specification,
++#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
++# or
++#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
++# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
++# should be set by the caller.
++#
++# The set of defined variables is at the end of this script.
++
++# Known limitations:
++# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
++#   than 256 bytes, otherwise the compiler driver will dump core. The only
++#   known workaround is to choose shorter directory names for the build
++#   directory and/or the installation directory.
++
++# All known linkers require a '.a' archive for static linking (except MSVC,
++# which needs '.lib').
++libext=a
++shrext=.so
++
++host="$1"
++host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
++host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
++host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
++
++# Code taken from libtool.m4's _LT_CC_BASENAME.
++
++for cc_temp in $CC""; do
++  case $cc_temp in
++    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
++    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
++    \-*) ;;
++    *) break;;
++  esac
++done
++cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
++
++# Code taken from libtool.m4's _LT_COMPILER_PIC.
++
++wl=
++if test "$GCC" = yes; then
++  wl='-Wl,'
++else
++  case "$host_os" in
++    aix*)
++      wl='-Wl,'
++      ;;
++    mingw* | cygwin* | pw32* | os2* | cegcc*)
++      ;;
++    hpux9* | hpux10* | hpux11*)
++      wl='-Wl,'
++      ;;
++    irix5* | irix6* | nonstopux*)
++      wl='-Wl,'
++      ;;
++    linux* | k*bsd*-gnu | kopensolaris*-gnu)
++      case $cc_basename in
++        ecc*)
++          wl='-Wl,'
++          ;;
++        icc* | ifort*)
++          wl='-Wl,'
++          ;;
++        lf95*)
++          wl='-Wl,'
++          ;;
++        nagfor*)
++          wl='-Wl,-Wl,,'
++          ;;
++        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
++          wl='-Wl,'
++          ;;
++        ccc*)
++          wl='-Wl,'
++          ;;
++        xl* | bgxl* | bgf* | mpixl*)
++          wl='-Wl,'
++          ;;
++        como)
++          wl='-lopt='
++          ;;
++        *)
++          case `$CC -V 2>&1 | sed 5q` in
++            *Sun\ F* | *Sun*Fortran*)
++              wl=
++              ;;
++            *Sun\ C*)
++              wl='-Wl,'
++              ;;
++          esac
++          ;;
++      esac
++      ;;
++    newsos6)
++      ;;
++    *nto* | *qnx*)
++      ;;
++    osf3* | osf4* | osf5*)
++      wl='-Wl,'
++      ;;
++    rdos*)
++      ;;
++    solaris*)
++      case $cc_basename in
++        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
++          wl='-Qoption ld '
++          ;;
++        *)
++          wl='-Wl,'
++          ;;
++      esac
++      ;;
++    sunos4*)
++      wl='-Qoption ld '
++      ;;
++    sysv4 | sysv4.2uw2* | sysv4.3*)
++      wl='-Wl,'
++      ;;
++    sysv4*MP*)
++      ;;
++    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
++      wl='-Wl,'
++      ;;
++    unicos*)
++      wl='-Wl,'
++      ;;
++    uts4*)
++      ;;
++  esac
++fi
++
++# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
++
++hardcode_libdir_flag_spec=
++hardcode_libdir_separator=
++hardcode_direct=no
++hardcode_minus_L=no
++
++case "$host_os" in
++  cygwin* | mingw* | pw32* | cegcc*)
++    # FIXME: the MSVC++ port hasn't been tested in a loooong time
++    # When not using gcc, we currently assume that we are using
++    # Microsoft Visual C++.
++    if test "$GCC" != yes; then
++      with_gnu_ld=no
++    fi
++    ;;
++  interix*)
++    # we just hope/assume this is gcc and not c89 (= MSVC++)
++    with_gnu_ld=yes
++    ;;
++  openbsd*)
++    with_gnu_ld=no
++    ;;
++esac
++
++ld_shlibs=yes
++if test "$with_gnu_ld" = yes; then
++  # Set some defaults for GNU ld with shared library support. These
++  # are reset later if shared libraries are not supported. Putting them
++  # here allows them to be overridden if necessary.
++  # Unlike libtool, we use -rpath here, not --rpath, since the documented
++  # option of GNU ld is called -rpath, not --rpath.
++  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++  case "$host_os" in
++    aix[3-9]*)
++      # On AIX/PPC, the GNU linker is very broken
++      if test "$host_cpu" != ia64; then
++        ld_shlibs=no
++      fi
++      ;;
++    amigaos*)
++      case "$host_cpu" in
++        powerpc)
++          ;;
++        m68k)
++          hardcode_libdir_flag_spec='-L$libdir'
++          hardcode_minus_L=yes
++          ;;
++      esac
++      ;;
++    beos*)
++      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    cygwin* | mingw* | pw32* | cegcc*)
++      # hardcode_libdir_flag_spec is actually meaningless, as there is
++      # no search path for DLLs.
++      hardcode_libdir_flag_spec='-L$libdir'
++      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    haiku*)
++      ;;
++    interix[3-9]*)
++      hardcode_direct=no
++      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++      ;;
++    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
++      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    netbsd*)
++      ;;
++    solaris*)
++      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
++        ld_shlibs=no
++      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
++      case `$LD -v 2>&1` in
++        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
++          ld_shlibs=no
++          ;;
++        *)
++          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
++            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
++          else
++            ld_shlibs=no
++          fi
++          ;;
++      esac
++      ;;
++    sunos4*)
++      hardcode_direct=yes
++      ;;
++    *)
++      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++  esac
++  if test "$ld_shlibs" = no; then
++    hardcode_libdir_flag_spec=
++  fi
++else
++  case "$host_os" in
++    aix3*)
++      # Note: this linker hardcodes the directories in LIBPATH if there
++      # are no directories specified by -L.
++      hardcode_minus_L=yes
++      if test "$GCC" = yes; then
++        # Neither direct hardcoding nor static linking is supported with a
++        # broken collect2.
++        hardcode_direct=unsupported
++      fi
++      ;;
++    aix[4-9]*)
++      if test "$host_cpu" = ia64; then
++        # On IA64, the linker does run time linking by default, so we don't
++        # have to do anything special.
++        aix_use_runtimelinking=no
++      else
++        aix_use_runtimelinking=no
++        # Test if we are trying to use run time linking or normal
++        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
++        # need to do runtime linking.
++        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
++          for ld_flag in $LDFLAGS; do
++            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
++              aix_use_runtimelinking=yes
++              break
++            fi
++          done
++          ;;
++        esac
++      fi
++      hardcode_direct=yes
++      hardcode_libdir_separator=':'
++      if test "$GCC" = yes; then
++        case $host_os in aix4.[012]|aix4.[012].*)
++          collect2name=`${CC} -print-prog-name=collect2`
++          if test -f "$collect2name" && \
++            strings "$collect2name" | grep resolve_lib_name >/dev/null
++          then
++            # We have reworked collect2
++            :
++          else
++            # We have old collect2
++            hardcode_direct=unsupported
++            hardcode_minus_L=yes
++            hardcode_libdir_flag_spec='-L$libdir'
++            hardcode_libdir_separator=
++          fi
++          ;;
++        esac
++      fi
++      # Begin _LT_AC_SYS_LIBPATH_AIX.
++      echo 'int main () { return 0; }' > conftest.c
++      ${CC} ${LDFLAGS} conftest.c -o conftest
++      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
++}'`
++      if test -z "$aix_libpath"; then
++        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
++}'`
++      fi
++      if test -z "$aix_libpath"; then
++        aix_libpath="/usr/lib:/lib"
++      fi
++      rm -f conftest.c conftest
++      # End _LT_AC_SYS_LIBPATH_AIX.
++      if test "$aix_use_runtimelinking" = yes; then
++        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
++      else
++        if test "$host_cpu" = ia64; then
++          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
++        else
++          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
++        fi
++      fi
++      ;;
++    amigaos*)
++      case "$host_cpu" in
++        powerpc)
++          ;;
++        m68k)
++          hardcode_libdir_flag_spec='-L$libdir'
++          hardcode_minus_L=yes
++          ;;
++      esac
++      ;;
++    bsdi[45]*)
++      ;;
++    cygwin* | mingw* | pw32* | cegcc*)
++      # When not using gcc, we currently assume that we are using
++      # Microsoft Visual C++.
++      # hardcode_libdir_flag_spec is actually meaningless, as there is
++      # no search path for DLLs.
++      hardcode_libdir_flag_spec=' '
++      libext=lib
++      ;;
++    darwin* | rhapsody*)
++      hardcode_direct=no
++      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
++        :
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    dgux*)
++      hardcode_libdir_flag_spec='-L$libdir'
++      ;;
++    freebsd2.[01]*)
++      hardcode_direct=yes
++      hardcode_minus_L=yes
++      ;;
++    freebsd* | dragonfly*)
++      hardcode_libdir_flag_spec='-R$libdir'
++      hardcode_direct=yes
++      ;;
++    hpux9*)
++      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++      hardcode_libdir_separator=:
++      hardcode_direct=yes
++      # hardcode_minus_L: Not really in the search PATH,
++      # but as the default location of the library.
++      hardcode_minus_L=yes
++      ;;
++    hpux10*)
++      if test "$with_gnu_ld" = no; then
++        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++        hardcode_libdir_separator=:
++        hardcode_direct=yes
++        # hardcode_minus_L: Not really in the search PATH,
++        # but as the default location of the library.
++        hardcode_minus_L=yes
++      fi
++      ;;
++    hpux11*)
++      if test "$with_gnu_ld" = no; then
++        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++        hardcode_libdir_separator=:
++        case $host_cpu in
++          hppa*64*|ia64*)
++            hardcode_direct=no
++            ;;
++          *)
++            hardcode_direct=yes
++            # hardcode_minus_L: Not really in the search PATH,
++            # but as the default location of the library.
++            hardcode_minus_L=yes
++            ;;
++        esac
++      fi
++      ;;
++    irix5* | irix6* | nonstopux*)
++      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++      hardcode_libdir_separator=:
++      ;;
++    netbsd*)
++      hardcode_libdir_flag_spec='-R$libdir'
++      hardcode_direct=yes
++      ;;
++    newsos6)
++      hardcode_direct=yes
++      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++      hardcode_libdir_separator=:
++      ;;
++    *nto* | *qnx*)
++      ;;
++    openbsd*)
++      if test -f /usr/libexec/ld.so; then
++        hardcode_direct=yes
++        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++        else
++          case "$host_os" in
++            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
++              hardcode_libdir_flag_spec='-R$libdir'
++              ;;
++            *)
++              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++              ;;
++          esac
++        fi
++      else
++        ld_shlibs=no
++      fi
++      ;;
++    os2*)
++      hardcode_libdir_flag_spec='-L$libdir'
++      hardcode_minus_L=yes
++      ;;
++    osf3*)
++      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++      hardcode_libdir_separator=:
++      ;;
++    osf4* | osf5*)
++      if test "$GCC" = yes; then
++        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++      else
++        # Both cc and cxx compiler support -rpath directly
++        hardcode_libdir_flag_spec='-rpath $libdir'
++      fi
++      hardcode_libdir_separator=:
++      ;;
++    solaris*)
++      hardcode_libdir_flag_spec='-R$libdir'
++      ;;
++    sunos4*)
++      hardcode_libdir_flag_spec='-L$libdir'
++      hardcode_direct=yes
++      hardcode_minus_L=yes
++      ;;
++    sysv4)
++      case $host_vendor in
++        sni)
++          hardcode_direct=yes # is this really true???
++          ;;
++        siemens)
++          hardcode_direct=no
++          ;;
++        motorola)
++          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
++          ;;
++      esac
++      ;;
++    sysv4.3*)
++      ;;
++    sysv4*MP*)
++      if test -d /usr/nec; then
++        ld_shlibs=yes
++      fi
++      ;;
++    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
++      ;;
++    sysv5* | sco3.2v5* | sco5v6*)
++      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
++      hardcode_libdir_separator=':'
++      ;;
++    uts4*)
++      hardcode_libdir_flag_spec='-L$libdir'
++      ;;
++    *)
++      ld_shlibs=no
++      ;;
++  esac
++fi
++
++# Check dynamic linker characteristics
++# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
++# Unlike libtool.m4, here we don't care about _all_ names of the library, but
++# only about the one the linker finds when passed -lNAME. This is the last
++# element of library_names_spec in libtool.m4, or possibly two of them if the
++# linker has special search rules.
++library_names_spec=      # the last element of library_names_spec in libtool.m4
++libname_spec='lib$name'
++case "$host_os" in
++  aix3*)
++    library_names_spec='$libname.a'
++    ;;
++  aix[4-9]*)
++    library_names_spec='$libname$shrext'
++    ;;
++  amigaos*)
++    case "$host_cpu" in
++      powerpc*)
++        library_names_spec='$libname$shrext' ;;
++      m68k)
++        library_names_spec='$libname.a' ;;
++    esac
++    ;;
++  beos*)
++    library_names_spec='$libname$shrext'
++    ;;
++  bsdi[45]*)
++    library_names_spec='$libname$shrext'
++    ;;
++  cygwin* | mingw* | pw32* | cegcc*)
++    shrext=.dll
++    library_names_spec='$libname.dll.a $libname.lib'
++    ;;
++  darwin* | rhapsody*)
++    shrext=.dylib
++    library_names_spec='$libname$shrext'
++    ;;
++  dgux*)
++    library_names_spec='$libname$shrext'
++    ;;
++  freebsd[23].*)
++    library_names_spec='$libname$shrext$versuffix'
++    ;;
++  freebsd* | dragonfly*)
++    library_names_spec='$libname$shrext'
++    ;;
++  gnu*)
++    library_names_spec='$libname$shrext'
++    ;;
++  haiku*)
++    library_names_spec='$libname$shrext'
++    ;;
++  hpux9* | hpux10* | hpux11*)
++    case $host_cpu in
++      ia64*)
++        shrext=.so
++        ;;
++      hppa*64*)
++        shrext=.sl
++        ;;
++      *)
++        shrext=.sl
++        ;;
++    esac
++    library_names_spec='$libname$shrext'
++    ;;
++  interix[3-9]*)
++    library_names_spec='$libname$shrext'
++    ;;
++  irix5* | irix6* | nonstopux*)
++    library_names_spec='$libname$shrext'
++    case "$host_os" in
++      irix5* | nonstopux*)
++        libsuff= shlibsuff=
++        ;;
++      *)
++        case $LD in
++          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
++          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
++          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
++          *) libsuff= shlibsuff= ;;
++        esac
++        ;;
++    esac
++    ;;
++  linux*oldld* | linux*aout* | linux*coff*)
++    ;;
++  linux* | k*bsd*-gnu | kopensolaris*-gnu)
++    library_names_spec='$libname$shrext'
++    ;;
++  knetbsd*-gnu)
++    library_names_spec='$libname$shrext'
++    ;;
++  netbsd*)
++    library_names_spec='$libname$shrext'
++    ;;
++  newsos6)
++    library_names_spec='$libname$shrext'
++    ;;
++  *nto* | *qnx*)
++    library_names_spec='$libname$shrext'
++    ;;
++  openbsd*)
++    library_names_spec='$libname$shrext$versuffix'
++    ;;
++  os2*)
++    libname_spec='$name'
++    shrext=.dll
++    library_names_spec='$libname.a'
++    ;;
++  osf3* | osf4* | osf5*)
++    library_names_spec='$libname$shrext'
++    ;;
++  rdos*)
++    ;;
++  solaris*)
++    library_names_spec='$libname$shrext'
++    ;;
++  sunos4*)
++    library_names_spec='$libname$shrext$versuffix'
++    ;;
++  sysv4 | sysv4.3*)
++    library_names_spec='$libname$shrext'
++    ;;
++  sysv4*MP*)
++    library_names_spec='$libname$shrext'
++    ;;
++  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
++    library_names_spec='$libname$shrext'
++    ;;
++  tpf*)
++    library_names_spec='$libname$shrext'
++    ;;
++  uts4*)
++    library_names_spec='$libname$shrext'
++    ;;
++esac
++
++sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
++escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
++shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
++escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
++escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
++escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
++
++LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
++
++# How to pass a linker flag through the compiler.
++wl="$escaped_wl"
++
++# Static library suffix (normally "a").
++libext="$libext"
++
++# Shared library suffix (normally "so").
++shlibext="$shlibext"
++
++# Format of library name prefix.
++libname_spec="$escaped_libname_spec"
++
++# Library names that the linker finds when passed -lNAME.
++library_names_spec="$escaped_library_names_spec"
++
++# Flag to hardcode \$libdir into a binary during linking.
++# This must work even if \$libdir does not exist.
++hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
++
++# Whether we need a single -rpath flag with a separated argument.
++hardcode_libdir_separator="$hardcode_libdir_separator"
++
++# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
++# resulting binary.
++hardcode_direct="$hardcode_direct"
++
++# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
++# resulting binary.
++hardcode_minus_L="$hardcode_minus_L"
++
++EOF
+diff --git a/configure.ac b/configure.ac
+index 47dedc1..735cbd4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -11,6 +11,7 @@ AC_PROG_CC
+ AC_PROG_LIBTOOL
+ 
+ # Checks for libraries.
++AM_GNU_GETTEXT([external])
+ 
+ # Checks for header files.
+ AC_CHECK_HEADERS([libintl.h string.h syslog.h])
+@@ -20,4 +21,4 @@ AC_CHECK_HEADERS([libintl.h string.h syslog.h])
+ # Checks for library functions.
+ AC_CHECK_FUNCS([strerror])
+ 
+-AC_OUTPUT([Makefile])
++AC_OUTPUT([Makefile po/Makefile.in])
+diff --git a/po/ChangeLog b/po/ChangeLog
+new file mode 100644
+index 0000000..56e0924
+--- /dev/null
++++ b/po/ChangeLog
+@@ -0,0 +1,12 @@
++2025-03-18  gettextize  <bug-gnu-gettext@gnu.org>
++
++	* Makefile.in.in: New file, from gettext-0.21.
++	* Rules-quot: New file, from gettext-0.21.
++	* boldquot.sed: New file, from gettext-0.21.
++	* en@boldquot.header: New file, from gettext-0.21.
++	* en@quot.header: New file, from gettext-0.21.
++	* insert-header.sin: New file, from gettext-0.21.
++	* quot.sed: New file, from gettext-0.21.
++	* remove-potcdate.sin: New file, from gettext-0.21.
++	* POTFILES.in: New file.
++
+diff --git a/po/LINGUAS b/po/LINGUAS
+new file mode 100644
+index 0000000..2f27eb4
+--- /dev/null
++++ b/po/LINGUAS
+@@ -0,0 +1,7 @@
++bo_CN
++kk
++ky
++mn
++ug
++zh_CN
++zh_HK
+diff --git a/po/Makefile.in.in b/po/Makefile.in.in
+new file mode 100644
+index 0000000..6b25f0d
+--- /dev/null
++++ b/po/Makefile.in.in
+@@ -0,0 +1,510 @@
++# Makefile for PO directory in any package using GNU gettext.
++# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
++# Copyright (C) 2000-2020 Free Software Foundation, Inc.
++#
++# Copying and distribution of this file, with or without modification,
++# are permitted in any medium without royalty provided the copyright
++# notice and this notice are preserved.  This file is offered as-is,
++# without any warranty.
++#
++# Origin: gettext-0.21
++GETTEXT_MACRO_VERSION = 0.20
++
++PACKAGE = @PACKAGE@
++VERSION = @VERSION@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++
++SED = @SED@
++SHELL = /bin/sh
++@SET_MAKE@
++
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
++VPATH = @srcdir@
++
++prefix = @prefix@
++exec_prefix = @exec_prefix@
++datarootdir = @datarootdir@
++datadir = @datadir@
++localedir = @localedir@
++gettextsrcdir = $(datadir)/gettext/po
++
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++
++# We use $(mkdir_p).
++# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
++# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
++# @install_sh@ does not start with $(SHELL), so we add it.
++# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
++# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
++# versions, $(mkinstalldirs) and $(install_sh) are unused.
++mkinstalldirs = $(SHELL) @install_sh@ -d
++install_sh = $(SHELL) @install_sh@
++MKDIR_P = @MKDIR_P@
++mkdir_p = @mkdir_p@
++
++# When building gettext-tools, we prefer to use the built programs
++# rather than installed programs.  However, we can't do that when we
++# are cross compiling.
++CROSS_COMPILING = @CROSS_COMPILING@
++
++GMSGFMT_ = @GMSGFMT@
++GMSGFMT_no = @GMSGFMT@
++GMSGFMT_yes = @GMSGFMT_015@
++GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
++XGETTEXT_ = @XGETTEXT@
++XGETTEXT_no = @XGETTEXT@
++XGETTEXT_yes = @XGETTEXT_015@
++XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
++MSGMERGE = @MSGMERGE@
++MSGMERGE_UPDATE = @MSGMERGE@ --update
++MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
++MSGINIT = msginit
++MSGCONV = msgconv
++MSGFILTER = msgfilter
++
++POFILES = @POFILES@
++GMOFILES = @GMOFILES@
++UPDATEPOFILES = @UPDATEPOFILES@
++DUMMYPOFILES = @DUMMYPOFILES@
++DISTFILES.common = Makefile.in.in remove-potcdate.sin \
++$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
++DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
++$(POFILES) $(GMOFILES) \
++$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
++
++POTFILES = \
++
++CATALOGS = @CATALOGS@
++
++POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
++POFILESDEPS_yes = $(POFILESDEPS_)
++POFILESDEPS_no =
++POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
++
++DISTFILESDEPS_ = update-po
++DISTFILESDEPS_yes = $(DISTFILESDEPS_)
++DISTFILESDEPS_no =
++DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
++
++# Makevars gets inserted here. (Don't remove this line!)
++
++all: all-@USE_NLS@
++
++
++.SUFFIXES:
++.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
++
++# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
++# The GNU Coding Standards say in
++# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
++#   "GNU distributions usually contain some files which are not source files
++#    ... . Since these files normally appear in the source directory, they
++#    should always appear in the source directory, not in the build directory.
++#    So Makefile rules to update them should put the updated files in the
++#    source directory."
++# Therefore we put these files in the source directory, not the build directory.
++
++# During .po -> .gmo conversion, take into account the most recent changes to
++# the .pot file. This eliminates the need to update the .po files when the
++# .pot file has changed, which would be troublesome if the .po files are put
++# under version control.
++$(GMOFILES): $(srcdir)/$(DOMAIN).pot
++.po.gmo:
++	@lang=`echo $* | sed -e 's,.*/,,'`; \
++	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++	echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
++	cd $(srcdir) && \
++	rm -f $${lang}.gmo && \
++	$(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
++	$(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
++	mv t-$${lang}.gmo $${lang}.gmo && \
++	rm -f $${lang}.1po
++
++.sin.sed:
++	sed -e '/^#/d' $< > t-$@
++	mv t-$@ $@
++
++
++all-yes: $(srcdir)/stamp-po
++all-no:
++
++# Ensure that the gettext macros and this Makefile.in.in are in sync.
++CHECK_MACRO_VERSION = \
++	test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
++	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
++	       exit 1; \
++	     }
++
++# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
++# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
++# we don't want to bother translators with empty POT files). We assume that
++# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
++# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
++
++# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
++# have been loosely updated. Its purpose is that when a developer or translator
++# checks out the package from a version control system, and the $(DOMAIN).pot
++# file is not under version control, "make" will update the $(DOMAIN).pot and
++# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
++# timestamp would not be necessary if updating the $(CATALOGS) would always
++# touch them; however, the rule for $(POFILES) has been designed to not touch
++# files that don't need to be changed.
++$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
++	@$(CHECK_MACRO_VERSION)
++	test ! -f $(srcdir)/$(DOMAIN).pot || \
++	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
++	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
++	  echo "touch $(srcdir)/stamp-po" && \
++	  echo timestamp > $(srcdir)/stamp-poT && \
++	  mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
++	}
++
++# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
++# otherwise packages like GCC can not be built if only parts of the source
++# have been downloaded.
++
++# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
++# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
++# The determination of whether the package xyz is a GNU one is based on the
++# heuristic whether some file in the top level directory mentions "GNU xyz".
++# If GNU 'find' is available, we avoid grepping through monster files.
++$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
++	package_gnu="$(PACKAGE_GNU)"; \
++	test -n "$$package_gnu" || { \
++	  if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
++	         LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
++	       else \
++	         LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
++	       fi; \
++	     } | grep -v 'libtool:' >/dev/null; then \
++	     package_gnu=yes; \
++	   else \
++	     package_gnu=no; \
++	   fi; \
++	}; \
++	if test "$$package_gnu" = "yes"; then \
++	  package_prefix='GNU '; \
++	else \
++	  package_prefix=''; \
++	fi; \
++	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
++	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
++	else \
++	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
++	fi; \
++	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
++	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
++	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
++	      --add-comments=TRANSLATORS: \
++	      --files-from=$(srcdir)/POTFILES.in \
++	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
++	      --msgid-bugs-address="$$msgid_bugs_address" \
++	      $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
++	    ;; \
++	  *) \
++	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
++	      --add-comments=TRANSLATORS: \
++	      --files-from=$(srcdir)/POTFILES.in \
++	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
++	      --package-name="$${package_prefix}@PACKAGE@" \
++	      --package-version='@VERSION@' \
++	      --msgid-bugs-address="$$msgid_bugs_address" \
++	      $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
++	    ;; \
++	esac
++	test ! -f $(DOMAIN).po || { \
++	  if test -f $(srcdir)/$(DOMAIN).pot-header; then \
++	    sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
++	    cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
++	    rm -f $(DOMAIN).1po \
++	    || exit 1; \
++	  fi; \
++	  if test -f $(srcdir)/$(DOMAIN).pot; then \
++	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
++	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
++	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
++	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
++	    else \
++	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
++	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
++	    fi; \
++	  else \
++	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
++	  fi; \
++	}
++
++# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
++# every "make" invocation, only create it when it is missing.
++# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
++$(srcdir)/$(DOMAIN).pot:
++	$(MAKE) $(DOMAIN).pot-update
++
++# This target rebuilds a PO file if $(DOMAIN).pot has changed.
++# Note that a PO file is not touched if it doesn't need to be changed.
++$(POFILES): $(POFILESDEPS)
++	@test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
++	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
++	if test -f "$(srcdir)/$${lang}.po"; then \
++	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
++	  cd $(srcdir) \
++	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
++	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
++	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
++	           0.1[6-7] | 0.1[6-7].*) \
++	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
++	           *) \
++	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
++	         esac; \
++	       }; \
++	else \
++	  $(MAKE) $${lang}.po-create; \
++	fi
++
++
++install: install-exec install-data
++install-exec:
++install-data: install-data-@USE_NLS@
++	if test "$(PACKAGE)" = "gettext-tools"; then \
++	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
++	  for file in $(DISTFILES.common) Makevars.template; do \
++	    $(INSTALL_DATA) $(srcdir)/$$file \
++			    $(DESTDIR)$(gettextsrcdir)/$$file; \
++	  done; \
++	  for file in Makevars; do \
++	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
++	  done; \
++	else \
++	  : ; \
++	fi
++install-data-no: all
++install-data-yes: all
++	@catalogs='$(CATALOGS)'; \
++	for cat in $$catalogs; do \
++	  cat=`basename $$cat`; \
++	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
++	  dir=$(localedir)/$$lang/LC_MESSAGES; \
++	  $(mkdir_p) $(DESTDIR)$$dir; \
++	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
++	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
++	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
++	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
++	    if test -n "$$lc"; then \
++	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
++	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
++	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
++	         for file in *; do \
++	           if test -f $$file; then \
++	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
++	           fi; \
++	         done); \
++	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++	      else \
++	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
++	          :; \
++	        else \
++	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	        fi; \
++	      fi; \
++	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
++	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
++	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
++	    fi; \
++	  done; \
++	done
++
++install-strip: install
++
++installdirs: installdirs-exec installdirs-data
++installdirs-exec:
++installdirs-data: installdirs-data-@USE_NLS@
++	if test "$(PACKAGE)" = "gettext-tools"; then \
++	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
++	else \
++	  : ; \
++	fi
++installdirs-data-no:
++installdirs-data-yes:
++	@catalogs='$(CATALOGS)'; \
++	for cat in $$catalogs; do \
++	  cat=`basename $$cat`; \
++	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
++	  dir=$(localedir)/$$lang/LC_MESSAGES; \
++	  $(mkdir_p) $(DESTDIR)$$dir; \
++	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
++	    if test -n "$$lc"; then \
++	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
++	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
++	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
++	         for file in *; do \
++	           if test -f $$file; then \
++	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
++	           fi; \
++	         done); \
++	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++	      else \
++	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
++	          :; \
++	        else \
++	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++	        fi; \
++	      fi; \
++	    fi; \
++	  done; \
++	done
++
++# Define this as empty until I found a useful application.
++installcheck:
++
++uninstall: uninstall-exec uninstall-data
++uninstall-exec:
++uninstall-data: uninstall-data-@USE_NLS@
++	if test "$(PACKAGE)" = "gettext-tools"; then \
++	  for file in $(DISTFILES.common) Makevars.template; do \
++	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
++	  done; \
++	else \
++	  : ; \
++	fi
++uninstall-data-no:
++uninstall-data-yes:
++	catalogs='$(CATALOGS)'; \
++	for cat in $$catalogs; do \
++	  cat=`basename $$cat`; \
++	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
++	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
++	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++	  done; \
++	done
++
++check: all
++
++info dvi ps pdf html tags TAGS ctags CTAGS ID:
++
++install-dvi install-ps install-pdf install-html:
++
++mostlyclean:
++	rm -f remove-potcdate.sed
++	rm -f $(srcdir)/stamp-poT
++	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
++	rm -fr *.o
++
++clean: mostlyclean
++
++distclean: clean
++	rm -f Makefile Makefile.in POTFILES
++
++maintainer-clean: distclean
++	@echo "This command is intended for maintainers to use;"
++	@echo "it deletes files that may require special tools to rebuild."
++	rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
++
++distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
++dist distdir:
++	test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
++	@$(MAKE) dist2
++# This is a separate target because 'update-po' must be executed before.
++dist2: $(srcdir)/stamp-po $(DISTFILES)
++	@dists="$(DISTFILES)"; \
++	if test "$(PACKAGE)" = "gettext-tools"; then \
++	  dists="$$dists Makevars.template"; \
++	fi; \
++	if test -f $(srcdir)/$(DOMAIN).pot; then \
++	  dists="$$dists $(DOMAIN).pot stamp-po"; \
++	else \
++	  case $(XGETTEXT) in \
++	    :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
++	    *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
++	  esac; \
++	fi; \
++	if test -f $(srcdir)/ChangeLog; then \
++	  dists="$$dists ChangeLog"; \
++	fi; \
++	for i in 0 1 2 3 4 5 6 7 8 9; do \
++	  if test -f $(srcdir)/ChangeLog.$$i; then \
++	    dists="$$dists ChangeLog.$$i"; \
++	  fi; \
++	done; \
++	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
++	for file in $$dists; do \
++	  if test -f $$file; then \
++	    cp -p $$file $(distdir) || exit 1; \
++	  else \
++	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
++	  fi; \
++	done
++
++update-po: Makefile
++	$(MAKE) $(DOMAIN).pot-update
++	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
++	$(MAKE) update-gmo
++
++# General rule for creating PO files.
++
++.nop.po-create:
++	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
++	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
++	exit 1
++
++# General rule for updating PO files.
++
++.nop.po-update:
++	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
++	if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
++	tmpdir=`pwd`; \
++	echo "$$lang:"; \
++	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
++	cd $(srcdir); \
++	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
++	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
++	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
++	       0.1[6-7] | 0.1[6-7].*) \
++	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
++	       *) \
++	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
++	     esac; \
++	   }; then \
++	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
++	    rm -f $$tmpdir/$$lang.new.po; \
++	  else \
++	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
++	      :; \
++	    else \
++	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
++	      exit 1; \
++	    fi; \
++	  fi; \
++	else \
++	  echo "msgmerge for $$lang.po failed!" 1>&2; \
++	  rm -f $$tmpdir/$$lang.new.po; \
++	fi
++
++$(DUMMYPOFILES):
++
++update-gmo: Makefile $(GMOFILES)
++	@:
++
++# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
++# because execution permission bits may not work on the current file system.
++# Use @SHELL@, which is the shell determined by autoconf for the use by its
++# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
++Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
++	cd $(top_builddir) \
++	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories
++
++force:
++
++# Tell versions [3.59,3.63) of GNU make not to export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+diff --git a/po/Makevars b/po/Makevars
+new file mode 100644
+index 0000000..9358730
+--- /dev/null
++++ b/po/Makevars
+@@ -0,0 +1,81 @@
++# Makefile variables for PO directory in any package using GNU gettext.
++#
++# Copyright (C) 2003-2019 Free Software Foundation, Inc.
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to use, copy, distribute, and modify it.
++
++# Usually the message domain is the same as the package name.
++DOMAIN = kylin-chkname
++
++# These two variables depend on the location of this directory.
++top_builddir = ..
++
++# These options get passed to xgettext.
++XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
++
++# This is the copyright holder that gets inserted into the header of the
++# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
++# package.  (Note that the msgstr strings, extracted from the package's
++# sources, belong to the copyright holder of the package.)  Translators are
++# expected to transfer the copyright for their translations to this person
++# or entity, or to disclaim their copyright.  The empty string stands for
++# the public domain; in this case the translators are expected to disclaim
++# their copyright.
++COPYRIGHT_HOLDER = KylinSoft Co., Ltd. [2025].All rights reserved.
++
++# This tells whether or not to prepend "GNU " prefix to the package
++# name that gets inserted into the header of the $(DOMAIN).pot file.
++# Possible values are "yes", "no", or empty.  If it is empty, try to
++# detect it automatically by scanning the files in $(top_srcdir) for
++# "GNU packagename" string.
++PACKAGE_GNU =
++
++# This is the email address or URL to which the translators shall report
++# bugs in the untranslated strings:
++# - Strings which are not entire sentences, see the maintainer guidelines
++#   in the GNU gettext documentation, section 'Preparing Strings'.
++# - Strings which use unclear terms or require additional context to be
++#   understood.
++# - Strings which make invalid assumptions about notation of date, time or
++#   money.
++# - Pluralisation problems.
++# - Incorrect English spelling.
++# - Incorrect formatting.
++# It can be your email address, or a mailing list address where translators
++# can write to without being subscribed, or the URL of a web page through
++# which the translators can contact you.
++MSGID_BUGS_ADDRESS =
++
++# This is the list of locale categories, beyond LC_MESSAGES, for which the
++# message catalogs shall be used.  It is usually empty.
++EXTRA_LOCALE_CATEGORIES =
++
++# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
++# context.  Possible values are "yes" and "no".  Set this to yes if the
++# package uses functions taking also a message context, like pgettext(), or
++# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
++USE_MSGCTXT = no
++
++# These options get passed to msgmerge.
++# Useful options are in particular:
++#   --previous            to keep previous msgids of translated messages,
++#   --quiet               to reduce the verbosity.
++MSGMERGE_OPTIONS =
++
++# These options get passed to msginit.
++# If you want to disable line wrapping when writing PO files, add
++# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
++# MSGINIT_OPTIONS.
++MSGINIT_OPTIONS =
++
++# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
++# has changed.  Possible values are "yes" and "no".  Set this to no if
++# the POT file is checked in the repository and the version control
++# program ignores timestamps.
++PO_DEPENDS_ON_POT = yes
++
++# This tells whether or not to forcibly update $(DOMAIN).pot and
++# regenerate PO files on "make dist".  Possible values are "yes" and
++# "no".  Set this to no if the POT file and PO files are maintained
++# externally.
++DIST_DEPENDS_ON_UPDATE_PO = yes
+diff --git a/po/POTFILES.in b/po/POTFILES.in
+new file mode 100644
+index 0000000..9c2527c
+--- /dev/null
++++ b/po/POTFILES.in
+@@ -0,0 +1,2 @@
++# List of source files which contain translatable strings.
++kylin-chkname.c
+diff --git a/po/Rules-quot b/po/Rules-quot
+new file mode 100644
+index 0000000..18c024b
+--- /dev/null
++++ b/po/Rules-quot
+@@ -0,0 +1,62 @@
++# Special Makefile rules for English message catalogs with quotation marks.
++#
++# Copyright (C) 2001-2017 Free Software Foundation, Inc.
++# This file, Rules-quot, and its auxiliary files (listed under
++# DISTFILES.common.extra1) are free software; the Free Software Foundation
++# gives unlimited permission to use, copy, distribute, and modify them.
++
++DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
++
++.SUFFIXES: .insert-header .po-update-en
++
++en@quot.po-create:
++	$(MAKE) en@quot.po-update
++en@boldquot.po-create:
++	$(MAKE) en@boldquot.po-update
++
++en@quot.po-update: en@quot.po-update-en
++en@boldquot.po-update: en@boldquot.po-update-en
++
++.insert-header.po-update-en:
++	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
++	if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
++	tmpdir=`pwd`; \
++	echo "$$lang:"; \
++	ll=`echo $$lang | sed -e 's/@.*//'`; \
++	LC_ALL=C; export LC_ALL; \
++	cd $(srcdir); \
++	if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
++	   | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
++	   { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
++	     '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
++	       $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
++	       ;; \
++	     *) \
++	       $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
++	       ;; \
++	     esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
++	     ; then \
++	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
++	    rm -f $$tmpdir/$$lang.new.po; \
++	  else \
++	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
++	      :; \
++	    else \
++	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
++	      exit 1; \
++	    fi; \
++	  fi; \
++	else \
++	  echo "creation of $$lang.po failed!" 1>&2; \
++	  rm -f $$tmpdir/$$lang.new.po; \
++	fi
++
++en@quot.insert-header: insert-header.sin
++	sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
++
++en@boldquot.insert-header: insert-header.sin
++	sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
++
++mostlyclean: mostlyclean-quot
++mostlyclean-quot:
++	rm -f *.insert-header
+diff --git a/po/bo_CN.gmo b/po/bo_CN.gmo
+new file mode 100644
+index 0000000..f974205
+--- /dev/null
++++ b/po/bo_CN.gmo
+@@ -0,0 +1,14 @@
++������
���������������������0�����1�����I�����`��������������������
������'������ �����������=���(��5���f��������{���=���������~���\��{������`���W��6������B����������2�������������f�������	�������
++�����
���	����������������������������������
++����������������Invaild username length�Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2022-07-08 06:12+0000
++Last-Translator: kylinmy <mengyuan@kylinos.cn>
++Language-Team: Tibetan (China) <http://weblate.openkylin.top/projects/libchkuid/libchkuid/bo_CN/>
++Language: bo_CN
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++Plural-Forms: nplurals=1; plural=0;
++X-Generator: Weblate 4.12.1-dev
++�གོ་མི་ཐུབ་པའི་སྤྱོད་མཁན་གྱི་མིང་རིང་ཐུང་།�གོ་མི་ཆོད་པའི་སྤྱོད་མཁན་གྱི་མིང་བསྐྱར་དུ་ཞིབ་འཇུག་བྱས།�ཁ་ཕྱེ་ནས་སོར་ཉར་བྱས་པའི་མིང་ཡིག་ཆ་ལ་ཕམ་ཉེས�གྲངས་ཀ་འདིའི་མིང་ནི་གོ་མི་སྲིད་པ་ཞིག་རེད།�སོར་ཉར་བྱས་པའི་སྤྱོད་མཁན་གྱི་མིང�ལེགས་འགྲུབ་བྱུང་བ།�ཤེས་མེད་པའི་ནོར་འཁྲུལ།�སྤྱོད་མཁན་གྱི་མིང་ནི་ཁེ་བཟང་ཟ་བའི་ཨང་གྲངས་ཡིན་མི་སྲིད།�སྤྱོད་མཁན་གྱི་མིང་ལ་གྲངས་ཀ་ཆ་ཚང་ཞིག་ཡོད་མི་སྲིད།�སྤྱོད་མཁན་གྱི་མིང་ནི་ཨང་ཀི་བརྒྱད་པའི་ཨང་གྲངས་ཡིན་མི�སྤྱོད་མཁན་གྱི་མིང་ནི་ངེས་པར་དུ་འཕྲིན་ཡིག་དང་། ཨང་གྲངས། ཚེག་རྡར། ཡང་ན་ནན་བཤད་བཅས་ནས་འགོ་�སྤྱོད་མཁན་གྱི་རིང་ཚད་ནི་ངེས་པར་དུ་ཡི་གེ་1ནས་32བར་ཡིན་དགོས།�
+\ No newline at end of file
+diff --git a/po/bo_CN.po b/po/bo_CN.po
+new file mode 100644
+index 0000000..ef19637
+--- /dev/null
++++ b/po/bo_CN.po
+@@ -0,0 +1,62 @@
++# Copyright (C) 2022 KylinSoft@Copyright
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2021-08-30 14:30+0800\n"
++"PO-Revision-Date: 2022-07-08 06:12+0000\n"
++"Last-Translator: kylinmy <mengyuan@kylinos.cn>\n"
++"Language-Team: Tibetan (China) <http://weblate.openkylin.top/projects/"
++"libchkuid/libchkuid/bo_CN/>\n"
++"Language: bo_CN\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=1; plural=0;\n"
++"X-Generator: Weblate 4.12.1-dev\n"
++
++#: ../chkname.c:77
++msgid "Success"
++msgstr "ལེགས་འགྲུབ་བྱུང་བ།"
++
++#: ../chkname.c:79
++msgid "Invaild username length"
++msgstr "གོ་མི་ཐུབ་པའི་སྤྱོད་མཁན་གྱི་མིང་རིང་ཐུང་།"
++
++#: ../chkname.c:81
++msgid "Invalid username regex"
++msgstr "གོ་མི་ཆོད་པའི་སྤྱོད་མཁན་གྱི་མིང་བསྐྱར་དུ་ཞིབ་འཇུག་བྱས།"
++
++#: ../chkname.c:83
++msgid "Reserved username"
++msgstr "སོར་ཉར་བྱས་པའི་སྤྱོད་མཁན་གྱི་མིང"
++
++#: ../chkname.c:85
++msgid "Unknown error"
++msgstr "ཤེས་མེད་པའི་ནོར་འཁྲུལ།"
++
++#: ../chkname.c:94
++msgid "Parameter name is null"
++msgstr "གྲངས་ཀ་འདིའི་མིང་ནི་གོ་མི་སྲིད་པ་ཞིག་རེད།"
++
++#: ../chkname.c:96
++msgid "Open reserved-names file failed"
++msgstr "ཁ་ཕྱེ་ནས་སོར་ཉར་བྱས་པའི་མིང་ཡིག་ཆ་ལ་ཕམ་ཉེས"
++
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "སྤྱོད་མཁན་གྱི་རིང་ཚད་ནི་ངེས་པར་དུ་ཡི་གེ་1ནས་32བར་ཡིན་དགོས།"
++
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr ""
++"སྤྱོད་མཁན་གྱི་མིང་ནི་ངེས་པར་དུ་འཕྲིན་ཡིག་དང་། ཨང་གྲངས། ཚེག་རྡར། "
++"ཡང་ན་ནན་བཤད་བཅས་ནས་འགོ་"
++
++msgid "Username cannot be a hexadecimal number"
++msgstr "སྤྱོད་མཁན་གྱི་མིང་ནི་ཁེ་བཟང་ཟ་བའི་ཨང་གྲངས་ཡིན་མི་སྲིད།"
++
++msgid "Username cannot be octal number"
++msgstr "སྤྱོད་མཁན་གྱི་མིང་ནི་ཨང་ཀི་བརྒྱད་པའི་ཨང་གྲངས་ཡིན་མི"
++
++msgid "Username cannot be fully numeric"
++msgstr "སྤྱོད་མཁན་གྱི་མིང་ལ་གྲངས་ཀ་ཆ་ཚང་ཞིག་ཡོད་མི་སྲིད།"
+diff --git a/po/boldquot.sed b/po/boldquot.sed
+new file mode 100644
+index 0000000..4b937aa
+--- /dev/null
++++ b/po/boldquot.sed
+@@ -0,0 +1,10 @@
++s/"\([^"]*\)"/“\1”/g
++s/`\([^`']*\)'/‘\1’/g
++s/ '\([^`']*\)' / ‘\1’ /g
++s/ '\([^`']*\)'$/ ‘\1’/g
++s/^'\([^`']*\)' /‘\1’ /g
++s/“”/""/g
++s/“/“/g
++s/”/”/g
++s/‘/‘/g
++s/’/’/g
+diff --git a/po/en@boldquot.header b/po/en@boldquot.header
+new file mode 100644
+index 0000000..506ca9e
+--- /dev/null
++++ b/po/en@boldquot.header
+@@ -0,0 +1,25 @@
++# All this catalog "translates" are quotation characters.
++# The msgids must be ASCII and therefore cannot contain real quotation
++# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
++# and double quote (0x22). These substitutes look strange; see
++# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
++#
++# This catalog translates grave accent (0x60) and apostrophe (0x27) to
++# left single quotation mark (U+2018) and right single quotation mark (U+2019).
++# It also translates pairs of apostrophe (0x27) to
++# left single quotation mark (U+2018) and right single quotation mark (U+2019)
++# and pairs of quotation mark (0x22) to
++# left double quotation mark (U+201C) and right double quotation mark (U+201D).
++#
++# When output to an UTF-8 terminal, the quotation characters appear perfectly.
++# When output to an ISO-8859-1 terminal, the single quotation marks are
++# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
++# grave/acute accent (by libiconv), and the double quotation marks are
++# transliterated to 0x22.
++# When output to an ASCII terminal, the single quotation marks are
++# transliterated to apostrophes, and the double quotation marks are
++# transliterated to 0x22.
++#
++# This catalog furthermore displays the text between the quotation marks in
++# bold face, assuming the VT100/XTerm escape sequences.
++#
+diff --git a/po/en@quot.header b/po/en@quot.header
+new file mode 100644
+index 0000000..6522f0c
+--- /dev/null
++++ b/po/en@quot.header
+@@ -0,0 +1,22 @@
++# All this catalog "translates" are quotation characters.
++# The msgids must be ASCII and therefore cannot contain real quotation
++# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
++# and double quote (0x22). These substitutes look strange; see
++# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
++#
++# This catalog translates grave accent (0x60) and apostrophe (0x27) to
++# left single quotation mark (U+2018) and right single quotation mark (U+2019).
++# It also translates pairs of apostrophe (0x27) to
++# left single quotation mark (U+2018) and right single quotation mark (U+2019)
++# and pairs of quotation mark (0x22) to
++# left double quotation mark (U+201C) and right double quotation mark (U+201D).
++#
++# When output to an UTF-8 terminal, the quotation characters appear perfectly.
++# When output to an ISO-8859-1 terminal, the single quotation marks are
++# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
++# grave/acute accent (by libiconv), and the double quotation marks are
++# transliterated to 0x22.
++# When output to an ASCII terminal, the single quotation marks are
++# transliterated to apostrophes, and the double quotation marks are
++# transliterated to 0x22.
++#
+diff --git a/po/insert-header.sin b/po/insert-header.sin
+new file mode 100644
+index 0000000..ceeebb9
+--- /dev/null
++++ b/po/insert-header.sin
+@@ -0,0 +1,28 @@
++# Sed script that inserts the file called HEADER before the header entry.
++#
++# Copyright (C) 2001 Free Software Foundation, Inc.
++# Written by Bruno Haible <bruno@clisp.org>, 2001.
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to use, copy, distribute, and modify it.
++#
++# At each occurrence of a line starting with "msgid ", we execute the following
++# commands. At the first occurrence, insert the file. At the following
++# occurrences, do nothing. The distinction between the first and the following
++# occurrences is achieved by looking at the hold space.
++/^msgid /{
++x
++# Test if the hold space is empty.
++s/m/m/
++ta
++# Yes it was empty. First occurrence. Read the file.
++r HEADER
++# Output the file's contents by reading the next line. But don't lose the
++# current line while doing this.
++g
++N
++bb
++:a
++# The hold space was nonempty. Following occurrences. Do nothing.
++x
++:b
++}
+diff --git a/po/kk.gmo b/po/kk.gmo
+new file mode 100644
+index 0000000..655cb36
+--- /dev/null
++++ b/po/kk.gmo
+@@ -0,0 +1,11 @@
++������
���������������������0�����1�����I�����`��������������������
������'������ �����������=���(��5���f�������D������=������F���<��$������0������������������Y�����G���^��M�������������n���|�����
���	����������������������������������
++����������������Invaild username length�Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2025-03-18 14:30+0800
++Last-Translator: mengyuan <mengyuan@kylinos.cn>
++Language-Team: LANGUAGE <LL@li.org>
++Language: kk
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++�Қолы жоқ пайдаланушы атының ұзындығы�Жарамсыз пайдаланушы аты регексі�Сақталған атаулар файлын ашу жаңылысы�Параметр атауы - нөл�Сақталған пайдаланушы аты�Сәттілік�Беймәлім қате�Пайдаланушы аты гексадецималды сан бола алмайды�Пайдаланушы аты толық сан бола алмайды�Пайдаланушы аты сегіздік сан бола алмайды�Пайдаланушы аты әріптен, саннан, нүктеден немесе астын сызып бастау керек�Пайдаланушы атының ұзындығы 1-ден 32 таңбаға дейін болуы тиіс�
+\ No newline at end of file
+diff --git a/po/kk.po b/po/kk.po
+new file mode 100644
+index 0000000..b4f6ad1
+--- /dev/null
++++ b/po/kk.po
+@@ -0,0 +1,58 @@
++# Copyright (C) 2025 KylinSoft@Copyright
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2025-03-18 14:30+0800\n"
++"PO-Revision-Date: 2025-03-18 14:30+0800\n"
++"Last-Translator: mengyuan <mengyuan@kylinos.cn>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"Language: kk\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#: ../chkname.c:77
++msgid "Success"
++msgstr "Сәттілік"
++
++#: ../chkname.c:79
++msgid "Invaild username length"
++msgstr "Қолы жоқ пайдаланушы атының ұзындығы"
++
++#: ../chkname.c:81
++msgid "Invalid username regex"
++msgstr "Жарамсыз пайдаланушы аты регексі"
++
++#: ../chkname.c:83
++msgid "Reserved username"
++msgstr "Сақталған пайдаланушы аты"
++
++#: ../chkname.c:85
++msgid "Unknown error"
++msgstr "Беймәлім қате"
++
++#: ../chkname.c:94
++msgid "Parameter name is null"
++msgstr "Параметр атауы - нөл"
++
++#: ../chkname.c:96
++msgid "Open reserved-names file failed"
++msgstr "Сақталған атаулар файлын ашу жаңылысы"
++
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "Пайдаланушы атының ұзындығы 1-ден 32 таңбаға дейін болуы тиіс"
++
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr "Пайдаланушы аты әріптен, саннан, нүктеден немесе астын сызып бастау керек"
++
++msgid "Username cannot be a hexadecimal number"
++msgstr "Пайдаланушы аты гексадецималды сан бола алмайды"
++
++msgid "Username cannot be octal number"
++msgstr "Пайдаланушы аты сегіздік сан бола алмайды"
++
++msgid "Username cannot be fully numeric"
++msgstr "Пайдаланушы аты толық сан бола алмайды"
+diff --git a/po/ky.gmo b/po/ky.gmo
+new file mode 100644
+index 0000000..29d3000
+--- /dev/null
++++ b/po/ky.gmo
+@@ -0,0 +1,11 @@
++������������|�������������� �����!�����8�����X�����o��������
������'������ ������������=������5���>����t��W������X������5���B��0���x��������������Y������V���,��P������|����������Q�������������������������������������������	������
++����������Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2025-03-17 16:36+0800
++Last-Translator: mengyuan <mengyuan@kylinos.cn>
++Language-Team: LANGUAGE <LL@li.org>
++Language: ky
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++�Колдонуучу аты туура эмес регулярдуу выражение�Резервделген аттар файлын ачуу ишке ашпай калды�Колдонуучу аты параметри бош�Резервдеги колдонуучу аты�Ийгилик�Белгисиз ката�Колдонуучу аты он алтылык сан болушу мүмкүн эмес�Колдонуучу аты толук сандык болушу мүмкүн эмес�Колдонуучу аты сегиз сан болушу мүмкүн эмес�Колдонуучу аты тамга, сан, чекит же асты сызык менен башталышы керек�Колдонуучу атыңыздын узундугу 1 жана 32 тамгалардын ортосунда болушу керек�
+\ No newline at end of file
+diff --git a/po/ky.po b/po/ky.po
+new file mode 100644
+index 0000000..b987059
+--- /dev/null
++++ b/po/ky.po
+@@ -0,0 +1,59 @@
++# Copyright (C) KylinSoft@Copyright
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2025-03-17 16:36+0800\n"
++"PO-Revision-Date: 2025-03-17 16:36+0800\n"
++"Last-Translator: mengyuan <mengyuan@kylinos.cn>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"Language: ky\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#: ../kylin-chkname.c:137
++msgid "Success"
++msgstr "Ийгилик"
++
++#: ../kylin-chkname.c:139
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "Колдонуучу атыңыздын узундугу 1 жана 32 тамгалардын ортосунда болушу керек"
++
++#: ../kylin-chkname.c:141
++msgid "Invalid username regex"
++msgstr "Колдонуучу аты туура эмес регулярдуу выражение"
++
++#: ../kylin-chkname.c:143
++msgid "Reserved username"
++msgstr "Резервдеги колдонуучу аты"
++
++#: ../kylin-chkname.c:145
++msgid "Parameter name is null"
++msgstr "Колдонуучу аты параметри бош"
++
++#: ../kylin-chkname.c:147
++msgid "Open reserved-names file failed"
++msgstr "Резервделген аттар файлын ачуу ишке ашпай калды"
++
++#: ../kylin-chkname.c:149
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr "Колдонуучу аты тамга, сан, чекит же асты сызык менен башталышы керек"
++
++#: ../kylin-chkname.c:151
++msgid "Username cannot be a hexadecimal number"
++msgstr "Колдонуучу аты он алтылык сан болушу мүмкүн эмес"
++
++#: ../kylin-chkname.c:153
++msgid "Username cannot be octal number"
++msgstr "Колдонуучу аты сегиз сан болушу мүмкүн эмес"
++
++#: ../kylin-chkname.c:155
++msgid "Username cannot be fully numeric"
++msgstr "Колдонуучу аты толук сандык болушу мүмкүн эмес"
++
++#: ../kylin-chkname.c:157
++msgid "Unknown error"
++msgstr "Белгисиз ката"
+diff --git a/po/mn.gmo b/po/mn.gmo
+new file mode 100644
+index 0000000..f9f032e
+--- /dev/null
++++ b/po/mn.gmo
+@@ -0,0 +1,14 @@
++������
���������������������0�����1�����I�����`��������������������
������'������ �����������=���(��5���f��������o���=��u����������#��y����������$��������2����������
�������������V����	������&
++�����
���	����������������������������������
++����������������Invaild username length�Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2023-08-03 03:08+0000
++Last-Translator: kylinmy <mengyuan@kylinos.cn>
++Language-Team: Mongolian <http://weblate.openkylin.top/projects/libchkuid-master/libchkuid/mn/>
++Language: mn
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++Plural-Forms: nplurals=2; plural=n != 1;
++X-Generator: Weblate 4.12.1-dev
++�ᠬᠠᠤᠯᠢ ᠪᠤᠰᠤ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠤᠷᠳᠤ�ᠬᠠᠤᠯᠢ ᠪᠤᠰᠤ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠵᠠᠭᠪᠤᠷ�ᠨᠡᠬᠡᠬᠡᠭᠰᠡᠨ ᠦᠯᠡᠳᠡᠭᠡᠵᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠰᠠᠨ ᠹᠠᠢᠯ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ�ᠪᠤᠯᠵᠣᠯᠲᠤ ᠲᠣᠭ᠎ᠠ ᠨᠢ ᠬᠣᠭᠣᠰᠣᠨ ᠪᠠᠶᠢᠵᠤ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠢ ᠃�ᠰᠢᠰᠲ᠋ᠧᠮ ᠤ᠋ᠨ ᠬᠠᠳᠠᠭᠠᠯᠠᠵᠤ ᠦᠯᠡᠳᠡᠭᠡᠭᠰᠡᠨ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ�ᠦᠩᠬᠡᠷᠡᠪᠡ�ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ ᠠᠯᠳᠠᠭ᠎ᠠ�ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ16 ᠪᠡᠷ ᠳᠠᠪᠰᠢᠬᠤ ᠳᠦᠷᠢᠮ ᠤ᠋ᠨ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ�ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ ᠴᠤᠯᠤ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ�ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ 8 ᠪᠡᠷ ᠳᠠᠪᠰᠢᠬᠤ ᠳᠦᠷᠢᠮ ᠤ᠋ᠨ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ�ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ ᠡᠷᠬᠡᠪᠰᠢ ᠠᠪᠢᠶ᠎ᠠ᠂ ᠲᠤᠭ᠎ᠠ᠂ ᠴᠡᠭ ᠪᠤᠶᠤ ᠳᠤᠤᠷ᠎ᠠ ᠵᠢᠷᠤᠭᠠᠰᠤ ᠪᠡᠷ ᠡᠬᠢᠯᠡᠭᠰᠡᠨ ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ�ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠤᠷᠳᠤ ᠨᠢ ᠡᠷᠬᠡᠪᠰᠢ1 ᠡᠴᠡ32 ᠦᠰᠦᠭ ᠳᠡᠮᠳᠡᠭ ᠤ᠋ᠨ ᠬᠤᠭᠤᠷᠤᠨᠳᠤ ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ�
+\ No newline at end of file
+diff --git a/po/mn.po b/po/mn.po
+new file mode 100644
+index 0000000..cd45fff
+--- /dev/null
++++ b/po/mn.po
+@@ -0,0 +1,64 @@
++# Copyright (C) 2022 KylinSoft@Copyright
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2021-08-30 14:30+0800\n"
++"PO-Revision-Date: 2023-08-03 03:08+0000\n"
++"Last-Translator: kylinmy <mengyuan@kylinos.cn>\n"
++"Language-Team: Mongolian <http://weblate.openkylin.top/projects/"
++"libchkuid-master/libchkuid/mn/>\n"
++"Language: mn\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=n != 1;\n"
++"X-Generator: Weblate 4.12.1-dev\n"
++
++#: ../chkname.c:77
++msgid "Success"
++msgstr "ᠦᠩᠬᠡᠷᠡᠪᠡ"
++
++#: ../chkname.c:79
++msgid "Invaild username length"
++msgstr "ᠬᠠᠤᠯᠢ ᠪᠤᠰᠤ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠤᠷᠳᠤ"
++
++#: ../chkname.c:81
++msgid "Invalid username regex"
++msgstr "ᠬᠠᠤᠯᠢ ᠪᠤᠰᠤ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠵᠠᠭᠪᠤᠷ"
++
++#: ../chkname.c:83
++msgid "Reserved username"
++msgstr "ᠰᠢᠰᠲ᠋ᠧᠮ ᠤ᠋ᠨ ᠬᠠᠳᠠᠭᠠᠯᠠᠵᠤ ᠦᠯᠡᠳᠡᠭᠡᠭᠰᠡᠨ ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ"
++
++#: ../chkname.c:85
++msgid "Unknown error"
++msgstr "ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ ᠠᠯᠳᠠᠭ᠎ᠠ"
++
++#: ../chkname.c:94
++msgid "Parameter name is null"
++msgstr "ᠪᠤᠯᠵᠣᠯᠲᠤ ᠲᠣᠭ᠎ᠠ ᠨᠢ ᠬᠣᠭᠣᠰᠣᠨ ᠪᠠᠶᠢᠵᠤ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠢ ᠃"
++
++#: ../chkname.c:96
++msgid "Open reserved-names file failed"
++msgstr "ᠨᠡᠬᠡᠬᠡᠭᠰᠡᠨ ᠦᠯᠡᠳᠡᠭᠡᠵᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠰᠠᠨ ᠹᠠᠢᠯ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ"
++
++msgid "Username's length must be between 1 and 32 characters"
++msgstr ""
++"ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠵᠢᠨ ᠤᠷᠳᠤ ᠨᠢ ᠡᠷᠬᠡᠪᠰᠢ1 ᠡᠴᠡ32 ᠦᠰᠦᠭ ᠳᠡᠮᠳᠡᠭ ᠤ᠋ᠨ ᠬᠤᠭᠤᠷᠤᠨᠳᠤ "
++"ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ"
++
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr ""
++"ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ ᠡᠷᠬᠡᠪᠰᠢ ᠠᠪᠢᠶ᠎ᠠ᠂ ᠲᠤᠭ᠎ᠠ᠂ ᠴᠡᠭ ᠪᠤᠶᠤ ᠳᠤᠤᠷ᠎ᠠ ᠵᠢᠷᠤᠭᠠᠰᠤ ᠪᠡᠷ "
++"ᠡᠬᠢᠯᠡᠭᠰᠡᠨ ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ"
++
++msgid "Username cannot be a hexadecimal number"
++msgstr "ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ16 ᠪᠡᠷ ᠳᠠᠪᠰᠢᠬᠤ ᠳᠦᠷᠢᠮ ᠤ᠋ᠨ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ"
++
++msgid "Username cannot be octal number"
++msgstr "ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ 8 ᠪᠡᠷ ᠳᠠᠪᠰᠢᠬᠤ ᠳᠦᠷᠢᠮ ᠤ᠋ᠨ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ"
++
++msgid "Username cannot be fully numeric"
++msgstr "ᠬᠡᠷᠡᠭᠡᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠨᠡᠷ᠎ᠡ ᠨᠢ ᠴᠤᠯᠤ ᠲᠤᠭ᠎ᠠ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ"
+\ No newline at end of file
+diff --git a/po/quot.sed b/po/quot.sed
+new file mode 100644
+index 0000000..0122c46
+--- /dev/null
++++ b/po/quot.sed
+@@ -0,0 +1,6 @@
++s/"\([^"]*\)"/“\1”/g
++s/`\([^`']*\)'/‘\1’/g
++s/ '\([^`']*\)' / ‘\1’ /g
++s/ '\([^`']*\)'$/ ‘\1’/g
++s/^'\([^`']*\)' /‘\1’ /g
++s/“”/""/g
+diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
+new file mode 100644
+index 0000000..8c70dfb
+--- /dev/null
++++ b/po/remove-potcdate.sin
+@@ -0,0 +1,25 @@
++# Sed script that removes the POT-Creation-Date line in the header entry
++# from a POT file.
++#
++# Copyright (C) 2002 Free Software Foundation, Inc.
++# Copying and distribution of this file, with or without modification,
++# are permitted in any medium without royalty provided the copyright
++# notice and this notice are preserved.  This file is offered as-is,
++# without any warranty.
++#
++# The distinction between the first and the following occurrences of the
++# pattern is achieved by looking at the hold space.
++/^"POT-Creation-Date: .*"$/{
++x
++# Test if the hold space is empty.
++s/P/P/
++ta
++# Yes it was empty. First occurrence. Remove the line.
++g
++d
++bb
++:a
++# The hold space was nonempty. Following occurrences. Do nothing.
++x
++:b
++}
+diff --git a/po/ug.gmo b/po/ug.gmo
+new file mode 100644
+index 0000000..b7b02a0
+--- /dev/null
++++ b/po/ug.gmo
+@@ -0,0 +1,11 @@
++������������|�������������� �����!�����8�����X�����o��������
������'������ ������������=������5���>����t��8������]������5���(��4���^��������������Q������c�����W�������������x���a�������������������������������������������	������
++����������Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2025-03-17 16:36+0800
++Last-Translator: mengyuan <mengyuan@kylinos.cn>
++Language-Team: LANGUAGE <LL@li.org>
++Language: ug
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++�ئىشلەتكۈچى نامى regex ئىناۋەتسىز�قالدۇرۇلغان ئىسىملار ھۆججىتىنى ئېچىش مەغلۇپ بولدى�ئابونت نامى پارامېتىرى قۇرۇق�قالدۇرۇلغان ئىشلەتكۈچى نامى�باشارغۇچىلىق�نامەلۇم خاتالىق�ئىشلەتكۈچى نامى ئالتە ئونلۇق سان بولالمايدۇ�ئىشلەتكۈچى نامى پۈتۈنلەي رەقەملىك بولالايدىغان ئەمەس�ئىشلەتكۈچى نامى سەككىز نومۇرلۇق سان بولالمايدۇ�ئىشلەتكۈچى نامى ھەرپ، رەقەم، چېكىت ياكى ئاستى بەلگە بىلەن باشلىنىشى كېرەك�ئىشلەتكۈچى نامىنىڭ ئۇزۇنلۇقى 1 دىن 32 ھەرپ ئارىلىقىدا بولۇشى كېرەك�
+\ No newline at end of file
+diff --git a/po/ug.po b/po/ug.po
+new file mode 100644
+index 0000000..8174ebb
+--- /dev/null
++++ b/po/ug.po
+@@ -0,0 +1,59 @@
++# Copyright (C) 2025 KylinSoft@Copyright
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2025-03-17 16:36+0800\n"
++"PO-Revision-Date: 2025-03-17 16:36+0800\n"
++"Last-Translator: mengyuan <mengyuan@kylinos.cn>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"Language: ug\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#: ../kylin-chkname.c:137
++msgid "Success"
++msgstr "باشارغۇچىلىق"
++
++#: ../kylin-chkname.c:139
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "ئىشلەتكۈچى نامىنىڭ ئۇزۇنلۇقى 1 دىن 32 ھەرپ ئارىلىقىدا بولۇشى كېرەك"
++
++#: ../kylin-chkname.c:141
++msgid "Invalid username regex"
++msgstr "ئىشلەتكۈچى نامى regex ئىناۋەتسىز"
++
++#: ../kylin-chkname.c:143
++msgid "Reserved username"
++msgstr "قالدۇرۇلغان ئىشلەتكۈچى نامى"
++
++#: ../kylin-chkname.c:145
++msgid "Parameter name is null"
++msgstr "ئابونت نامى پارامېتىرى قۇرۇق"
++
++#: ../kylin-chkname.c:147
++msgid "Open reserved-names file failed"
++msgstr "قالدۇرۇلغان ئىسىملار ھۆججىتىنى ئېچىش مەغلۇپ بولدى"
++
++#: ../kylin-chkname.c:149
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr "ئىشلەتكۈچى نامى ھەرپ، رەقەم، چېكىت ياكى ئاستى بەلگە بىلەن باشلىنىشى كېرەك"
++
++#: ../kylin-chkname.c:151
++msgid "Username cannot be a hexadecimal number"
++msgstr "ئىشلەتكۈچى نامى ئالتە ئونلۇق سان بولالمايدۇ"
++
++#: ../kylin-chkname.c:153
++msgid "Username cannot be octal number"
++msgstr "ئىشلەتكۈچى نامى سەككىز نومۇرلۇق سان بولالمايدۇ"
++
++#: ../kylin-chkname.c:155
++msgid "Username cannot be fully numeric"
++msgstr "ئىشلەتكۈچى نامى پۈتۈنلەي رەقەملىك بولالايدىغان ئەمەس"
++
++#: ../kylin-chkname.c:157
++msgid "Unknown error"
++msgstr "نامەلۇم خاتالىق"
+diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
+new file mode 100644
+index 0000000..159cc29
+--- /dev/null
++++ b/po/zh_CN.gmo
+@@ -0,0 +1,11 @@
++������
���������������������0�����1�����I�����`��������������������
������'������ �����������=���(��5���f��������������������������������������-�����4�����D�����b�����~��9������0���������
���	����������������������������������
++����������������Invaild username length�Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2021-08-30 14:30+0800
++Last-Translator: mengyuan <mengyuan@kylinos.cn>
++Language-Team: LANGUAGE <LL@li.org>
++Language: 
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++�非法的用户名长度�非法的用户名格式�打开保留名文件错误�参数name为null�系统保留用户名�通过�未知的错误�用户名不能为16进制数�用户名不能为纯数字�用户名不能为8进制数�用户名必须以字母、数字、点或下划线开头�用户名长度必须介于1到32个字符之间�
+\ No newline at end of file
+diff --git a/po/zh_CN.po b/po/zh_CN.po
+new file mode 100644
+index 0000000..a20ab7b
+--- /dev/null
++++ b/po/zh_CN.po
+@@ -0,0 +1,58 @@
++# Copyright (C) 2022 KylinSoft@Copyright
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2021-08-30 14:30+0800\n"
++"PO-Revision-Date: 2021-08-30 14:30+0800\n"
++"Last-Translator: mengyuan <mengyuan@kylinos.cn>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#: ../chkname.c:77
++msgid "Success"
++msgstr "通过"
++
++#: ../chkname.c:79
++msgid "Invaild username length"
++msgstr "非法的用户名长度"
++
++#: ../chkname.c:81
++msgid "Invalid username regex"
++msgstr "非法的用户名格式"
++
++#: ../chkname.c:83
++msgid "Reserved username"
++msgstr "系统保留用户名"
++
++#: ../chkname.c:85
++msgid "Unknown error"
++msgstr "未知的错误"
++
++#: ../chkname.c:94
++msgid "Parameter name is null"
++msgstr "参数name为null"
++
++#: ../chkname.c:96
++msgid "Open reserved-names file failed"
++msgstr "打开保留名文件错误"
++
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "用户名长度必须介于1到32个字符之间"
++
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr "用户名必须以字母、数字、点或下划线开头"
++
++msgid "Username cannot be a hexadecimal number"
++msgstr "用户名不能为16进制数"
++
++msgid "Username cannot be octal number"
++msgstr "用户名不能为8进制数"
++
++msgid "Username cannot be fully numeric"
++msgstr "用户名不能为纯数字"
+diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
+new file mode 100644
+index 0000000..312752b
+--- /dev/null
++++ b/po/zh_HK.gmo
+@@ -0,0 +1,11 @@
++������
���������������������0�����1�����I�����`��������������������
������'������ �����������=���(��5���f��������������������������������������.�����5��!���B�����d��������9������0���������
���	����������������������������������
++����������������Invaild username length�Invalid username regex�Open reserved-names file failed�Parameter name is null�Reserved username�Success�Unknown error�Username cannot be a hexadecimal number�Username cannot be fully numeric�Username cannot be octal number�Username must start with a letter, number, dot, or underscore�Username's length must be between 1 and 32 characters�Project-Id-Version: kylin-chkname
++Report-Msgid-Bugs-To: 
++PO-Revision-Date: 2021-08-30 14:30+0800
++Last-Translator: mengyuan <mengyuan@kylinos.cn>
++Language-Team: LANGUAGE <LL@li.org>
++Language: 
++MIME-Version: 1.0
++Content-Type: text/plain; charset=UTF-8
++Content-Transfer-Encoding: 8bit
++�非法的用戶名長度�非法的用戶名格式�打開保留名稱檔失敗�參數名稱為空�系統保留用戶名�成功�未知錯誤�用戶名不能是十六進位數�用戶名不能為純數字�用戶名不能是八進位數�用戶名必須以字母、數位、點或下劃線開頭�用戶名長度必須介於1到32個字符之間�
+\ No newline at end of file
+diff --git a/po/zh_HK.po b/po/zh_HK.po
+new file mode 100644
+index 0000000..49a23ca
+--- /dev/null
++++ b/po/zh_HK.po
+@@ -0,0 +1,51 @@
++# Copyright (C) 2022 KylinSoft@Copyright
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: kylin-chkname\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2021-08-30 14:30+0800\n"
++"PO-Revision-Date: 2021-08-30 14:30+0800\n"
++"Last-Translator: mengyuan <mengyuan@kylinos.cn>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++msgid "Invaild username length"
++msgstr "非法的用戶名長度"
++
++msgid "Invalid username regex"
++msgstr "非法的用戶名格式"
++
++msgid "Open reserved-names file failed"
++msgstr "打開保留名稱檔失敗"
++
++msgid "Parameter name is null"
++msgstr "參數名稱為空"
++
++msgid "Reserved username"
++msgstr "系統保留用戶名"
++
++msgid "Success"
++msgstr "成功"
++
++msgid "Unknown error"
++msgstr "未知錯誤"
++
++msgid "Username cannot be a hexadecimal number"
++msgstr "用戶名不能是十六進位數"
++
++msgid "Username cannot be fully numeric"
++msgstr "用戶名不能為純數字"
++
++msgid "Username cannot be octal number"
++msgstr "用戶名不能是八進位數"
++
++msgid "Username must start with a letter, number, dot, or underscore"
++msgstr "用戶名必須以字母、數位、點或下劃線開頭"
++
++msgid "Username's length must be between 1 and 32 characters"
++msgstr "用戶名長度必須介於1到32個字符之間"
diff -Nru libkylin-chkname-1.0.10kylin3uk1/debian/patches/series libkylin-chkname-1.0.10kylin3uk1/debian/patches/series
--- libkylin-chkname-1.0.10kylin3uk1/debian/patches/series	1970-01-01 08:00:00.000000000 +0800
+++ libkylin-chkname-1.0.10kylin3uk1/debian/patches/series	2025-03-18 15:16:51.000000000 +0800
@@ -0,0 +1 @@
+0001-fix-compile-errors.patch