refactor(halkyon_app): the account section, About, the language and countries' names, shared

What Learn and Todo each held now comes from halkyon_app:
- AccountTiles: whose account on which instance, switching, signing
  out (asking first for an anonymous account, as it deletes it) and
  deleting it (asking first), the app's own words passed in.
- showAppAbout: the app's name, version, icon and legalese as it gives
  them, the source of what the instance runs (AppDependencies gains
  sourceCodeUrl), the app's own parts, the licence list.
- resolveAppLocale: the first preferred language the app speaks, never
  by country alone, British English otherwise.
- AssetCountryNames, the default of InstanceGate and InstanceScope:
  Unicode CLDR 48.2's territory names in English and German
  (tool/country_names.py, 7.6 KB), Hong Kong, Macao, Myanmar and
  Palestine by their short names as Learn's world map has them, so
  Todo says "Germany (EU)" where it said "DE (EU)".

Learn's texts read as before in every language; its About bloc and
gateway, its country names from the world map and the keys only the
moved code used are gone, as are Todo's copies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-19 23:51:52 +02:00
commit 87500b7c6b
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 1001 additions and 834 deletions

View file

@ -595,9 +595,6 @@
"instanceAddressInvalid": "Das ist keine Adresse.",
"instanceUnreachable": "Unter {name} antwortet keine Instanz von Halkyon Learn.",
"instanceOpenFailed": "Die App auf {name} konnte nicht geöffnet werden.",
"settingsSwitchAccount": "Konto wechseln",
"settingsAccountAnonymous": "Anonym auf {instance}",
"settingsAccountSignedIn": "Angemeldet auf {instance}",
"accountAnonymous": "Anonym",
"accountSignedIn": "Angemeldet",
"accountsTitle": "Konten",
@ -607,16 +604,10 @@
"accountRemoveTitle": "Konto entfernen?",
"accountRemoveMessage": "Entfernt das Konto auf {name} von diesem Gerät, mit allem, was das Gerät davon hat. Was es synchronisiert hat, bleibt auf {name}: Melde dich dort wieder an, um es wiederzuhaben. In ein anonymes Konto kann man sich nicht wieder anmelden.",
"accountRemoveConfirm": "Entfernen",
"settingsSignOut": "Abmelden",
"settingsSignOutTitle": "Abmelden?",
"settingsSignOutAnonymousMessage": "Bei diesem Konto kannst du dich nicht wieder anmelden, deshalb wird es beim Abmelden samt Fortschritt gelöscht.",
"settingsDeleteAccount": "Konto löschen",
"settingsDeleteTitle": "Dein Konto löschen?",
"settingsDeleteMessage": "Alles, was du hast, also deine Lernsets, Karten und Wiederholungen, wird auf dem Server und auf all deinen Geräten gelöscht. Dies kann nicht rückgängig gemacht werden.",
"settingsAbout": "Über Halkyon Learn",
"aboutLegalese": "Freie Software: Die App steht unter der GNU Affero General Public License, Version 3 oder jeder späteren Version, der Server unter der Server Side Public License, Version 1.",
"aboutSourceCode": "Der Quellcode dessen, was diese Instanz ausführt:",
"aboutSourceUnreachable": "Diese Instanz war nicht erreichbar, um nach ihrem Quellcode zu fragen.",
"settingsAppearance": "Darstellung",
"settingsAppearanceDevice": "Gerätedesign",
"settingsAppearanceLight": "Hell",

View file

@ -677,11 +677,6 @@
"@instanceUnreachable": {"placeholders": {"name": {"type": "String"}}},
"instanceOpenFailed": "Couldn't open the app on {name}.",
"@instanceOpenFailed": {"placeholders": {"name": {"type": "String"}}},
"settingsSwitchAccount": "Switch account",
"settingsAccountAnonymous": "Anonymous on {instance}",
"@settingsAccountAnonymous": {"placeholders": {"instance": {"type": "String"}}},
"settingsAccountSignedIn": "Signed in on {instance}",
"@settingsAccountSignedIn": {"placeholders": {"instance": {"type": "String"}}},
"accountAnonymous": "Anonymous",
"accountSignedIn": "Signed in",
"accountsTitle": "Accounts",
@ -692,16 +687,10 @@
"accountRemoveMessage": "Removes the account on {name} from this device, with all the device holds of it. What it synced stays on {name}: sign in there again to have it. An anonymous account can't be signed into again.",
"@accountRemoveMessage": {"placeholders": {"name": {"type": "String"}}},
"accountRemoveConfirm": "Remove",
"settingsSignOut": "Sign out",
"settingsSignOutTitle": "Sign out?",
"settingsSignOutAnonymousMessage": "This account can't be signed into again, so signing out deletes it with its progress.",
"settingsDeleteAccount": "Delete account",
"settingsDeleteTitle": "Delete your account?",
"settingsDeleteMessage": "Everything you have, your studysets, cards and reviews, is deleted on the server and on all your devices. This can't be undone.",
"settingsAbout": "About Halkyon Learn",
"aboutLegalese": "Free software: the app is under the GNU Affero General Public License, version 3 or any later version, the server under the Server Side Public License, version 1.",
"aboutSourceCode": "The source of what this instance runs:",
"aboutSourceUnreachable": "Couldn't reach this instance to ask where its source is.",
"settingsAppearance": "Appearance",
"settingsAppearanceDevice": "Device theme",
"settingsAppearanceLight": "Light",

View file

@ -3562,24 +3562,6 @@ abstract class AppLocalizations {
/// **'Couldn\'t open the app on {name}.'**
String instanceOpenFailed(String name);
/// No description provided for @settingsSwitchAccount.
///
/// In en, this message translates to:
/// **'Switch account'**
String get settingsSwitchAccount;
/// No description provided for @settingsAccountAnonymous.
///
/// In en, this message translates to:
/// **'Anonymous on {instance}'**
String settingsAccountAnonymous(String instance);
/// No description provided for @settingsAccountSignedIn.
///
/// In en, this message translates to:
/// **'Signed in on {instance}'**
String settingsAccountSignedIn(String instance);
/// No description provided for @accountAnonymous.
///
/// In en, this message translates to:
@ -3634,36 +3616,12 @@ abstract class AppLocalizations {
/// **'Remove'**
String get accountRemoveConfirm;
/// No description provided for @settingsSignOut.
///
/// In en, this message translates to:
/// **'Sign out'**
String get settingsSignOut;
/// No description provided for @settingsSignOutTitle.
///
/// In en, this message translates to:
/// **'Sign out?'**
String get settingsSignOutTitle;
/// No description provided for @settingsSignOutAnonymousMessage.
///
/// In en, this message translates to:
/// **'This account can\'t be signed into again, so signing out deletes it with its progress.'**
String get settingsSignOutAnonymousMessage;
/// No description provided for @settingsDeleteAccount.
///
/// In en, this message translates to:
/// **'Delete account'**
String get settingsDeleteAccount;
/// No description provided for @settingsDeleteTitle.
///
/// In en, this message translates to:
/// **'Delete your account?'**
String get settingsDeleteTitle;
/// No description provided for @settingsDeleteMessage.
///
/// In en, this message translates to:
@ -3682,18 +3640,6 @@ abstract class AppLocalizations {
/// **'Free software: the app is under the GNU Affero General Public License, version 3 or any later version, the server under the Server Side Public License, version 1.'**
String get aboutLegalese;
/// No description provided for @aboutSourceCode.
///
/// In en, this message translates to:
/// **'The source of what this instance runs:'**
String get aboutSourceCode;
/// No description provided for @aboutSourceUnreachable.
///
/// In en, this message translates to:
/// **'Couldn\'t reach this instance to ask where its source is.'**
String get aboutSourceUnreachable;
/// No description provided for @settingsAppearance.
///
/// In en, this message translates to:

View file

@ -2155,19 +2155,6 @@ class AppLocalizationsDe extends AppLocalizations {
return 'Die App auf $name konnte nicht geöffnet werden.';
}
@override
String get settingsSwitchAccount => 'Konto wechseln';
@override
String settingsAccountAnonymous(String instance) {
return 'Anonym auf $instance';
}
@override
String settingsAccountSignedIn(String instance) {
return 'Angemeldet auf $instance';
}
@override
String get accountAnonymous => 'Anonym';
@ -2198,22 +2185,10 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get accountRemoveConfirm => 'Entfernen';
@override
String get settingsSignOut => 'Abmelden';
@override
String get settingsSignOutTitle => 'Abmelden?';
@override
String get settingsSignOutAnonymousMessage =>
'Bei diesem Konto kannst du dich nicht wieder anmelden, deshalb wird es beim Abmelden samt Fortschritt gelöscht.';
@override
String get settingsDeleteAccount => 'Konto löschen';
@override
String get settingsDeleteTitle => 'Dein Konto löschen?';
@override
String get settingsDeleteMessage =>
'Alles, was du hast, also deine Lernsets, Karten und Wiederholungen, wird auf dem Server und auf all deinen Geräten gelöscht. Dies kann nicht rückgängig gemacht werden.';
@ -2225,14 +2200,6 @@ class AppLocalizationsDe extends AppLocalizations {
String get aboutLegalese =>
'Freie Software: Die App steht unter der GNU Affero General Public License, Version 3 oder jeder späteren Version, der Server unter der Server Side Public License, Version 1.';
@override
String get aboutSourceCode =>
'Der Quellcode dessen, was diese Instanz ausführt:';
@override
String get aboutSourceUnreachable =>
'Diese Instanz war nicht erreichbar, um nach ihrem Quellcode zu fragen.';
@override
String get settingsAppearance => 'Darstellung';

View file

@ -2135,19 +2135,6 @@ class AppLocalizationsEn extends AppLocalizations {
return 'Couldn\'t open the app on $name.';
}
@override
String get settingsSwitchAccount => 'Switch account';
@override
String settingsAccountAnonymous(String instance) {
return 'Anonymous on $instance';
}
@override
String settingsAccountSignedIn(String instance) {
return 'Signed in on $instance';
}
@override
String get accountAnonymous => 'Anonymous';
@ -2178,22 +2165,10 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get accountRemoveConfirm => 'Remove';
@override
String get settingsSignOut => 'Sign out';
@override
String get settingsSignOutTitle => 'Sign out?';
@override
String get settingsSignOutAnonymousMessage =>
'This account can\'t be signed into again, so signing out deletes it with its progress.';
@override
String get settingsDeleteAccount => 'Delete account';
@override
String get settingsDeleteTitle => 'Delete your account?';
@override
String get settingsDeleteMessage =>
'Everything you have, your studysets, cards and reviews, is deleted on the server and on all your devices. This can\'t be undone.';
@ -2205,13 +2180,6 @@ class AppLocalizationsEn extends AppLocalizations {
String get aboutLegalese =>
'Free software: the app is under the GNU Affero General Public License, version 3 or any later version, the server under the Server Side Public License, version 1.';
@override
String get aboutSourceCode => 'The source of what this instance runs:';
@override
String get aboutSourceUnreachable =>
'Couldn\'t reach this instance to ask where its source is.';
@override
String get settingsAppearance => 'Appearance';