Skip to content

Commit a2866af

Browse files
feat(ref: no-ref): add translations
1 parent 7eef202 commit a2866af

8 files changed

+79
-50
lines changed

lib/common/app-translation/app-translation.dart

+13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import '../../screens/home/todo/add-task/add-task.translation.dart'
55
as home_add_task;
66
import '../../screens/home/todo/filter-panel/filter-panel.translation.dart'
77
as home_filter_panel;
8+
import '../items-left/items-left.translation.dart' as items_left;
89

910
class AppTranslation extends GetxService {
1011
AppTranslation();
@@ -42,6 +43,18 @@ class AppTranslation extends GetxService {
4243
home_filter_panel.ru,
4344
);
4445

46+
_combineTranslations(
47+
home_filter_panel.en,
48+
home_filter_panel.uk,
49+
home_filter_panel.ru,
50+
);
51+
52+
_combineTranslations(
53+
items_left.en,
54+
items_left.uk,
55+
items_left.ru,
56+
);
57+
4558
return translationsKeys;
4659
}
4760
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import 'package:get/get.dart';
2+
import 'package:intl/intl.dart';
3+
4+
import '../app-translation/translation.extensions.dart';
5+
import 'items-left.translation.dart';
6+
7+
extension ItemsLeftFormatting on int {
8+
String get itemsLeft => _getPlural(
9+
this,
10+
one: ItemsLeftTranslationNames.oneItem.tr,
11+
few: ItemsLeftTranslationNames.fewItems.tr,
12+
many: ItemsLeftTranslationNames.manyItems.tr,
13+
).trim();
14+
15+
String _getPlural(int value,
16+
{required String one, required String few, required String many}) {
17+
if (value > 0) {
18+
return Intl.plural(
19+
value,
20+
zero: '',
21+
one: '$value $one',
22+
few: '$value $few',
23+
many: '$value $many',
24+
other: '$value $many',
25+
locale: Get.locale?.languageCode,
26+
);
27+
}
28+
return '';
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import '../../../../common/app-translation/translation.extensions.dart';
2+
3+
enum ItemsLeftTranslationNames implements Translation {
4+
oneItem,
5+
fewItems,
6+
manyItems,
7+
}
8+
9+
final Map<String, String> en = <ItemsLeftTranslationNames, String>{
10+
ItemsLeftTranslationNames.oneItem: 'item left',
11+
ItemsLeftTranslationNames.fewItems: 'items left',
12+
ItemsLeftTranslationNames.manyItems: 'items left',
13+
}.st;
14+
15+
final Map<String, String> ru = <ItemsLeftTranslationNames, String>{
16+
ItemsLeftTranslationNames.oneItem: 'элемент остался',
17+
ItemsLeftTranslationNames.fewItems: 'элемента осталось',
18+
ItemsLeftTranslationNames.manyItems: 'элементов осталось',
19+
}.st;
20+
21+
final Map<String, String> uk = <ItemsLeftTranslationNames, String>{
22+
ItemsLeftTranslationNames.oneItem: 'елемент залишився',
23+
ItemsLeftTranslationNames.fewItems: 'елементи залишились',
24+
ItemsLeftTranslationNames.manyItems: 'елементів залишилось',
25+
}.st;

lib/screens/home/home.binding.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class HomeBinding extends Bindings {
1212
Get
1313
..lazyPut(AppTranslation.new)
1414
..lazyPut(TodoService.new)
15-
..lazyPut(LocaleController.new)
15+
..lazyPut(LanguageSwitcherController.new)
1616
..lazyPut(() => AddTaskController(Get.find()))
1717
..lazyPut(() => FilterPanelController(Get.find()))
1818
..lazyPut(() => TaskListItemController(Get.find(), Get.find()));

lib/screens/home/language-switcher/language-switcher.controller.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:get/get.dart';
22
import 'language-switcher.enum.dart';
33

4-
class LocaleController extends GetxController {
4+
class LanguageSwitcherController extends GetxController {
55
final Rx<Language> currentLanguage = Language.en.obs;
66

77
List<Language> get languages => Language.values;

lib/screens/home/language-switcher/language-switcher.dart

+1-31
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,9 @@
1-
// import 'package:flutter/material.dart';
2-
// import 'package:get/get.dart';
3-
// import 'language-switcher.controller.dart';
4-
//
5-
// class LanguageSwitcher extends GetView<LocaleController> {
6-
// const LanguageSwitcher({super.key});
7-
//
8-
// @override
9-
// Widget build(BuildContext context) => Obx(() => DropdownButton<Locale>(
10-
// value: controller.locales.firstWhere(
11-
// (Locale locale) =>
12-
// locale.languageCode ==
13-
// controller.currentLocale.value.languageCode,
14-
// orElse: () => controller.locales.first,
15-
// ),
16-
// onChanged: (Locale? locale) {
17-
// if (locale != null) {
18-
// controller.updateLocale(locale);
19-
// }
20-
// },
21-
// items: controller.locales
22-
// .map<DropdownMenuItem<Locale>>(
23-
// (Locale locale) => DropdownMenuItem<Locale>(
24-
// value: locale,
25-
// child: Text(controller.localeNames[locale.languageCode] ??
26-
// locale.languageCode),
27-
// ))
28-
// .toList(),
29-
// ));
30-
// }
311
import 'package:flutter/material.dart';
322
import 'package:get/get.dart';
333
import 'language-switcher.controller.dart';
344
import 'language-switcher.enum.dart';
355

36-
class LanguageSwitcher extends GetView<LocaleController> {
6+
class LanguageSwitcher extends GetView<LanguageSwitcherController> {
377
const LanguageSwitcher({super.key});
388

399
@override

lib/screens/home/todo/filter-panel/filter-panel.translation.dart

-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import '../../../../common/app-translation/translation.extensions.dart';
22

33
enum FilterPanelTranslationNames implements Translation {
44
clearItems,
5-
itemsLeft,
65
all,
76
active,
87
completed
@@ -13,23 +12,18 @@ final Map<String, String> en = <FilterPanelTranslationNames, String>{
1312
FilterPanelTranslationNames.all: 'All',
1413
FilterPanelTranslationNames.active: 'Active',
1514
FilterPanelTranslationNames.completed: 'Completed',
16-
FilterPanelTranslationNames.itemsLeft: '@count items left',
1715
}.st;
1816

1917
final Map<String, String> ru = <FilterPanelTranslationNames, String>{
2018
FilterPanelTranslationNames.clearItems: 'Очистить выполненные',
2119
FilterPanelTranslationNames.all: 'Все',
2220
FilterPanelTranslationNames.active: 'Активные',
2321
FilterPanelTranslationNames.completed: 'Выполненные',
24-
FilterPanelTranslationNames.itemsLeft:
25-
'@count элемент остался|@count элемента осталось|@count элементов осталось',
2622
}.st;
2723

2824
final Map<String, String> uk = <FilterPanelTranslationNames, String>{
2925
FilterPanelTranslationNames.clearItems: 'Очистити виконані',
3026
FilterPanelTranslationNames.all: 'Усі',
3127
FilterPanelTranslationNames.active: 'Активні',
3228
FilterPanelTranslationNames.completed: 'Виконані',
33-
FilterPanelTranslationNames.itemsLeft:
34-
'@count елемент залишився|@count елементи залишились|@count елементів залишилось',
3529
}.st;

lib/screens/home/todo/filter-panel/filter-panel.widget.dart

+8-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:get/get.dart';
33
import '../../../../common/app-translation/translation.extensions.dart';
44
import '../../../../common/button/button.widget.dart';
5+
import '../../../../common/items-left/items-left.extensions.dart';
56
import 'filter-panel-buttons/filter-panel-buttons.dart';
67
import 'filter-panel.controller.dart';
78
import 'filter-panel.translation.dart';
@@ -11,8 +12,6 @@ class FilterPanelWidget extends GetView<FilterPanelController> {
1112

1213
@override
1314
Widget build(BuildContext context) => Obx(() {
14-
final bool isMobile = MediaQuery.of(context).size.width < 600;
15-
1615
if (controller.tasks.isEmpty) {
1716
return const SizedBox();
1817
}
@@ -25,23 +24,21 @@ class FilterPanelWidget extends GetView<FilterPanelController> {
2524
mainAxisAlignment: MainAxisAlignment.spaceBetween,
2625
children: <Widget>[
2726
Text(
28-
'${controller.activeCount} items left',
27+
controller.activeCount.itemsLeft,
2928
style: const TextStyle(fontSize: 14, color: Colors.grey),
3029
),
31-
if (!isMobile) const FilterPanelButtons(),
3230
ButtonWidget(
3331
onTap: controller.clearCompleted,
3432
title: FilterPanelTranslationNames.clearItems.tr,
3533
),
3634
],
3735
),
38-
if (isMobile)
39-
const Row(
40-
mainAxisAlignment: MainAxisAlignment.center,
41-
children: <Widget>[
42-
FilterPanelButtons(),
43-
],
44-
),
36+
const Row(
37+
mainAxisAlignment: MainAxisAlignment.center,
38+
children: <Widget>[
39+
FilterPanelButtons(),
40+
],
41+
),
4542
],
4643
),
4744
);

0 commit comments

Comments
 (0)