bcquality/custom/knowledge/architecture/al-identifiers-must-be-english.md
Michael Dieringer a49823a542 newrules
2026-06-13 22:53:17 +02:00

2.3 KiB

bc-version domain keywords technologies countries application-area
all
architecture
naming
english
enu
variable
procedure
field
caption
translation
xliff
al
w1
all

Description

All AL identifiers must be written in English (ENU) regardless of the language used in conversation with the developer. Translations are handled separately via XLIFF files — never by writing Danish, German or other language identifiers in AL source code.

This applies to:

  • Variable names
  • Procedure names
  • Parameter names
  • Field names
  • Object names (tables, codeunits, pages, enums, reports)
  • Enum value names
  • Local and global labels (Label data type) — both the identifier and the default text

Captions and ToolTips may be in the target language in the source file, but must also be covered by XLIFF translations for all supported locales.

Anti Pattern

// WRONG: Danish identifiers
var
    Kreditor: Record Vendor;
    Beløb: Decimal;
    AntalKilo: Decimal;

procedure BeregnTotalbeløb(Antal: Decimal; Pris: Decimal): Decimal
begin
    exit(Antal * Pris);
end;

field(50101; "Indgående Mængde"; Decimal) { Caption = 'Indgående Mængde'; }

Best Practice

// CORRECT: English identifiers, Danish captions handled via XLIFF
var
    Vendor: Record Vendor;
    Amount: Decimal;
    QuantityKg: Decimal;

procedure CalculateTotalAmount(Quantity: Decimal; UnitPrice: Decimal): Decimal
begin
    exit(Quantity * UnitPrice);
end;

field(50101; "Inbound Quantity"; Decimal) { Caption = 'Inbound Quantity'; }
// Caption translation → da-DK XLIFF: 'Indgående Mængde'

// WRONG: Danish label identifier and text
var
    BeløbFejlTxt: Label 'Beløbet må ikke være negativt';

// CORRECT: English label identifier and default text — translated via XLIFF
var
    AmountMustNotBeNegativeErr: Label 'Amount must not be negative.', Comment = '%1 = Amount';

Conversation vs. code

The developer may describe requirements in Danish. The agent must translate the intent into English identifiers when writing AL code:

  • "opret en variabel til beløbet" → var Amount: Decimal;
  • "procedure der beregner lagerværdien" → procedure CalculateInventoryValue(...)
  • "felt til indgående mængde" → field(... ; "Inbound Quantity"; Decimal)

Never echo Danish words from the conversation directly into AL identifiers.