fix(mobile): empty translation placeholders (#18063)

* fix: empty placeholders

* fix: use namedArgs

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong
2025-05-06 18:51:05 +05:30
committed by GitHub
parent 2af8095880
commit ece977d9ca
28 changed files with 228 additions and 203 deletions

View File

@@ -3,13 +3,13 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
@RoutePage()
class AlbumAssetSelectionPage extends HookConsumerWidget {
@@ -59,7 +59,7 @@ class AlbumAssetSelectionPage extends HookConsumerWidget {
: const Text(
'share_assets_selected',
style: TextStyle(fontSize: 18),
).tr(args: [selected.value.length.toString()]),
).tr(namedArgs: {'count': selected.value.length.toString()}),
centerTitle: false,
actions: [
if (selected.value.isNotEmpty || canDeselect)

View File

@@ -229,11 +229,13 @@ class AlbumsPage extends HookConsumerWidget {
),
subtitle: sorted[index].ownerId != null
? Text(
'${(sorted[index].assetCount == 1 ? 'album_thumbnail_card_item'.tr(
args: ['${sorted[index].assetCount}'],
) : 'album_thumbnail_card_items'.tr(
args: ['${sorted[index].assetCount}'],
))} ${sorted[index].ownerId != userId ? 'album_thumbnail_shared_by'.tr(args: [sorted[index].ownerName!]) : 'owned'.tr()}',
'${(sorted[index].assetCount == 1 ? 'album_thumbnail_card_item'.tr() : 'album_thumbnail_card_items'.tr(
namedArgs: {
'count': sorted[index]
.assetCount
.toString(),
},
))} ${sorted[index].ownerId != userId ? 'album_thumbnail_shared_by'.tr(namedArgs: {'user': sorted[index].ownerName!}) : 'owned'.tr()}',
overflow: TextOverflow.ellipsis,
style:
context.textTheme.bodyMedium?.copyWith(

View File

@@ -214,13 +214,13 @@ class BackupAlbumSelectionPage extends HookConsumerWidget {
ListTile(
title: Text(
"backup_album_selection_page_albums_device".tr(
args: [
ref
namedArgs: {
'count': ref
.watch(backupProvider)
.availableAlbums
.length
.toString(),
],
},
),
style: context.textTheme.titleSmall,
),

View File

@@ -1,18 +1,18 @@
import 'dart:typed_data';
import 'dart:async';
import 'dart:typed_data';
import 'dart:ui';
import 'package:auto_route/auto_route.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/repositories/file_media.repository.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:auto_route/auto_route.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:immich_mobile/repositories/file_media.repository.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:path/path.dart' as p;
/// A stateless widget that provides functionality for editing an image.
@@ -81,7 +81,7 @@ class EditImagePage extends ConsumerWidget {
ImmichToast.show(
durationInSecond: 6,
context: context,
msg: "error_saving_image".tr(args: [e.toString()]),
msg: "error_saving_image".tr(namedArgs: {'error': e.toString()}),
gravity: ToastGravity.CENTER,
);
}

View File

@@ -24,7 +24,7 @@ class ArchivePage extends HookConsumerWidget {
automaticallyImplyLeading: false,
title: const Text(
'archive_page_title',
).tr(args: [count]),
).tr(namedArgs: {'count': count}),
);
}

View File

@@ -73,7 +73,8 @@ class PartnerPage extends HookConsumerWidget {
builder: (BuildContext context) {
return ConfirmDialog(
title: "stop_photo_sharing",
content: "partner_page_stop_sharing_content".tr(args: [u.name]),
content: "partner_page_stop_sharing_content"
.tr(namedArgs: {'partner': u.name}),
onOk: () => ref.read(partnerServiceProvider).removePartner(u),
);
},

View File

@@ -7,11 +7,11 @@ import 'package:fluttertoast/fluttertoast.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
import 'package:immich_mobile/providers/server_info.provider.dart';
import 'package:immich_mobile/providers/shared_link.provider.dart';
import 'package:immich_mobile/services/shared_link.service.dart';
import 'package:immich_mobile/providers/server_info.provider.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:immich_mobile/utils/url_helper.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
@RoutePage()
class SharedLinkEditPage extends HookConsumerWidget {
@@ -241,8 +241,8 @@ class SharedLinkEditPage extends HookConsumerWidget {
),
DropdownMenuEntry(
value: 30,
label:
"shared_link_edit_expire_after_option_minutes".tr(args: ["30"]),
label: "shared_link_edit_expire_after_option_minutes"
.tr(namedArgs: {'count': "30"}),
),
DropdownMenuEntry(
value: 60,
@@ -250,7 +250,8 @@ class SharedLinkEditPage extends HookConsumerWidget {
),
DropdownMenuEntry(
value: 60 * 6,
label: "shared_link_edit_expire_after_option_hours".tr(args: ["6"]),
label: "shared_link_edit_expire_after_option_hours"
.tr(namedArgs: {'count': "6"}),
),
DropdownMenuEntry(
value: 60 * 24,
@@ -258,20 +259,23 @@ class SharedLinkEditPage extends HookConsumerWidget {
),
DropdownMenuEntry(
value: 60 * 24 * 7,
label: "shared_link_edit_expire_after_option_days".tr(args: ["7"]),
label: "shared_link_edit_expire_after_option_days"
.tr(namedArgs: {'count': "7"}),
),
DropdownMenuEntry(
value: 60 * 24 * 30,
label: "shared_link_edit_expire_after_option_days".tr(args: ["30"]),
label: "shared_link_edit_expire_after_option_days"
.tr(namedArgs: {'count': "30"}),
),
DropdownMenuEntry(
value: 60 * 24 * 30 * 3,
label:
"shared_link_edit_expire_after_option_months".tr(args: ["3"]),
label: "shared_link_edit_expire_after_option_months"
.tr(namedArgs: {'count': "3"}),
),
DropdownMenuEntry(
value: 60 * 24 * 30 * 12,
label: "shared_link_edit_expire_after_option_year".tr(args: ["1"]),
label: "shared_link_edit_expire_after_option_year"
.tr(namedArgs: {'count': "1"}),
),
],
);

View File

@@ -4,18 +4,18 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/providers/asset.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
import 'package:immich_mobile/providers/trash.provider.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/providers/server_info.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/providers/trash.provider.dart';
import 'package:immich_mobile/utils/immich_loading_overlay.dart';
import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:immich_mobile/utils/immich_loading_overlay.dart';
@RoutePage()
class TrashPage extends HookConsumerWidget {
@@ -77,7 +77,7 @@ class TrashPage extends HookConsumerWidget {
ImmichToast.show(
context: context,
msg: 'assets_deleted_permanently'
.tr(args: ["${selection.value.length}"]),
.tr(namedArgs: {'count': "${selection.value.length}"}),
gravity: ToastGravity.BOTTOM,
);
}
@@ -118,7 +118,7 @@ class TrashPage extends HookConsumerWidget {
ImmichToast.show(
context: context,
msg: 'assets_restored_successfully'
.tr(args: ["${selection.value.length}"]),
.tr(namedArgs: {'count': "${selection.value.length}"}),
gravity: ToastGravity.BOTTOM,
);
}
@@ -135,7 +135,7 @@ class TrashPage extends HookConsumerWidget {
? "${selection.value.length}"
: "trash_page_select_assets_btn".tr();
}
return 'trash_page_title'.tr(args: [count]);
return 'trash_page_title'.tr(namedArgs: {'count': count});
}
AppBar buildAppBar(String count) {
@@ -260,7 +260,7 @@ class TrashPage extends HookConsumerWidget {
),
child: const Text(
"trash_page_info",
).tr(args: ["$trashDays"]),
).tr(namedArgs: {"days": "$trashDays"}),
),
),
),

View File

@@ -56,9 +56,7 @@ class ShareIntentPage extends HookConsumerWidget {
title: Column(
children: [
const Text('upload_to_immich').tr(
args: [
candidates.length.toString(),
],
namedArgs: {'count': candidates.length.toString()},
),
Text(
currentEndpoint,
@@ -176,8 +174,12 @@ class UploadingText extends StatelessWidget {
return element.status == UploadStatus.complete;
}).length;
return const Text("shared_intent_upload_button_progress_text")
.tr(args: [uploadedCount.toString(), candidates.length.toString()]);
return const Text("shared_intent_upload_button_progress_text").tr(
namedArgs: {
'current': uploadedCount.toString(),
'total': candidates.length.toString(),
},
);
}
}