Fix review issues: dedicated l10n keys, remove unrelated CI/macOS changes, translate all locales

- Replace concatenated favorite toggle strings with dedicated listFilter_addToFavorites/removeFromFavorites keys
- Remove unrelated CI artifact upload step from build.yml
- Revert unrelated macOS GeneratedPluginRegistrant.swift change
- Add comment explaining groups hidden under favorites filter
- Translate new keys across all 14 locales
This commit is contained in:
zjs81 2026-02-24 20:07:15 -07:00
parent d5ac84430c
commit 50af2e0bc9
35 changed files with 266 additions and 101 deletions

View file

@ -30,11 +30,6 @@ jobs:
${{ runner.os }}-gradle-
- run: flutter pub get
- run: flutter build apk --release --no-pub
- name: Upload Debug APK
uses: actions/upload-artifact@v4
with:
name: app-debug
path: build/app/outputs/flutter-apk/app-release.apk
ios:
runs-on: macos-latest

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Неуспешно изтриване на канала \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "bg",
"appTitle": "MeshCore Open",
"nav_contacts": "Контакти",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Премахване от списъка с любими",
"listFilter_addToFavorites": "Добави към любими",
"listFilter_favorites": "Любими"
}

View file

@ -1344,6 +1344,8 @@
"listFilter_filters": "Filtere",
"listFilter_all": "Alle",
"listFilter_favorites": "Favoriten",
"listFilter_addToFavorites": "Zu Favoriten hinzufügen",
"listFilter_removeFromFavorites": "Aus Favoriten entfernen",
"listFilter_users": "Benutzer",
"listFilter_repeaters": "Repeater",
"listFilter_roomServers": "Raumserver",

View file

@ -1556,6 +1556,8 @@
"listFilter_filters": "Filters",
"listFilter_all": "All",
"listFilter_favorites": "Favorites",
"listFilter_addToFavorites": "Add to favorites",
"listFilter_removeFromFavorites": "Remove from favorites",
"listFilter_users": "Users",
"listFilter_repeaters": "Repeaters",
"listFilter_roomServers": "Room servers",

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "No se pudo eliminar el canal \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "es",
"appTitle": "MeshCore Open",
"nav_contacts": "Contactos",
@ -1772,5 +1778,8 @@
"type": "double"
}
}
}
},
"listFilter_favorites": "Favoritos",
"listFilter_removeFromFavorites": "Eliminar de las favoritas",
"listFilter_addToFavorites": "Añadir a favoritos"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Échec de la suppression de la chaîne \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "fr",
"appTitle": "MeshCore Open",
"nav_contacts": "Contacts",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_addToFavorites": "Ajouter à mes favoris",
"listFilter_removeFromFavorites": "Supprimer des favoris",
"listFilter_favorites": "Préférences"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Impossibile eliminare il canale \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "it",
"appTitle": "MeshCore Open",
"nav_contacts": "Contatti",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_addToFavorites": "Aggiungi ai preferiti",
"listFilter_removeFromFavorites": "Rimuovi dai preferiti",
"listFilter_favorites": "Preferiti"
}

View file

@ -4778,6 +4778,18 @@ abstract class AppLocalizations {
/// **'Favorites'**
String get listFilter_favorites;
/// No description provided for @listFilter_addToFavorites.
///
/// In en, this message translates to:
/// **'Add to favorites'**
String get listFilter_addToFavorites;
/// No description provided for @listFilter_removeFromFavorites.
///
/// In en, this message translates to:
/// **'Remove from favorites'**
String get listFilter_removeFromFavorites;
/// No description provided for @listFilter_users.
///
/// In en, this message translates to:

View file

@ -2729,7 +2729,13 @@ class AppLocalizationsBg extends AppLocalizations {
String get listFilter_all => 'Всички';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Любими';
@override
String get listFilter_addToFavorites => 'Добави към любими';
@override
String get listFilter_removeFromFavorites => 'Премахване от списъка с любими';
@override
String get listFilter_users => 'Потребители';

View file

@ -2736,6 +2736,12 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get listFilter_favorites => 'Favoriten';
@override
String get listFilter_addToFavorites => 'Zu Favoriten hinzufügen';
@override
String get listFilter_removeFromFavorites => 'Aus Favoriten entfernen';
@override
String get listFilter_users => 'Benutzer';

View file

@ -2689,6 +2689,12 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get listFilter_favorites => 'Favorites';
@override
String get listFilter_addToFavorites => 'Add to favorites';
@override
String get listFilter_removeFromFavorites => 'Remove from favorites';
@override
String get listFilter_users => 'Users';

View file

@ -2727,7 +2727,13 @@ class AppLocalizationsEs extends AppLocalizations {
String get listFilter_all => 'Todas';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Favoritos';
@override
String get listFilter_addToFavorites => 'Añadir a favoritos';
@override
String get listFilter_removeFromFavorites => 'Eliminar de las favoritas';
@override
String get listFilter_users => 'Usuarios';

View file

@ -2743,7 +2743,13 @@ class AppLocalizationsFr extends AppLocalizations {
String get listFilter_all => 'Tout';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Préférences';
@override
String get listFilter_addToFavorites => 'Ajouter à mes favoris';
@override
String get listFilter_removeFromFavorites => 'Supprimer des favoris';
@override
String get listFilter_users => 'Utilisateurs';

View file

@ -2727,7 +2727,13 @@ class AppLocalizationsIt extends AppLocalizations {
String get listFilter_all => 'Tutti';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Preferiti';
@override
String get listFilter_addToFavorites => 'Aggiungi ai preferiti';
@override
String get listFilter_removeFromFavorites => 'Rimuovi dai preferiti';
@override
String get listFilter_users => 'Utenti';

View file

@ -2718,7 +2718,13 @@ class AppLocalizationsNl extends AppLocalizations {
String get listFilter_all => 'Alles';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Favorieten';
@override
String get listFilter_addToFavorites => 'Toevoegen aan favorieten';
@override
String get listFilter_removeFromFavorites => 'Verwijderen uit favorieten';
@override
String get listFilter_users => 'Gebruikers';

View file

@ -2725,7 +2725,13 @@ class AppLocalizationsPl extends AppLocalizations {
String get listFilter_all => 'Wszystko';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Ulubione';
@override
String get listFilter_addToFavorites => 'Dodaj do ulubionych';
@override
String get listFilter_removeFromFavorites => 'Usuń z ulubionych';
@override
String get listFilter_users => 'Użytkownicy';

View file

@ -2728,7 +2728,13 @@ class AppLocalizationsPt extends AppLocalizations {
String get listFilter_all => 'Tudo';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Favoritos';
@override
String get listFilter_addToFavorites => 'Adicionar aos favoritos';
@override
String get listFilter_removeFromFavorites => 'Remover da lista de favoritos';
@override
String get listFilter_users => 'Usuários';

View file

@ -2731,7 +2731,13 @@ class AppLocalizationsRu extends AppLocalizations {
String get listFilter_all => 'Все';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Избранное';
@override
String get listFilter_addToFavorites => 'Добавить в избранное';
@override
String get listFilter_removeFromFavorites => 'Удалить из избранного';
@override
String get listFilter_users => 'Пользователи';

View file

@ -2713,7 +2713,13 @@ class AppLocalizationsSk extends AppLocalizations {
String get listFilter_all => 'Všetko';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Obľúbené';
@override
String get listFilter_addToFavorites => 'Pridaj do obľúbených';
@override
String get listFilter_removeFromFavorites => 'Odstrániť z označení';
@override
String get listFilter_users => 'Používatelia';

View file

@ -2716,7 +2716,13 @@ class AppLocalizationsSl extends AppLocalizations {
String get listFilter_all => 'Vse';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Priljubljene';
@override
String get listFilter_addToFavorites => 'Dodaj v priljubljene';
@override
String get listFilter_removeFromFavorites => 'Odstrani iz priljubljenih';
@override
String get listFilter_users => 'Uporabniki';

View file

@ -2701,7 +2701,13 @@ class AppLocalizationsSv extends AppLocalizations {
String get listFilter_all => 'Alla';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Favoriter';
@override
String get listFilter_addToFavorites => 'Lägg till i favoriter';
@override
String get listFilter_removeFromFavorites => 'Ta bort från favoriter';
@override
String get listFilter_users => 'Användare';

View file

@ -2738,7 +2738,13 @@ class AppLocalizationsUk extends AppLocalizations {
String get listFilter_all => 'Все';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => 'Улюблені';
@override
String get listFilter_addToFavorites => 'Додати до улюблених';
@override
String get listFilter_removeFromFavorites => 'Видалити зі списку улюблених';
@override
String get listFilter_users => 'Користувачі';

View file

@ -2583,7 +2583,13 @@ class AppLocalizationsZh extends AppLocalizations {
String get listFilter_all => '全部';
@override
String get listFilter_favorites => 'Favorites';
String get listFilter_favorites => '收藏';
@override
String get listFilter_addToFavorites => '添加到收藏';
@override
String get listFilter_removeFromFavorites => '从收藏中移除';
@override
String get listFilter_users => '用户';

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Kan kanaal {name} niet verwijderen",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "nl",
"appTitle": "MeshCore Open",
"nav_contacts": "Contacten",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Verwijderen uit favorieten",
"listFilter_favorites": "Favorieten",
"listFilter_addToFavorites": "Toevoegen aan favorieten"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Nie udało się usunąć kanału \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "pl",
"appTitle": "MeshCore Open",
"nav_contacts": "Kontakty",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Usuń z ulubionych",
"listFilter_addToFavorites": "Dodaj do ulubionych",
"listFilter_favorites": "Ulubione"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Falha ao excluir o canal \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "pt",
"appTitle": "MeshCore Open",
"nav_contacts": "Contactos",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_addToFavorites": "Adicionar aos favoritos",
"listFilter_removeFromFavorites": "Remover da lista de favoritos",
"listFilter_favorites": "Favoritos"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Не удалось удалить канал {name}.",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "ru",
"appTitle": "MeshCore Open",
"nav_contacts": "Контакты",
@ -984,5 +990,8 @@
"type": "double"
}
}
}
},
"listFilter_addToFavorites": "Добавить в избранное",
"listFilter_favorites": "Избранное",
"listFilter_removeFromFavorites": "Удалить из избранного"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Kanál \"{name}\" sa nepodarilo odstrániť",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "sk",
"appTitle": "MeshCore Open",
"nav_contacts": "Kontakty",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Odstrániť z označení",
"listFilter_addToFavorites": "Pridaj do obľúbených",
"listFilter_favorites": "Obľúbené"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Kanala {name} ni bilo mogoče izbrisati",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "sl",
"appTitle": "MeshCore Open",
"nav_contacts": "Stiki",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_favorites": "Priljubljene",
"listFilter_removeFromFavorites": "Odstrani iz priljubljenih",
"listFilter_addToFavorites": "Dodaj v priljubljene"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Det gick inte att ta bort kanalen \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "sv",
"appTitle": "MeshCore Open",
"nav_contacts": "Kontakter",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Ta bort från favoriter",
"listFilter_addToFavorites": "Lägg till i favoriter",
"listFilter_favorites": "Favoriter"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "Не вдалося видалити канал \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "uk",
"appTitle": "MeshCore Open",
"nav_contacts": "Контакти",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_removeFromFavorites": "Видалити зі списку улюблених",
"listFilter_addToFavorites": "Додати до улюблених",
"listFilter_favorites": "Улюблені"
}

View file

@ -1,6 +1,12 @@
{
"channels_channelDeleteFailed": "无法删除频道 \"{name}\"",
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@@locale": "zh",
"appTitle": "MeshCore Open",
"nav_contacts": "联系方式",
@ -1744,5 +1750,8 @@
"type": "double"
}
}
}
},
"listFilter_favorites": "收藏",
"listFilter_addToFavorites": "添加到收藏",
"listFilter_removeFromFavorites": "从收藏中移除"
}

View file

@ -518,6 +518,7 @@ class _ContactsScreenState extends State<ContactsScreen>
})
.where((group) {
if (_typeFilter == ContactTypeFilter.all) return true;
// Groups don't have a favorite flag, so hide them under favorites filter
if (_typeFilter == ContactTypeFilter.favorites) return false;
for (final key in group.memberKeys) {
final contact = contactsByKey[key];
@ -1099,8 +1100,8 @@ class _ContactsScreenState extends State<ContactsScreen>
),
title: Text(
isFavorite
? '${context.l10n.common_remove} ${context.l10n.listFilter_favorites}'
: '${context.l10n.common_add} ${context.l10n.listFilter_favorites}',
? context.l10n.listFilter_removeFromFavorites
: context.l10n.listFilter_addToFavorites,
),
onTap: () async {
Navigator.pop(sheetContext);

View file

@ -9,7 +9,6 @@ import flutter_blue_plus_darwin
import flutter_local_notifications
import mobile_scanner
import package_info_plus
import path_provider_foundation
import share_plus
import shared_preferences_foundation
import sqflite_darwin
@ -21,7 +20,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))

View file

@ -1,53 +1 @@
{
"bg": [
"listFilter_favorites"
],
"es": [
"listFilter_favorites"
],
"fr": [
"listFilter_favorites"
],
"it": [
"listFilter_favorites"
],
"nl": [
"listFilter_favorites"
],
"pl": [
"listFilter_favorites"
],
"pt": [
"listFilter_favorites"
],
"ru": [
"listFilter_favorites"
],
"sk": [
"listFilter_favorites"
],
"sl": [
"listFilter_favorites"
],
"sv": [
"listFilter_favorites"
],
"uk": [
"listFilter_favorites"
],
"zh": [
"listFilter_favorites"
]
}
{}