Bug 1894854

Summary: find-lang.sh doesn't find locales or generate wrong when qm file has 3 characters
Product: [Fedora] Fedora Reporter: sixg0000d <sixg0000d>
Component: rpmAssignee: Packaging Maintenance Team <packaging-team-maint>
Status: CLOSED CURRENTRELEASE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 33CC: igor.raits, mjw, packaging-team-maint, pmatilai, pmoravco, vmukhame
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of:
: 2144005 (view as bug list) Environment:
Last Closed: 2021-05-16 12:03:55 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2144005    

Description sixg0000d@gmail.com 2020-11-05 09:23:08 UTC
Description of problem:
The find-lang script cannot find qm files when my qm file name with a ISO 639-3 code like 'yue.qm' .

Version-Release number of selected component (if applicable):
$ rpm -qf /usr/lib/rpm/find-lang.sh
rpm-build-4.16.0-1.fc33.x86_64

How reproducible:
always

Steps to Reproduce:
1.Has some qm files in buildroot
$ ls path/usr/share/name/lang/
en_US.qm  ja_JP.qm  yue_HK.qm  yue.qm  zh_CN.qm  zh_TW.qm

2.Try to use script to handle there
$ /usr/lib/rpm/find-lang.sh path name --with-qt --all-name

Actual results:
$ cat name.lang 
%lang(en_US) /usr/share/name/lang/en_US.qm
%lang(ja_JP) /usr/share/name/lang/ja_JP.qm
%lang(zh_CN) /usr/share/name/lang/zh_CN.qm
%lang(zh_TW) /usr/share/name/lang/zh_TW.qm
# This is a wrong locale code, because it is missing language code
%lang(HK) /usr/share/name/lang/yue_HK.qm


Expected results:
$ cat name.lang 
%lang(en_US) /usr/share/name/lang/en_US.qm
%lang(ja_JP) /usr/share/name/lang/ja_JP.qm
%lang(zh_CN) /usr/share/name/lang/zh_CN.qm
%lang(zh_TW) /usr/share/name/lang/zh_TW.qm
%lang(yue_HK) /usr/share/name/lang/yue_HK.qm
%lang(yue) /usr/share/name/lang/yue.qm

Additional info:
I think the problem is in the sed expression in the script:
...
'
s:'"$TOP_DIR"'::
'"$NO_ALL_NAME$QT"'s:\(.*/'"$NAME"'_\([a-zA-Z]\{2\}\([_@].*\)\?\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/\([a-zA-Z]\{2\}[_@].*\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/[^/_]\+_\([a-zA-Z]\{2\}[_@].*\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/[^/_]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}[_@].*\)\.qm$\):%lang(\2) \1:
'"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
s:^[^%].*::
s:%lang(C) ::
/^$/d'
...
It seems that it only captures the Alpha-2 code, and misses the Alpha-3 code.