Skip to content

fix: improve Arabic localization and English typo fix#3

Open
Andrew-A-A wants to merge 17 commits into
Payroll-Engine:mainfrom
Andrew-A-A:main
Open

fix: improve Arabic localization and English typo fix#3
Andrew-A-A wants to merge 17 commits into
Payroll-Engine:mainfrom
Andrew-A-A:main

Conversation

@Andrew-A-A
Copy link
Copy Markdown

fix: localization corrections — Arabic audit and English typo fix

Description

This PR includes two localization fixes across the base and Arabic resource files.

1. English base (Localizations.resx) — typo fix
Corrected a typo in Action.MoveDown: "Mode down""Move down". The
incorrect value was propagated to all language files that inherit the base string.

2. Arabic (Localizations.ar.resx) — full audit and terminology standardization
A full review and correction of the Arabic localization file, covering ~160 keys
across three categories:

Terminology standardization — replaced incorrect or inconsistent terms with
their established Arabic equivalents used by Arabic-speaking HR/payroll professionals:

English term Old translation New translation
Tenant مستأجر (renter) منشأة (organization)
Payroll Payroll (untranslated) كشف الرواتب
Payrun تشغيل الرواتب دورة الرواتب (payroll cycle)
WageType نوع الأجر بند الأجر (wage item/line)
Expression تعبير معادلة (formula)
Parameter معلمة معامل
Lookup Lookup (untranslated) قائمة مرجعية
Slot فتحة خانة (cell/field)
Cluster Cluster (untranslated) عناقيد / تكتلات
Culture الثقافة التنسيق الإقليمي (locale)
Script Script (untranslated) نص برمجي

Untranslated English terms — translated values still in English: Boolean,
Payrolls, Namespace, Schema, Tags, Id, Clusters, Scripts.

Arabic phrasing and accuracy fixes — corrected broken plurals, genitive
agreement, diacritics (المُجمِّع → المجمع), Forecast singular/plural misuse,
natural-sounding UI strings, and a key name typo Shared,TextShared.Text
that caused a runtime lookup failure.

Fixes # (issue)

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Andrew-A-A added 17 commits May 16, 2026 17:55
Modify Shared/Resources/Localizations.resx: change the Action.MoveDown value from "Mode down" to "Move down". This updates the localization string for the MoveDown action.
"مستأجر" (lit. renter/lessee) is an incorrect contextual translation for
"Tenant" in a business/SaaS setting. "منشأة" (organization/establishment)
is the accurate domain term used across the app to describe a client entity.

Affected keys: Enum.UserType.TenantAdministrator, Enum.Feature.Tenants,
Enum.ReportParameterType.TenantId, App.SelectTenant, Login.TenantHelp,
Login.TenantReadError, RegulationShare.ConsumerTenant/ProviderTenant/
MissingTenants/MissingShares, Tenant.Tenant/Tenants/NotAvailable/UserTenant,
Division.CalendarHelp/CultureHelp
Several keys retained the English word "Payroll" without translation.
"كشف الرواتب" (payroll register/sheet) is the correct Arabic business term.

Affected keys: Enum.Feature.PayrollLayers/Payrolls, Enum.FunctionType.Payroll,
Enum.ReportParameterType.PayrollId, App.SelectPayroll/SelectPayrollWithPayrun,
PayrollLayer.InvalidPayrollRegulation/PayrollLayer/PayrollLayers,
Payroll.NotAvailable/Payroll/Payrolls
…r WageType

"نوع الأجر" (type of wage) is a literal translation. "بند الأجر" (wage item/
line) is the correct payroll domain term used by Arabic-speaking HR professionals
to denote a specific earnings/deduction component in a payroll structure.

Affected keys: Enum.ResultKind.WageType/WageTypeCustom, Enum.FunctionType.WageType/
WageTypeResult/WageTypeValue/PayrunWageTypeAvailable, Enum.MarkerType.WageType,
Payroll.WageTypePeriod/WageTypeRetro, Payrun.WageTypeAvailableExpression,
WageType.WageType/WageTypeNumber/WageTypes, WageType.CalendarHelp
…term for Payrun

"تشغيل الرواتب" (running/executing payroll) describes an action, not the
concept. "دورة الرواتب" (payroll cycle/run) is the correct domain term for
a payrun in Arabic HR and payroll systems.

Affected keys: Enum.ResultKind.Payrun, Enum.Feature.PayrunJobs/PayrunResults/
Payruns, Enum.FunctionType.Payrun* (8 keys), Enum.ReportParameterType.PayrunId,
Enum.WebhookAction.Payrun* (3 keys), Enum.MarkerType.PayrunResult,
App.SelectPayrun/SelectPayrollWithPayrun, Forecast.JobNotSupported/PayrunJob/
StartForecastPayrun, Payrun.Payrun/Payruns/NotAvailable/UnknownPayrun,
PayrunJob.* (8 keys), PayrunParameter.NotAvailable/PayrunParameter/PayrunParameters,
PayrunResult.NotAvailable/PayrunResult/PayrunResults
Diacritics (tashkeel) on "المُجمِّع" are unnecessary in UI text and
inconsistent with the rest of the localization file. The undiacritized
form "المجمع" is the standard usage in formal Arabic software interfaces.

Affected keys: Enum.ResultKind.Collector/CollectorCustom, Enum.FunctionType.
Collector/CollectorApply/CollectorEnd/CollectorStart, Enum.MarkerType.Collector,
Collector.Collector/Collectors, Payroll.CollectorRetro, WageType.CollectorGroups
"تعبير" (expression) is a generic word. "معادلة" (formula/equation) better
conveys the computational/scripting nature of these fields in the payroll
rule engine and is the established Arabic term in business software for
formula fields.

Affected keys: Case.AvailableExpression/BuildExpression/ValidateExpression,
CaseRelation.BuildExpression/ValidateExpression, Collector.ApplyExpression/
EndExpression/StartExpression, Item.CSharpExpression, Payrun.EmployeeAvailable/
EmployeeEnd/EmployeeStart/End/Start/WageTypeAvailableExpression,
Payrun.Expressions, Report.BuildExpression/EndExpression/StartExpression,
WageType.ResultExpression/ValueExpression
…nctionCount format

"Script" was left untranslated in several keys. "نص برمجي" (scripted/
programmatic text) is the correct Arabic term. Also improved the function
count label from "{count} دالة" to the clearer "الدوال: {count}" format
used consistently throughout the localization.

Affected keys: Case.AvailableScript/BuildScript/ValidateScript,
Script.Script/Scripts, Script.FunctionCount
"Lookup" was left as-is in English across multiple keys. The established
Arabic equivalent for a lookup/reference table in business software is
"قائمة مرجعية" (reference list), and individual entries are "قيمة مرجعية"
(reference value).

Affected keys: Enum.MarkerType.LookupValue, CaseField.LookupSettings/
LookupSettingsRemoved, Lookup.Lookup/LookupName/Lookups,
LookupValue.LookupValue/LookupValues
"فتحة" (opening/hole) is an inaccurate and unnatural translation for "slot"
in a data-entry context. "خانة" (cell/field/box) is the correct Arabic word
for a named slot or sub-field used in forms and case structures.

Affected keys: Case.Slots, CaseRelation.SourceCaseSlot/TargetCaseSlot,
CaseSlot.CaseSlot/CaseSlots/Localizations/NotAvailable
"Cluster" and "Clusters" were left untranslated. "عناقيد" (clusters,
singular: عنقود) is used for the display label (Shared.Clusters), while
"تكتلات" is used in ClusterSet contexts to reflect grouped/nested cluster
sets, matching common Arabic technical usage.

Affected keys: ClusterSet.ClusterSet/ClusterSets/NotAvailable/
ExcludeClusters/IncludeClusters, Shared.Clusters
… Parameter

"معلمة" (informant/informative) is a literal but awkward translation.
"معامل" (parameter/factor) is the established Arabic computing and
mathematical term for a function or report parameter.

Affected keys: Action.Parameters, Payrun.Parameters, PayrunParameter.
CountParameters/NoParameters/NotAvailable/PayrunParameter/PayrunParameters,
ReportParameter.ParameterType/ReportParameter/ReportParameters
"الثقافة" (culture/civilization) is a false-friend translation that sounds
unnatural in a software locale context. "التنسيق الإقليمي" (regional format/
locale) is the standard Arabic UI term used by major software vendors
(Microsoft, SAP) for culture/locale settings.

Affected keys: Shared.Culture, Division.CultureHelp, Employee.CultureHelp,
Tenant.CultureHelp, Report.TemplateNotAvailable
…l "التوقعات"

"التوقعات" (forecasts, plural) was incorrectly used where the concept refers
to a single forecast run. "التوقع" (the forecast, singular) is grammatically
correct when referring to one forecast payrun. "لا توجد توقعات متاحة" retains
the plural as it describes the absence of multiple items (correct usage).

Affected keys: Enum.PayrunJobStatus.Forecast, Forecast.Copy/CopyQuery/
CopyToForecast/Forecast/JobName/JobNotSupported/JobPeriod/JobDate/Name/
PayrunJob/StartForecastPayrun, Case.SubmitForecastCase
…d.Text key typo

Several values were still in English. Translations applied:
- Boolean → قيمة منطقية (logical value)
- Boolean رقمي → قيمة منطقية رقمية (numeric logical value)
- مورد ويب → رابط ويب (web link, more accurate for a URL resource)
- Namespace → المجال (domain/namespace)
- Schema → مخطط (schema/diagram)
- Id → رقم تعريفي (identifier)
- Tags → العلامات (tags/labels)

Also fixed a key name typo: "Shared,Text" (comma) → "Shared.Text" (period),
which would have caused the key to be unresolvable at runtime.

Affected keys: Enum.AttributeValueType.Boolean, Enum.ValueType.Boolean/
NumericBoolean/WebResource, Regulation.Namespace, ReportTemplate.Schema,
Shared.ObjectId, Shared.Tags, Shared.Text (key fix)
…iple keys

Corrected several values that were grammatically awkward, imprecise, or
inconsistent with standard Arabic UI conventions:

- التقاويم → التقويمات (correct broken plural for "calendars")
- حالات الموظف → حالات الموظفين (correct plural genitive for "employee cases")
- ملخص → مجموع (Summary in aggregation context means total, not abstract summary)
- لحظة → نقطة زمنية (Moment as a time type is more precisely "time point")
- بلا وقت → غير محدد بمدة (Timeless = not time-bound, clearer phrasing)
- الخادم الخلفي → الخادم (Backend version label simplified; "backend" implied)
- الوضع الفاتح → الوضع الساطع (Light mode: فاتح=pale, ساطع=bright, more accurate)
- Source/Target case names simplified to remove redundant "الحالة" in labels
- حقل الحالة المصدر/الهدف → حقل الحالة (المصدر)/(الهدف) for visual clarity
- SourceEqualsTargetError message reworded to natural Arabic
- Employee.SelectedEmployees format: {selected} من {total} موظف →
  الموظفون: {selected} من أصل {total} (consistent with other count labels)
- Item.AddHelp/CreateHelp/NotAvailable rephrased for natural sentence structure
- Login.PasswordInfo: clarified "حرف لاتيني" (Latin character) since Arabic
  speakers may confuse "حرف صغير/كبير" with Arabic letter case
- قسم المستهلك → قسم المستفيد (consumer → beneficiary, correct domain term)
- Calendar.PeriodCycleHelp rephrased for clarity
Added a parenthetical hint to Enum.ValueType.Boolean to make it immediately
clear to Arabic-speaking users that this type represents a yes/no value,
reducing ambiguity between Boolean and numeric types in the UI.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant