i18n(android): the interface speaks English, like the desktop app

It was in French because the conversation is, and I never asked. The desktop
app the client mirrors says Add field, Attach file, Show previous versions -
someone moving between the two would notice the seam.

Every visible string moved: buttons, statuses, detail row captions, log lines
and the biometric prompt, plus the messages the modules surface through
LastStoreError and LastBiometricError.

Code comments stay in French. They address the author, not the user, and that
is already the language of CLAUDE.md and much of the repo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-08-15 17:59:31 +01:00
parent b900b5b609
commit bc89ec0010
5 changed files with 85 additions and 85 deletions
+6 -6
View File
@@ -104,12 +104,12 @@ begin
try
if not AcquireService(LSvc) then
begin
FLastError := 'service biometrique absent de la plateforme';
FLastError := 'biometric service missing from the platform';
Exit(False);
end;
Result := LSvc.CanAuthenticate;
if not Result then
FLastError := 'CanAuthenticate: aucune protection utilisable';
FLastError := 'CanAuthenticate: no usable protection';
except
on E: Exception do
begin
@@ -136,7 +136,7 @@ begin
FLastError := '';
if not AcquireService(LSvc) then
begin
FLastError := 'service biometrique absent de la plateforme';
FLastError := 'biometric service missing from the platform';
AThen(boFailed); // pas boUnavailable : on ne sait rien de l'appareil
Exit;
end;
@@ -144,7 +144,7 @@ begin
if not LSvc.CanAuthenticate then
begin
// Reponse NETTE du systeme : l'appareil n'a rien pour authentifier.
FLastError := 'CanAuthenticate: aucune protection utilisable';
FLastError := 'CanAuthenticate: no usable protection';
AThen(boUnavailable);
Exit;
end;
@@ -158,9 +158,9 @@ begin
end;
LProps := Default(TBiometricPromptProperties);
LProps.Title := 'Deverrouiller le coffre';
LProps.Title := 'Unlock the vault';
LProps.Description := APrompt;
LProps.CancelButtonText := 'Annuler';
LProps.CancelButtonText := 'Cancel';
LSvc.SetPromptProperties(LProps);
// Meme raison que plus haut : ce qui remonte de la couche Java doit
+1 -1
View File
@@ -68,7 +68,7 @@ begin
// contenu, seulement son origine.
// Les DEUX arguments sont des CharSequence : passer un JString au premier
// compile ailleurs mais pas ici.
LClip := TJClipData.JavaClass.newPlainText(StrToJCharSequence('coffre'),
LClip := TJClipData.JavaClass.newPlainText(StrToJCharSequence('vault'),
StrToJCharSequence(AText));
LExtras := TJPersistableBundle.JavaClass.init;
LExtras.putBoolean(StringToJString(EXTRA_IS_SENSITIVE), True);
+2 -2
View File
@@ -594,7 +594,7 @@ begin
LStore := OpenKeyStore;
LCert := LStore.getCertificate(StringToJString(KEY_ALIAS_WRAP));
if LCert = nil then
raise EPMAStore.Create('Cle publique introuvable dans le Keystore');
raise EPMAStore.Create('Public key not found in the Keystore');
LPub := LCert.getPublicKey;
LFactory := TJKeyFactoryX.JavaClass.getInstance(LPub.getAlgorithm);
Result := LFactory.generatePublic(
@@ -804,7 +804,7 @@ begin
end;
{$ELSE}
begin
raise EPMAStore.Create('Le stockage Keystore est propre a Android');
raise EPMAStore.Create('Keystore storage is Android-only');
end;
{$ENDIF}
+3 -3
View File
@@ -110,7 +110,7 @@ begin
Result := Title.Trim;
if Result = '' then Result := Site.Trim;
if Result = '' then Result := Username.Trim;
if Result = '' then Result := '(sans nom)';
if Result = '' then Result := '(no name)';
end;
{ TVault }
@@ -206,7 +206,7 @@ begin
Clear;
LRoot := TJSONObject.ParseJSONValue(APlainJson) as TJSONObject;
if LRoot = nil then
raise Exception.Create('Instantane illisible : ce n''est pas du JSON');
raise Exception.Create('Snapshot unreadable: this is not JSON');
try
FUsername := LRoot.GetValue<string>('username', '');
FExportedAt := LRoot.GetValue<string>('exported_at',
@@ -228,7 +228,7 @@ begin
end;
if not LRoot.TryGetValue<TJSONArray>('entries', LArr) then
raise Exception.Create('Instantane sans tableau "entries"');
raise Exception.Create('Snapshot has no "entries" array');
SetLength(FEntries, LArr.Count);
N := 0;