Amharic (amh) language added successfully but checkbox remains disabled in Registration Client language selection

Hi
as you mentioned i am following these document ( Module Configurations | MOSIP Docs 1.2.0 )

I’m adding Amharic (amh) as an optional language for our MOSIP deployment (Registration Client v1.2.0.2), following the module-configuration docs ( Module Configurations | MOSIP Docs 1.2.0 ). Everything appears correctly configured end-to-end, but the ‘amh’ checkbox in the Registration Client’s Select Language dialog stays visible but disabled/non-clickable. English (mandatory) works fine.

Steps completed so far:

  1. Master data — Inserted amh into master.language (native_name = አማርኛ) and added all 6 levels to master.loc_hierarchy_list. Confirmed via sync that ‘amh’ now appears as an option in the dialog (previously it didn’t show at all).

  2. application-default.properties (on our config git branch, identy-v1.2.0.1) — Set:
    mosip.supported-languages=eng,amh
    mosip.mandatory-languages=eng
    mosip.optional-languages=amh
    mosip.min-languages.count=1
    mosip.max-languages.count=2

  3. Config-server — Discovered our config-server pod had no git label/branch set at all (defaulting to master, not our identy-v1.2.0.1 branch, which is why our properties changes weren’t taking effect even though the Helm values file showed gitRepo.version: identy-v1.2.0.1 — the chart wasn’t actually wiring that value into an env var). Fixed by patching the config-server-env-vars ConfigMap to add SPRING_CLOUD_CONFIG_SERVER_GIT_DEFAULT_LABEL=identy-v1.2.0.1, then restarted the deployment.

  4. Verified all the way down the chain — Queried the kernel syncdata-service directly (curl …/actuator/env) and confirmed it correctly resolves:
    mosip.supported-languages = eng,amh
    mosip.optional-languages = amh
    mosip.max-languages.count = 2
    …all sourced from our git branch’s application-default.properties. So config-server → syncdata-service is confirmed fully correct.

  5. Registration Client — Ran Check Updates + Synchronize Data multiple times (including full app restart, not just re-login) after each backend change. Sync logs (registration.log) show ‘config data sync is completed’ with no errors, and GlobalParamDAOImpl shows ‘Save Global Params’ succeeding.

  6. Artifactory / i18n resource files — Discovered resources.zip (served from artifactory, which stores it on ephemeral container storage) was missing messages_amh.properties — only labels_amh.properties had been added previously. Rebuilt the zip with both labels_amh.properties and messages_amh.properties included (16 files total) and re-uploaded to the artifactory pod’s reg-client resources.zip. Verified via unzip -l that both files are now present.

Current state: Despite all of the above, after another Check Updates + Synchronize Data cycle, the amh checkbox in the Select Language dialog is still visible in the list but remains disabled/not clickable. English remains selectable as before.

Questions:

  • Is there another sync job or cache (beyond config data sync / master data sync) that governs whether a language checkbox is enabled vs. just displayed?
  • Is there a separate local DB table/flag (e.g., in the Registration Client’s embedded DB) that needs to be explicitly updated for a language to become selectable, beyond global_param and master.language?
  • Are there additional required artifacts (e.g., UI spec JSON per screen needing amh label entries, or a specific i18n resource naming/location) beyond labels_amh.properties and messages_amh.properties in resources.zip?

Happy to share logs/screenshots if that helps. Any pointers appreciated.

Environment: MOSIP sandbox-v2, Registration Client 1.2.0.2, config-server 12.0.1 (chart), kernel-syncdata-service 1.2.0.1.
please share the specific document if you have .. it would be more helpful

Hi @HariHaran_R ,

Thank you for reaching out to us.

Could you please share the relevant logs for the issue? This will help us investigate the root cause and assist you in resolving it as quickly as possible.

Regards,
Team MOSIP

Hi Varaniya1, thanks for the quick response. Here’s the screenshot of the error from the Registration Client startup log:

We followed the module configuration guide ( Module Configurations | MOSIP Docs 1.2.0 ) to add amh as an optional language — setting mosip.optional-languages, mosip.max-languages.count, etc. in application-default.properties, and adding amh to master.language.

We’ve also already created and uploaded the required resource bundle files — labels_amh.properties and messages_amh.properties (copied from the English versions and translated) — into the resources.zip served via artifactory, alongside the existing bundles for en, hi, fr, ta, kn, ar. Confirmed both files are present in the live zip via unzip -l.

Despite this, the Registration Client still throws the ResourceBundle error above at startup.

While investigating further, we found that amh has zero rows in several master data tables that every other working language (eng, ara, hin, etc.) has fully populated — specifically master.template (289 rows for eng/ara, 0 for amh), master.reason_list, master.gender, master.doc_type, master.dynamic_field, master.id_type, master.title, master.status_list, master.status_type, master.template_file_format, master.individual_type, master.doc_category, and master.biometric_attribute.

Question: Is this ResourceBundle error tied to the resources.zip labels/messages files specifically, or could missing master data (like master.template) also trigger it? We’re currently populating these tables for amh (copied from eng as placeholders) to test. Would appreciate confirmation on whether this is the right direction, or if there’s a specific document covering the full set of master data required per language (beyond what’s in the module-configuration guide) that we should be following instead.

Hi @HariHaran_R,

Thanks for sharing the error, this confirms the root cause. To answer your question directly: the REG-INT-002 error is tied to the resource bundle files, not to the missing master data.

REG-INT-002 (RESOURCEBUNDLE is not available for configured languages) is thrown when the client validates its configured language list against the resource bundles available locally on the client machine. Your config chain is working correctly, the client received eng,amh as configured languages. But, it cannot find the amh bundles (labels_amh.properties / messages_amh.properties) in its local resources. This is also why the checkbox stays disabled: the client will not enable a language whose bundles it cannot load. Missing master data rows would never trigger this error, those cause different failures later in the flow (empty dropdowns, template errors during consent/acknowledgement).

The reason your fix hasn’t taken effect: resources.zip is picked up when the client is downloaded/installed, not during Check Updates / Synchronize Data. You re-uploaded the corrected zip to artifactory after the client was already installed, so the running client is still on the old bundle set.

To resolve:

  1. Re-download and reinstall the reg-client from the hosted URL (this pulls the updated resources.zip), or verify/copy both labels_amh.properties and messages_amh.properties into the installed client’s resources folder manually and restart.
  2. Cross-check the filenames match the language code exactly (_amh, lowercase) and the file encoding is consistent with the working bundles, for Amharic script, ensure the values are unicode-escaped or saved in the same encoding as your existing ara files.

Once the bundles are available locally, the startup error should clear and the amh checkbox should become selectable, since everything upstream (config-server → syncdata → client sync) is already verified correct on your side.

On the master data:
Populating those tables is still required and you’re on the right track, master.template, gender, doc_type, doc_category, dynamic_field, etc. are all language-coded and needed for the registration flow to work end-to-end in amh (templates drive the consent page, acknowledgement receipt, and notifications; the rest populate the form dropdowns). Copying the eng rows with lang_code = 'amh' as placeholders and translating iteratively is a valid approach. There is no single document covering the full per-language master data set beyond the module-configuration guide, the existing eng/ara rows in your DB are the most reliable reference. So please continue that in parallel; it won’t fix the startup error, but it’s needed before amh is fully usable in the flow.

Please try the client reinstall and let us know the result.

Thanks and Regards,
Gokulraj C,
Team MOSIP.

Hi Gokulraj,

Thanks for the detailed explanation. We tried both approaches you suggested — manually copying labels_amh.properties / messages_amh.properties into the installed client’s local resources folder, and a full reinstall (fresh download + install) — but the REG-INIT-002 ResourceBundle error still occurs and the checkbox remains disabled.

A few specific questions:

  1. Naming/syntax: Can you confirm the exact expected filename pattern the client’s ResourceBundle.getBundle() call uses — is it labels_amh (3-letter ISO 639-2, matching our mosip.optional-languages=amh config), or does it expect a 2-letter code like labels_am? We noticed all our other working languages (en, hi, fr, ta, kn, ar) use 2-letter suffixes despite the config itself using 3-letter codes (eng, hin, fra, tam, kan, ara) — we want to confirm whether the bundle filename should follow the config code or the ISO 639-1 short code.
  2. Encoding: Could you confirm the exact encoding/format expected for non-Latin scripts — is it native UTF-8, or does the client require native2ascii-style Unicode escape sequences (\uXXXX) like older Java .properties conventions? We want to rule out an encoding mismatch as the cause.
  3. Reference file: Would it be possible to share a working labels_ar.properties or messages_ar.properties (or point us to where in the registration-client GitHub repo these ship from, if they’re bundled in source rather than only in resources.zip) so we can diff our Amharic file’s structure/encoding directly against a known-working one?
  4. Client-side location: After reinstalling fresh (pulling the updated resources.zip), is there a specific local folder path where the client extracts/expects these bundle files that we should verify directly (separate from the ones bundled in resources.zip on artifactory), in case the reinstall isn’t unpacking them where the client actually looks?

We can share our current labels_amh.properties file content for review if that would help pinpoint the issue.

Thanks again for your help,

Hariharan

type or paste#Demographic Details *******START********
#
search_for_Pre_registration_id=የቅድመ-ምዝገባ መታወቂያ
fetch=ዳታ አምጣ
search=ፈልግ

#(Currently Un-used)
fullName=ሙሉ ስም
ageField=ዕድሜ
gender=ጾታ
male=ወንድ
female=ሴት
maleCode=MLE
femaleCode=FLE
devicetype=የመሳሪያ አይነት
ageDatePicker=የልደት ቀን
addressLine1=አድራሻ መስመር 1
addressLine2=አድራሻ መስመር 2
addressLine3=አድራሻ መስመር 3
region=ክልል
Region=ክልል
city=ከተማ
City=ከተማ
province=ዞን
Province=ዞን
postalCode=የፖስታ ኮድ
PostalCode=የፖስታ ኮድ
zone=ቀበሌ
Zone=ቀበሌ
phone=የሞባይል ቁጥር
email=ኢሜይል አድራሻ
cniOrPinNumber =የማጣቀሻ መታወቂያ ቁጥር
next=ቀጣይ
uinId=የወላጅ/አሳዳጊ RID/UIN
saveState=ሰነዱን ካስቀመጡ/ከሰረዙ በኋላ ሁኔታውን ለማስቀምጥ አስቀምጥ ቁልፍን ጠቅ ያድርጉ
uinIdUinUpdate=የወላጅ/አሳዳጊ UIN
parentRegId=የወላጅ/አሳዳጊ RID
parentUinId=የወላጅ/አሳዳጊ UIN
uinUpdateNavLbl=/ UIN ዝማኔ
parentName=የወላጅ/አሳዳጊ ስም
parentOrGuardianName=የወላጅ/አሳዳጊ ስም
parentOrGuardianUIN=የወላጅ/አሳዳጊ RID/UIN

#Demographic Details Title
titleDemographicPane=ስነ-ህዝብ መረጃ
#Demographic screen language title
language=አማርኛ

# Demographic Details *******END*******


# Document Screen ******START*******
#
#(Currently unused)
POA_DOCUMENT_EMPTY=የአድራሻ ማስረጃ ሰነድ
POI_DOCUMENT_EMPTY=የማንነት ማስረጃ ሰነድ
POR_DOCUMENT_EMPTY=የዝምድና ማስረጃ ሰነድ
DOB_DOCUMENT_EMPTY=የልደት ቀን ሰነድ
save=አስቀምጥ
totalpages=ጠቅላላ ገጾች
scanning=በመቃኘት ላይ...
cancel=ሰርዝ
#Capture button  for bio/documents
crop=ቁረጥ
REF_NUMBER=የማጣቀሻ ቁጥር
#
# Document Screen ******END*******

#Biometric screen ***********START***********
#
exceptionCheckBoxPaneLabel =ልዩ ሁኔታዎችን ምልክት አድርግ
Exception_Photo =የልዩ ሁኔታ ፎቶ
#Exceptions bio attributes
leftIndex=ግራ እጅ - ጠቋሚ ጣት
leftMiddle=ግራ እጅ - መካከለኛ ጣት
leftRing=ግራ እጅ - የቀለበት ጣት
leftLittle=ግራ እጅ - ትንሽ ጣት
leftThumb=ግራ እጅ - አውራ ጣት
rightIndex=ቀኝ እጅ - ጠቋሚ ጣት
rightMiddle=ቀኝ እጅ - መካከለኛ ጣት
rightRing=ቀኝ እጅ - የቀለበት ጣት
rightLittle=ቀኝ እጅ - ትንሽ ጣት
rightThumb=ቀኝ እጅ - አውራ ጣት
leftEye=ግራ ዐይን
rightEye=ቀኝ ዐይን
RightEye=ቀኝ ዐይን
qualityPercent=ጥራት %
thresholdPercent=ደረጃ %
exceptions=ልዩ ሁኔታዎች
fingerprintexception=የጣት አሻራ ልዩ ሁኔታ
iris=ዐይን
leftIris=ግራ ዐይን
rightIris=ቀኝ ዐይን
takePhoto=ፎቶ አንሳ
#Biometric with/without Exception Screen (Not Used)
biometricException=ባዮሜትሪክ ልዩ ሁኔታ
applicantbiometric=አመልካቺ ባዮሜትሪክ
/biometricException=/ ባዮሜትሪክ ልዩ ሁኔታ
#Labels used to show Biometric information in Biometric screen
quality=ጥራት
threshold=ደረጃ
mdsQuality= MDS ጥራት
sdkQuality= SDK ጥራት
lefthandpalm=የግራ እጅ መዳፍ
individualphoto=ፎቶ
exceptionphoto=የልዩ ሁኔታ ፎቶ
righthandpalm=የቀኝ እጅ መዳፍ
thumb=አውራ ጣቶች
lefteye=ግራ ዐይን
percentageValue=80%
righteye=ቀኝ ዐይን
#Scan button label while capturing biometrics
scan=ቃኘ
#Biometric screen used (on hover of the image, labels on scaneed image, etc)
leftHand=ግራ እጅ
rightHand=ቀኝ እጅ
thumbs=አውራ ጣቶች
attempts=ሙከራዎች
applicantname=የአመልካቺ ስም
#Used for Toggle to select exception required (Currently - not in use)
biometricexceptionrequired=ባዮሜትሪክ ልዩ ሁኔታ ያስፈልጋል?
#
#Biometric screen ***********END***********


# Preview Screen ********* START********
#
#Preview screen title
preview=ቅድመ ዕይታ
#Edit option used to edit/modify by navigating from preview screen
edit=አስተካክል
#Preview Template
preRegistrationId=የቅድመ-ምዝገባ መታወቂያ
applicationId=የማመልከቻ መታወቂያ
#exception=Fingerprint exception
demographicInformation=ስነ-ህዝብ መረጃ
years=ዓመታት
foreigner=የውጭ ዜጋ
national=ዜጋ
biometricsHeading=ባዮሜትሪክስ
registrationcenter=የምዝገባ ማዕከል
importantguidelines=አስፈላጊ መመሪያዎች
fingersCount=ጣቶች ({0})
irisCount=ዐይን ({0})
faceCount=ፊት
comma=,
registrationpreview=የምዝገባ ቅድመ ዕይታ
#Preview Screen
modify=ቀይር
consent=ግላዊ መረጃዬን ለማከማቸት እና ለመጠቀም ፈቃዴን እሰጣለሁ።

FINGERPRINT_SLAB_LEFT=ግራ እጅ
FINGERPRINT_SLAB_RIGHT=ቀኝ እጅ
FINGERPRINT_SLAB_THUMBS=አውራ ጣቶች
FACE=ፊት
IRIS=ዐይን
introducer=አስተዋዋቂ
applicant=አመልካቺ
IRIS_DOUBLE=ዐይን
EXCEPTION_PHOTO=የልዩ ሁኔታ ፎቶ
#
# Preview Screen ********* END********

#Authentication / EOD APPROVAL / Re-Registration Screen *************START**********
#
rofingerprintauthentication=በጣት አሻራ ማረጋገጥ
roirisauthentication=RO ዐይን ማረጋገጥ
rofaceauthentication=RO ፊት ማረጋገጥ
supervisorauthentication=የተቆጣጣሪ ማረጋገጫ
operatorauthentication=የኦፕሬተር ማረጋገጫ

#Re-Registration
approved/rejected=\\u24D8 የጸደቁ/የተቀቡ ማመልከቻዎች ሁሉ ከማረጋገጥ በኋላ ተጠናቀቁ ይባላሉ። በቢጫ የተደምቁ የማመልከቻ መታወቂያዎች ተዘጋጊ ቃላት እንዳሉ ያሳያሉ።
packetssyncstatus=የፓኬት ሲንክ ሁኔታ
statusfromserver=ከሰርቨር ያለው ሁኔታ
reasonforrejection=የመቀበያ ምክንያት
informed=ተነገሮታል
cantinformed=ሊነገረው አልቻለም
aplicatoinactioned=ሁሉም ማመልከቻዎች ከተፈጸሙ በኋላ።

photoAuthentication=በፎቶ ማረጋገጥ
irisAuthentication=በዐይን ቅኝት ማረጋገጥ
fpAuthentication=በጣት አሻራ ማረጋገጥ
pwdAuthentication=በይለፍ ቃል ማረጋገጥ
otpAuthentication=በOTP ማረጋገጥ
supervisorPhotoAuth=ተቆጣጣሪ በፎቶ ማረጋገጥ
supervisorIrisAuth=ተቆጣጣሪ በዐይን ቅኝት ማረጋገጥ
supervisorFpAuth=ተቆጣጣሪ በጣት አሻራ ማረጋገጥ
supervisorPwdAuth=ተቆጣጣሪ በይለፍ ቃል ማረጋገጥ
supervisorOtpAuth=ተቆጣጣሪ በOTP ማረጋገጥ

reviewerPhotoAuth=ገምጋሚ በፎቶ ማረጋገጥ
reviewerIrisAuth=ገምጋሚ በዐይን ቅኝት ማረጋገጥ
reviewerFpAuth=ገምጋሚ በጣት አሻራ ማረጋገጥ
reviewerPwdAuth=ገምጋሚ በይለፍ ቃል ማረጋገጥ
reviewerOtpAuth=ገምጋሚ በOTP ማረጋገጥ

#EOD Approval
reasonforonhold=በእቋቋም ምክንያት
pendingapproval=በመጠባበቅ ላይ ያለ ፈቃድ
/pendingapproval=/ በመጠባበቅ ላይ ያለ ፈቃድ
/approveregistration=/ ምዝገባ አጽድቅ
registrationid=የምዝገባ መታወቂያ
registrtionid=የምዝገባ መታወቂያ
authenticate=አረጋግጥ
reject=ውድቅ አድርግ
approve=አጽድቅ

#Re-Registration
reregister=ለድጋሚ ምዝገባ ማሳወቂያ

#
#Authentication / EOD APPROVAL / Re-Registration Screen *************END**********

# Home Page *********START**********
#
regClientVersion = የምዝገባ-ደንበኛ ስሪት
captureTime=የቀረጻ ጊዜ

lastsynctemp=የመጨረሻ ሲንክ - በ
applications=18 ማመልከቻዎች

remap=የማዕከል ዳግም ማሃዘን ሲንክ
logout=ውጣ
eodprocess=የቀን መጨረሻ ሂደት
uploadpacket=ማመልከቻ ስቀል
virusscan=ቫይረስ ቃኘ
syncdata=ዳታ አሳምን
home=መነሻ

internetOnline=ስርዓቱ ኦንላይን ነው
internetOffline=ስርዓቱ ኦፍላይን ነው
synchronizeData=ዳታ አሳምን
downloadPreregistrationData=የቅድመ-ምዝገባ ዳታ አውርድ
updateOperatorBiometrics=የኦፕሬተር ባዮሜትሪክስ አዘምን
endofDayProcesses=የቀን መጨረሻ ሂደቶች
reRegistration=ለድጋሚ ምዝገባ ማሳወቂያ
/reRegistration=/ ለድጋሚ ምዝገባ ማሳወቂያ
viewReport=ሪፖርት ተመልከት
dashBoard=ዳሽቦርድ
newsandUpdates=ዜናዎች እና ዝማኔዎች
viewall=ሁሉንም ተመልከት

checkUpdates=ዝማኔዎችን ፈትሽ
scanqr=QR ቃኘ
#
# Home Page *********END**********


#Packet Upload Screen **********START******
#
operatorId=የኦፕሬተር መታወቂያ
files=የፓኬት መታወቂያ
status=የስቀላ ሁኔታ
upload=ስቀል
/uploadpacket=/ ፓኬት ስቀል
/syncdataprocess=/ ዳታ ማሳምን ሂደት

saveToDevice=ወደ መሳሪያ አስቀምጥ
otp=OTP
#
#Packet Upload Screen **********END****


#Login Screen   ********START******
#
registrationlogin=ግባ
resendotp=OTP ደግሞ ላክ
withusername=የተጠቃሚ ስምዎን ያስገቡ
withpword=የይለፍ ቃልዎን ያስገቡ
withotp=OTP ያስገቡ
username=የተጠቃሚ ስም
password=የይለፍ ቃል
enterotp=OTP ያስገቡ

forgotUsername=የተጠቃሚ ስም ረሱ
forgotPword=የይለፍ ቃል ረሱ
resetPassword=የይለፍ ቃል ዳግም አስጀምር

#
#Login Screen *****END*****


#Registration label to show as a step-step process
/newregistration=/ አዲስ ምዝገባ

#Registration Acknwlegement Title
registration=የምዝገባ ማረጋገጫ

#Acknowledgemenet print request label
print=አትም

#New Registration button label
newregistration=አዲስ ምዝገባ



# Get OTP label Login screen and otp autrh screen
getotp=OTP ውሰድ
nolanguage=ቋንቋ የለም
registrationofficerverification=የምዝገባ ኦፊሰር ማረጋገጫ

submit=አስረክብ

cancelUpperCase=ሰርዝ
submitUpperCase=አስረክብ
selectLanguageText=እባክዎን ለዳታ ግቤት {0} ቋንቋዎችን ይምረጡ። {1} መንግስት ባወጣው መመሪያ መሰረት ነዋሪው መምረጥ ያለበት አስፈላጊ ቋንቋ ነው። የምርጫ ቅደም ተከተል ለስነ-ህዝብ ዳታ የገጽ ዕይታ ያመጣል።
mandatoryLanguage={0} - መንግስት ባወጣው መመሪያ መሰረት ነዋሪው መምረጥ ያለበት አስፈላጊ ቋንቋ ነው።
selectLanguageFooterText=እባክዎን ልብ ይበሉ፣ ቋንቋዎቹ በቅድመ-ምዝገባ ወቅት በገቡት ዳታ ላይ ሊመሰረቱ ይችላሉ።
selectLangError=እባክዎን ቢያንስ አንድ አስፈላጊ ቋንቋ ከዝርዝሩ ይምረጡ።

x=X

/registration=/ አዲስ ምዝገባ


internalsystemerror.pleasecontactadmin.=የውስጥ ስርዓት ስህተት። እባክዎ አስተዳዳሪን ያነጋግሩ።
fingerprint=ጣት አሻራ
previous=ቀዳሚ
rooffice=RO ቢሮ                                          :
roid=RO መታወቂያ                                                :
roname=RO ስም    

onboarduser=የኦፕሬተር ባዮሜትሪክስ አዘምን


aboutus=ስለ እኛ
faq=ተደጋጋሚ ጥያቄዎች
contact=ያግኙን



mosip.io=
uinupdate=UIN ዝማኔ
lostuin=የጠፋ UIN

/lostuin=/ የጠፋ UIN
/uinupdate=/ UIN ዝማኔ

uin=UIN
selecttoupdate=መዘመን ያለባቸውን መረጃዎች ይምረጡ

clear=አጥፋ
close=ዝጋ

running=በሂደት ላይ
lastcompleted=የመጨረሻ ተጠናቅቆ
history=ታሪክ
jobid=የስራ መታወቂያ
jobname=የስራ ስም
lastupdatedtime=የመጨረሻ ዝማኔ ጊዜ
startsyncdata=ዳታ ማሳምን ጀምር
stopsyncdata=ዳታ ማሳምን አቁም


/acknowledgement=/ ማረጋገጫ
goToHome=ወደ መነሻ ሂድ
sendEmail=ኢሜይል / SMS ላክ
downloadPDF=PDF አውርድ


getOnboarded=ምዝገባ ጀምር

homeLink=መነሻ /
onboardOperator= ኦፕሬተር ምዝገባ
/onboardOperator= /ኦፕሬተር ምዝገባ


enterEmail=ኢሜይል መታወቂያ ያስገቡ
enterMobile=የሞባይል ቁጥር ያስገቡ
email/smsAck=ኢሜይል / SMS ማረጋገጫ
send=ላክ
Phone=ስልክ
Email=ኢሜይል
fingerprints=ጣት አሻራዎች

uinno=የUIN ቁጥር ያስገቡ

startOver =ዳግም ጀምር

previewprevious=<  ቀዳሚ
previewnext=ቀጣይ  >
consentHeading=ፈቃድ
back=ተመለስ
continue=ቀጥል
view=ቅድመ ዕይታ


onboardAlertMsg = ተጠቃሚው በተሳካ ሁኔታ ተመዝግቧል


ageOrDOBField = ወይም
userGuide = የተጠቃሚ መመሪያ
registeringIndividual = ግለሰብ መመዝገብ
onboardingYourself = ራስዎን መመዝገብ
synchronizingData = ዳታ ማሳምን
mappingDevices = መሳሪያዎችን ወደ ማሽን መካፈል
uploadingData = ዳታ መስቀል
updatingBiometrics = ባዮሜትሪክስ ማዘምን
parentOrGuardianRID = ወላጅ / አሳዳጊ
parentOrGuardian = ወላጅ / አሳዳጊ
saveToDeviceLable=ማሳሰቢያ: ፓኬቶችን ወደ መሳሪያ ማስቀምጥ ሁሉንም ፓኬቶች ያወጣል
dedupeMessage=ማረጋገጫዎች እየተፈጸሙ ናቸው። እባክዎ ይጠብቁ።
registrationTasks=የምዝገባ ተግባራት
operationalTasks=የስራ ተግባራት

applicantimage=ፎቶ
exceptionimage=የልዩ ሁኔታ ፎቶ
image=ፎቶ
userid=የተጠቃሚ መታወቂያ
role=ሚና
fingerprintimage=የጣት አሻራ ምስል
irisimage=የዐይን ምስል
stationid=የጣቢያ መታወቂያ       :
biometrics=ባዮሜትሪክስ -
capture=ቀርጽ
biometrics_captured=ባዮሜትሪክስ ተቀርጿል
documents=ሰነዶች
date=ቀን
ro_name=የምዝገባ ኦፊሰር
dd=ቀን
mm=ወር
yyyy=ዓ.ም
copyPrevious=ቀዳሚ ቅዳ
exception=ልዩ ሁኔታ
parentUIN=የወላጅ/አሳዳጊ RID/UIN
uinUpdateParentUIN=የወላጅ/አሳዳጊ UIN
fingerprintinstruction=ጣትዎን በስካነር ላይ ያስቀምጡ
irisinstruction=ግራ ዐይንዎን ወደ ስካነር ያቅርቡ
faceinstruction=ፊትዎን ወደ ካሜራ ያቅርቡ
isadult=አመልካቺው አዋቂ ነው?
Foreigner/National = የውጭ ዜጋ/ዜጋ
residenceStatus=የነዋሪነት ሁኔታ
machineID=የማሽን መታወቂያ
registrationCentreID=የምዝገባ ማዕከል መታወቂያ
irisexception=የዐይን ልዩ ሁኔታ
markedasException=እንደ ልዩ ሁኔታ ምልክት ተደርጓል
clicktomarktheparticular=ምልክት ለማድረግ ጠቅ ያድርጉ
finger/Iris= ጣት / ዐይን 
asException=እንደ ልዩ ሁኔታ
documentEvidence=ሰነድ ማስረጃ
selectProForException=ለልዩ ሁኔታ ማስረጃ ይምረጡ
authentication=ማረጋገጫ
biometricDetails=ባዮሜትሪክ መረጃ
uploadDocuments=ሰነዶች ስቀል
demograhpicDetails=ስነ-ህዝብ መረጃ
exceptionCount=ልዩ ሁኔታ
searchRegistration=የምዝገባ መታወቂያ ፈልግ
searchPacketID=የፓኬት መታወቂያ ፈልግ
searchPacketIDOpId=የፓኬት / ኦፕሬተር መታወቂያ ፈልግ
searchApplication=የማመልከቻ መታወቂያ ፈልግ
searchAppIDOpId=የማመልከቻ / ኦፕሬተር መታወቂያ ፈልግ
registrationDate=የምዝገባ ቀን
registrationType=የምዝገባ አይነት
clientStatus=የደንበኛ ሁኔታ
serverStatus=የሰርቨር ሁኔታ
clearFilters=ማጣሪያዎች አጥፋ
statusComments=የሁኔታ አስተያየቶች
slno=ተ.ቁ
eodDate=የምዝገባ ቀን
select=ምረጥ
parentPhoto=የወላጅ ፎቶ
exceptionTracker=ልዩ ሁኔታ
fingerPrintTracker=ጣት አሻራዎች
leftHandTracker=ግራ እጅ
rightHandTracker=ቀኝ እጅ
thumbTracker=አውራ ጣቶች
irisTracker=ዐይን
leftIrisTracker=ግራ ዐይን
rightIrisTracker=ቀኝ ዐይን
photoTracker=ፎቶ
exceptionPhotoTracker=የልዩ ሁኔታ ፎቶ
Index=ጠቋሚ
Middle=መካከለኛ
Ring=የቀለበት
Little=ትንሽ
LeftThumb=ግራ አውራ ጣት
RightThumb=ቀኝ አውራ ጣት
finger=ጣት
scanpreview=የቅኝት ቅድመ ዕይታ
demographicdetailsdemographicdetails=ስነ-ህዝብ መረጃ                                                                              ስነ-ህዝብ መረጃ

availabledevices=ያሉ መሳሪያዎች
mappeddevices=የተካፈሉ መሳሪያዎች
irisscan=የዐይን ቅኝት
guardianBiometric=ወላጆች / አሳዳጊ - ባዮሜትሪክስ

uinUpdateBiometrics=ባዮሜትሪክ
age/dob=ዕድሜ / የልደት ቀን
name=ስም
copyaddress=አድራሻ ቅዳ
applicantbiometrics=አመልካቺ ባዮሜትሪክስ
cnie/pin/residencecardnumber=የማጣቀሻ መታወቂያ ቁጥር
parent/guardiandetails=የወላጅ/አሳዳጊ መረጃ
address=አድራሻ
contactdetails=የዕውቂያ መረጃ
adult=አዋቂ
child=ህፃን

previewHeader=ቅድመ ዕይታ
defaultHeader=የነዋሪ መረጃ
selectLanguage=ቋንቋ ምረጥ

#dashboard template values
totalPacketsLabel=# የተፈጠሩ ፓኬቶች
pendingEODLabel=# በቀን መጨረሻ የሚጠባበቁ
pendingUploadLabel=# ስቀላ የሚጠባበቁ
syncactivities=የሲንክ እንቅስቃሴዎች
version=ስሪት
regclient=የምዝገባ ደንበኛ
idschema=መታወቂያ ስኪማ
installedTime=ፕሮግራሙ የተጫነበት ጊዜ
lastSWUpdate=የመጨረሻ ሶፍትዌር ዝማኔ

withfingerprint=ጣትዎን ለቅኝት በመሳሪያው ላይ ያስቀምጡ
withiris=ዐይንዎን ወደ ስካነር ያቅርቡ
withface=ፊትዎን ወደ ካሜራ ያቅርቡ
stream=ስትሪም

chooselanguage=ቋንቋ ምረጥ

#Settings page
runNow=አሁን አሄድ
lastRun=የመጨረሻ አሂድ: 
nextRun=ቀጣይ አሂድ: 
cronExpression=Cron አገላለጽ:
globalConfigKey=ቁልፍ
serverValue=የሰርቨር ዋጋ
localValue=የአካባቢ ዋጋ
update=አዘምን
submitPreferences=ምርጫዎች አስረክብ
searchKey=ቁልፍ ፈልግ
portRange=የፖርት ክልል:
fromPort=ከ ፖርት
toPort=ወደ ፖርት
scanNow=አሁን ቃኘ
serialNumber=ሲሪያል ቁጥር: 
make=ሰሪ: 
model=ሞዴል: 
deviceId=መታወቂያ: 
deviceName=ስም: 
webcam=ዌብ ካሜራ
wia=WIA
refreshStatus=የመሳሪያ ሁኔታ አድስ
addShortcut=ወደ መነሻ ስክሪን አቋራጭ ጨምር

officerbiometrics=ተቆጣጣሪ / ኦፕሬተር ባዮሜትሪክስ

correctionregistration=የማስተካከያ ሂደት

additionalInfoRequestId=ተጨማሪ መረጃ ጥያቄ መታወቂያ

FingersLabel=ጣቶች
IrisLabel=ዐይን
FaceLabel=ፊት
Users=ተጠቃሚዎች

accept_word=ተቀበል
slash= / 
reject_word=ውድቅ አድርግ
 code here

Hi @HariHaran_R,

Good to know, your question #1 is exactly the root cause.
I checked the 1.2.0.2 source to confirm this. The answer is clear: the bundle filenames must use the 2-letter ISO 639-1 code, not the 3-letter config code. Rename your files to labels_am.properties and messages_am.properties.

1. Naming: This is the root cause of the problem. In ApplicationContext.loadResourceBundle() (registration-services, 1.2.0.2), the client converts each configured 3-letter code to its ISO 639-1 alpha-2 equivalent using the com.neovisionaries.i18n.LanguageAlpha3Code library. It builds a Locale from that 2-letter code, and calls ResourceBundle.getBundle("labels", locale). So for amh it resolves Locale("am") and looks for labels_am.properties, a file named labels_amh.properties is never a candidate, which is why both your manual copy and the fresh reinstall still failed. If the bundle for that locale isn’t found, it throws exactly the REG-INIT-002 you’re seeing. This also explains the pattern you noticed with the existing languages, kankn confirms it’s the ISO mapping (a substring approach would have produced ka).

2. Encoding: Native UTF-8 is fine - the bundles are loaded via PropertyResourceBundle, which reads UTF-8 by default on the client’s Java 11 runtime. Your working ar bundles in the same zip already prove the UTF-8 path works in your setup, and the Amharic content you shared looks correctly encoded. Just make sure the file is saved as UTF-8 without BOM. You can also use \uXXXX escapes. You do not need to convert.

3. Reference files: The working bundles ship from the registration-client repo itself. You can compare them directly to labels_ar.properties and messages_ar.properties at the 1.2.0.2 tag (path: registration/registration-client/src/main/resources/). Structurally, your file looks right, only the filename is the problem.

4. Client-side location: The bundles are resolved from the client’s classpath, which is the same location where labels_en.properties lives in your installed client. For a quick verification before repackaging: locate where labels_en.properties sits in the installed client (inside the client jar/resources on the classpath) and place the renamed labels_am.properties / messages_am.properties alongside it, then restart. Once confirmed, update the filenames in your resources.zip on artifactory so fresh installs pick them up going forward.

After you rename the files, the REG-INIT-002 error should go away. The amh checkbox should become selectable. The language dialog only enables languages whose bundles were successfully registered at startup, which’s why you are seeing both symptoms.

Please remember that the master data population we discussed earlier is still needed for the end-to-end flow. So do continue that in parallel.

Let us know how it goes after you rename the files.

Thanks and Regards,
Gokulraj C,
Team MOSIP.

Hi Gokulraj,

Following your fix, we renamed the bundle files to labels_am.properties / messages_am.properties (confirmed correct Amharic content inside, e.g. ሙሉ ስም, ጾታ) and re-deployed them to our artifactory pod as follows:

How we deployed the files to artifactory:

  1. Our artifactory pod runs as a non-root user (mosip, uid 1001) by default, so resources.zip is write-protected
  2. We temporarily patched the deployment’s securityContext to runAsUser: 0 to get write access:
   kubectl patch deployment artifactory -n artifactory --patch '{"spec":{"template":{"spec":{"securityContext":{"runAsUser":0}}}}}'
  1. Extracted the current resources.zip from the pod, removed the incorrect labels_amh.properties / messages_amh.properties files, confirmed only the correctly-named labels_am.properties / messages_am.properties remained
  2. Re-zipped and re-uploaded via kubectl cp, replacing the old resources.zip in /usr/share/nginx/html/artifactory/libs-release-local/reg-client/
  3. Verified via unzip -l on the pod that the live zip now only contains the correct _am files (no _amh leftovers)

We then did a completely fresh Registration Client install (deleted old install folder, redownloaded, confirmed no cached files) to make sure it pulled the updated resources.zip, per your earlier note that this only happens at install time.

Result: The client did not crash outright this time — it progressed past the error into normal startup (global params fetch, network checks, login service reached). However, the amh checkbox is still disabled, and we see this specific log line:

2026-07-15 13:03:49,042 ERROR [JavaFX-Launcher] i.m.r.c.ApplicationContext : ResourceBundle not found for configured langcode

Notice the langcode value itself is blank — not amh, not am. eng resolves fine (no error logged for it). Since we’ve confirmed the correctly-named am files are present in the live resources.zip and the install is fresh, this looks like it could be the LanguageAlpha3Code conversion returning empty/null specifically when processing amh, rather than a file-location issue.

Could you help clarify: is there a known issue with this specific alpha-3 code (amh) not mapping correctly via the com.neovisionaries.i18n.LanguageAlpha3Code library, or could this blank value point to something else in the config parsing (e.g., how mosip.optional-languages is split/iterated)?

Our current config:

mosip.supported-languages=eng,amh
mosip.mandatory-languages=eng
mosip.optional-languages=amh

Happy to share more log context or our artifactory deployment YAML if helpful.

Thanks,
Hariharan

logs

2026-07-15 13:03:40,361 INFO [JavaFX-Launcher] i.m.r.c.DaoConfig : REGISTRATION - DAO Config - DB - REGISTRATION - REG - Security setup check is complete & success.
2026-07-15 13:03:40,362 INFO [JavaFX-Launcher] i.m.k.c.s.i.TPMClientCryptoServiceImpl : ccSessionID - TPM -  - Getting Asymmetric Key Creation from tpm
2026-07-15 13:03:43,994 INFO [JavaFX-Launcher] i.m.k.k.h.i.KeyStoreImpl : ksSessionId - KeyStoreImpl-Main - KeyStoreImpl - Found Clazz to load for Keystore Impl: io.mosip.kernel.keymanager.hsm.impl.offline.OLKeyStoreImpl
2026-07-15 13:03:43,994 INFO [JavaFX-Launcher] i.m.k.k.h.i.KeyStoreImpl : ksSessionId - KeyStoreImpl-Main - KeyStoreImpl - Successfully loaded Clazz for Keystore Impl: io.mosip.kernel.keymanager.hsm.impl.offline.OLKeyStoreImpl
2026-07-15 13:03:47,328 INFO [JavaFX-Launcher] i.m.k.b.p.f.BioAPIFactory : Starting initialization for vendor mockvendor with params >> {IRIS={version=0.9, threshold=60, args=, classname=io.mosip.mock.sdk.impl.SampleSDK}, FINGER={threshold=60, classname=io.mosip.mock.sdk.impl.SampleSDK, version=0.9, args=}, FACE={threshold=60, classname=io.mosip.mock.sdk.impl.SampleSDK, args=, version=0.9}}
2026-07-15 13:03:47,425 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: QUALITY_CHECK
2026-07-15 13:03:47,425 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: CONVERT_FORMAT
2026-07-15 13:03:47,425 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: EXTRACT
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: MATCH
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: QUALITY_CHECK
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: CONVERT_FORMAT
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: EXTRACT
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: MATCH
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: QUALITY_CHECK
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: CONVERT_FORMAT
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: EXTRACT
2026-07-15 13:03:47,426 INFO [JavaFX-Launcher] i.m.k.b.p.i.BioProviderImpl_V_0_9 : Successfully registered SDK : sample, BiometricFunction: MATCH
2026-07-15 13:03:47,714 INFO [JavaFX-Launcher] i.m.r.c.RestartController : REGISTRATION - RESTART  - RESTART CONTROLLER - REGISTRATION - REG - Initiate Restart Timer started
2026-07-15 13:03:47,714 INFO [JavaFX-Launcher] i.m.r.c.RestartController : REGISTRATION - RESTART  - RESTART CONTROLLER - REGISTRATION - REG - Creation of sync restart timer started
2026-07-15 13:03:47,714 INFO [JavaFX-Launcher] i.m.r.s.c.i.JobConfigurationServiceImpl : REGISTRATION - SYNC - Job_Configuration_Service - REGISTRATION - REG - Getting Re-start time started
2026-07-15 13:03:47,730 INFO [JavaFX-Launcher] i.m.r.s.c.i.JobConfigurationServiceImpl : REGISTRATION - SYNC - Job_Configuration_Service - REGISTRATION - REG - Getting Re-start time completed
2026-07-15 13:03:47,732 INFO [JavaFX-Launcher] i.m.r.c.RestartController : REGISTRATION - RESTART  - RESTART CONTROLLER - REGISTRATION - REG - Creation of sync restart timer completed
2026-07-15 13:03:47,732 INFO [JavaFX-Launcher] i.m.r.c.RestartController : REGISTRATION - RESTART  - RESTART CONTROLLER - REGISTRATION - REG - Initiate Restart Timer completed
2026-07-15 13:03:48,803 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Checking for current version started...
2026-07-15 13:03:48,804 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Checking for current version completed : 1.2.0.2
2026-07-15 13:03:48,804 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Inside updateDerbyDB currentVersion: {} and {} : {} - 1.2.0.2 - mosip.reg.services.current.version - 0
2026-07-15 13:03:48,920 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Backup Path found: 
2026-07-15 13:03:48,920 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Backup folder not found, returning the version as the same: 
2026-07-15 13:03:49,042 ERROR [JavaFX-Launcher] i.m.r.c.ApplicationContext : ResourceBundle not found for configured langcode 
2026-07-15 13:03:49,046 INFO [JavaFX-Launcher] i.m.r.s.c.i.GlobalParamServiceImpl : Fetching list of global params
2026-07-15 13:03:49,047 INFO [JavaFX-Launcher] i.m.r.d.i.GlobalParamDAOImpl : REGISTRATION - GLOBALPARAMS - GLOBAL_PARAM_DAO_IMPL - REGISTRATION - REG - Fetching list of global params
2026-07-15 13:03:49,131 INFO [JavaFX-Launcher] i.m.r.d.i.GlobalParamDAOImpl : REGISTRATION - GLOBALPARAMS - GLOBAL_PARAM_DAO_IMPL - REGISTRATION - REG - List of global params fetched successfully
2026-07-15 13:03:49,162 INFO [JavaFX-Launcher] i.m.r.u.r.ServiceDelegateUtil : Registration Network Checker had been called --> https://api-internal.sandbox.apinodes.com/v1/syncdata/actuator/health
2026-07-15 13:03:49,441 INFO [JavaFX-Launcher] i.m.r.s.l.i.LoginServiceImpl : REGISTRATION  - LOGINSERVICE - REGISTRATION - REG - Started Initial sync
2026-07-15 13:03:49,441 INFO [JavaFX-Launcher] i.m.r.s.s.i.PolicySyncServiceImpl : Entering into get public key method.....
2026-07-15 13:03:49,441 INFO [JavaFX-Launcher] i.m.r.u.r.ServiceDelegateUtil : Registration Network Checker had been called --> https://api-internal.sandbox.apinodes.com/v1/syncdata/actuator/health
2026-07-15 13:03:49,476 INFO [JavaFX-Launcher] i.m.r.d.i.GlobalParamDAOImpl : REGISTRATION - GLOBALPARAMS - GLOBAL_PARAM_DAO_IMPL - REGISTRATION - REG - Get Global Param
2026-07-15 13:03:49,507 INFO [JavaFX-Launcher] i.m.r.d.i.RegistrationCenterDAOImpl : checking if Registration Center details exists and is active
2026-07-15 13:03:49,521 INFO [JavaFX-Launcher] i.m.r.s.s.i.PolicySyncServiceImpl : Calling getCertificate rest call with request params {applicationId=KERNEL, referenceId=SIGN}
2026-07-15 13:03:49,529 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Checking for current version started...
2026-07-15 13:03:49,529 INFO [JavaFX-Launcher] i.m.r.u.SoftwareUpdateHandler : Checking for current version completed : 1.2.0.2
2026-07-15 13:03:49,533 INFO [JavaFX-Launcher] i.m.r.u.a.RestClientAuthAdvice : Auth advice triggered to check add authZ token to web service request header...
2026-07-15 13:03:49,533 INFO [JavaFX-Launcher] i.m.r.u.r.AuthTokenUtilService : fetchAuthToken invoked for triggerPoint >>>>> triggerPoint
2026-07-15 13:03:49,544 INFO [JavaFX-Launcher] i.m.r.u.a.RestClientAuthAdvice : Adding authZ token to request header
2026-07-15 13:03:49,544 INFO [JavaFX-Launcher] i.m.r.u.a.RestClientAuthAdvice : Adding of authZ token to request header completed
2026-07-15 13:03:49,743 INFO [JavaFX-Launcher] i.m.r.u.a.ResponseSignatureAdvice : Response signature advice triggered...
2026-07-15 13:03:49,747 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Request received to getCertificate
2026-07-15 13:03:49,747 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - referenceId - Optional[SIGN-VERIFY] - Request received to getCertificate
2026-07-15 13:03:49,747 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId -  -  - Reference Id is present. Will get Certificate from DB store
2026-07-15 13:03:49,747 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Getting public key from DB Store
2026-07-15 13:03:49,747 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - timestamp - 2026-07-15T07:33:49.747869600 - Getting public key from DB Store
2026-07-15 13:03:49,748 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - referenceId - SIGN-VERIFY - Getting public key from DB Store
2026-07-15 13:03:49,748 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId -  -  - Getting key alias
2026-07-15 13:03:49,761 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId -  -  - Fetching Key Policy for keyPolicyName(Cache): SERVER-RESPONSE
2026-07-15 13:03:49,781 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId -  -  - Fetching Key Policy for keyPolicyName(Cache): BASE
2026-07-15 13:03:49,783 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - SERVER-RESPONSE - SIGN-VERIFY - PreExpireDays found as key policy:20
2026-07-15 13:03:49,802 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - keyAlias - [KeyAlias(alias=0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c, applicationId=SERVER-RESPONSE, referenceId=SIGN-VERIFY, keyGenerationTime=2026-04-24T02:55:03, keyExpiryTime=2029-04-23T02:55:03, status=null, certThumbprint=BB127429D1F8152BA6A653FFAF71B32BD613F5151295D3AC4630686EA8E23817, uniqueIdentifier=4EF41783A16A0FA23560E32A551FC53F6CE93242)] - keyAlias
2026-07-15 13:03:49,803 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - currentKeyAlias - [KeyAlias(alias=0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c, applicationId=SERVER-RESPONSE, referenceId=SIGN-VERIFY, keyGenerationTime=2026-04-24T02:55:03, keyExpiryTime=2029-04-23T02:55:03, status=null, certThumbprint=BB127429D1F8152BA6A653FFAF71B32BD613F5151295D3AC4630686EA8E23817, uniqueIdentifier=4EF41783A16A0FA23560E32A551FC53F6CE93242)] - currentKeyAlias
2026-07-15 13:03:49,803 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - currentKeyAlias - 0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c - CurrentKeyAlias size is one. Will fetch keypair using this alias
2026-07-15 13:03:49,815 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - keyFromDBStore - 0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c - Key in DBStore exists for this alias. Fetching Certificate.
2026-07-15 13:03:49,919 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Request received to getCertificate
2026-07-15 13:03:49,919 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - referenceId - Optional[SIGN-VERIFY] - Request received to getCertificate
2026-07-15 13:03:49,920 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId -  -  - Reference Id is present. Will get Certificate from DB store
2026-07-15 13:03:49,920 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Getting public key from DB Store
2026-07-15 13:03:49,920 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - timestamp - 2026-07-15T07:33:49.920666600 - Getting public key from DB Store
2026-07-15 13:03:49,920 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - referenceId - SIGN-VERIFY - Getting public key from DB Store
2026-07-15 13:03:49,920 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId -  -  - Getting key alias
2026-07-15 13:03:49,922 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - SERVER-RESPONSE - SIGN-VERIFY - PreExpireDays found as key policy:20
2026-07-15 13:03:49,922 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - keyAlias - [KeyAlias(alias=0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c, applicationId=SERVER-RESPONSE, referenceId=SIGN-VERIFY, keyGenerationTime=2026-04-24T02:55:03, keyExpiryTime=2029-04-23T02:55:03, status=null, certThumbprint=BB127429D1F8152BA6A653FFAF71B32BD613F5151295D3AC4630686EA8E23817, uniqueIdentifier=4EF41783A16A0FA23560E32A551FC53F6CE93242)] - keyAlias
2026-07-15 13:03:49,922 INFO [JavaFX-Launcher] i.m.k.k.h.KeymanagerDBHelper : sessionId - currentKeyAlias - [KeyAlias(alias=0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c, applicationId=SERVER-RESPONSE, referenceId=SIGN-VERIFY, keyGenerationTime=2026-04-24T02:55:03, keyExpiryTime=2029-04-23T02:55:03, status=null, certThumbprint=BB127429D1F8152BA6A653FFAF71B32BD613F5151295D3AC4630686EA8E23817, uniqueIdentifier=4EF41783A16A0FA23560E32A551FC53F6CE93242)] - currentKeyAlias
2026-07-15 13:03:49,922 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - currentKeyAlias - 0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c - CurrentKeyAlias size is one. Will fetch keypair using this alias
2026-07-15 13:03:49,924 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - keyFromDBStore - 0f1ce02e-84b1-4d04-9c3d-30a2d2f0be9c - Key in DBStore exists for this alias. Fetching Certificate.
2026-07-15 13:03:49,932 INFO [JavaFX-Launcher] i.m.k.s.s.i.SignatureServiceImpl : SignatureSessionId - JWTSignature -  - Certificate not found in JWT Header.
2026-07-15 13:03:49,995 INFO [JavaFX-Launcher] i.m.r.u.a.ResponseSignatureAdvice : Response signature is valid... https://api-internal.sandbox.apinodes.com/v1/syncdata/getCertificate?applicationId=KERNEL&version=1.2.0.2&referenceId=SIGN
2026-07-15 13:03:49,995 INFO [JavaFX-Launcher] i.m.r.u.a.RestClientAuthAdvice : completed with request Auth advice
2026-07-15 13:03:49,997 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Request received to getCertificate
2026-07-15 13:03:49,997 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - referenceId - Optional[SIGN-VERIFY] - Request received to getCertificate
2026-07-15 13:03:49,997 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId -  -  - Reference Id is present. Will get Certificate from DB store
2026-07-15 13:03:49,997 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - applicationId - SERVER-RESPONSE - Getting public key from DB Store
2026-07-15 13:03:49,999 INFO [JavaFX-Launcher] i.m.k.k.s.i.KeymanagerServiceImpl : sessionId - timestamp - 2026-07-15T07:33:49.997912200 - Getting public key from DB Store
2026-07-15 13:03:49,999 INFO [JavaFX-Launcher] i.m.k.k.s.i.Keymanager

Hi @HariHaran_R,

Good progress and your deployment steps helped pinpoint the remaining gap. Answering your questions first, then the actual issue:

  1. The blank langcode is a logging artifact, not a conversion failure. The exact statement in ApplicationContext is LOGGER.error("ResourceBundle not found for configured langcode ", langCode), the message string has no placeholder for the argument, so the langcode is silently dropped from the log output. It always prints blank, for any language. The failing langcode here is amh.
  2. There is no issue with the amh mapping. In the nv-i18n library source, LanguageAlpha3Code.amh.getAlpha2() is hardcoded to return LanguageCode.am, it cannot return empty/null. Your config parsing is also fine (eng from the same list resolves correctly). So both theories can be ruled out.
  3. The actual gap: resources.zip is consumed at client build time, not install time. Looking at registration/configure.sh in the registration-client repo, the flow is:
  • The regclient build job (the job/deployment in your cluster that runs configure.sh) downloads resources.zip from artifactory and merges its contents into registration-client-1.2.0.2.jar
  • That jar is then code-signed and its hash registered in the client’s update MANIFEST
  • The final reg-client.zip served for download is assembled from this

So updating resources.zip on the artifactory pod is the correct source location, but nothing consumes it until the regclient pod is re-run or restarted. Your fresh install simply re-downloaded the same reg-client.zip that was built from the old resources. Please re-run the regclient job in your deployment (delete and re-trigger the regclient pod so configure.sh executes again), wait for it to publish the regenerated client, then do the fresh download + install.

Also note: Manually dropping the properties files into the installed client can never work in this design, the run.bat classpath uses lib/* (a jar wildcard, which does not load loose .properties files from a folder), so the bundles must be inside the signed jar.

After re-running the regclient pod and reinstalling, the jar should list labels_am.properties, and correspondingly messages_am.properties.

Once those files are inside the jar, the bundles will register successfully at startup, and the checkbox will enable. For reference, the dialog resolves each language’s display name from its labels bundle and disables the checkbox when the name falls back to the code, which is exactly your current state.

Let us know the result after re-running the regclient pod.

Thanks and Regards,
Gokulraj C,
Team MOSIP.