diff --git a/android/gradle.properties b/android/gradle.properties index 7784507..a6164f7 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -55,13 +55,8 @@ EX_DEV_CLIENT_NETWORK_INSPECTOR=true # Use legacy packaging to compress native libraries in the resulting APK. expo.useLegacyPackaging=false +# Whether the app is configured to use edge-to-edge via the app config or `react-native-edge-to-edge` plugin +expo.edgeToEdgeEnabled=true android.packagingOptions.pickFirsts=**/libc++_shared.so expo.sqlite.enableFTS=false -expo.sqlite.useSQLCipher=false - -MYAPP_UPLOAD_STORE_FILE=taskeep.keystore -MYAPP_UPLOAD_KEY_ALIAS=taskeep -MYAPP_UPLOAD_STORE_PASSWORD=123?_Tk_?123 -MYAPP_UPLOAD_KEY_PASSWORD=123?_Tk_?123 -# Whether the app is configured to use edge-to-edge via the app config or `react-native-edge-to-edge` plugin -expo.edgeToEdgeEnabled=true \ No newline at end of file +expo.sqlite.useSQLCipher=false \ No newline at end of file diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index 96eb5c9..8c807ab 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -3,10 +3,12 @@ import React from 'react'; import { Platform } from 'react-native'; import Ionicons from '@expo/vector-icons/Ionicons'; +import { useTranslation } from 'react-i18next'; import { HapticTab } from '../../components/HapticTab'; import TabBarBackground from '../../components/ui/TabBarBackground'; export default function TabLayout() { + const { t } = useTranslation(); return ( , }} /> , }} /> diff --git a/app/_layout.tsx b/app/_layout.tsx index ead2657..217a014 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -5,7 +5,6 @@ import { Stack } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import 'react-native-reanimated'; -import "../i18n.js"; import React from 'react'; import { useColorScheme } from '../hooks/useColorScheme'; diff --git a/app/taskForm/index.tsx b/app/taskForm/index.tsx index 6c703b9..21b81b1 100644 --- a/app/taskForm/index.tsx +++ b/app/taskForm/index.tsx @@ -84,7 +84,7 @@ export default function TasksForm() { useFocusEffect(React.useCallback(() => { categoryRepository.findAll().then((categories) => { - categories.push(new Category("Create new category", "➕", 0)); + categories.push(new Category(t("create_new_category"), "➕", 0)); setCategories(categories); if (newTask.category === 0) { setNewTask({ ...newTask, category: -1 }); @@ -123,7 +123,7 @@ export default function TasksForm() { /> unit.value === selectedTimeUnit)?.label} ${t('after_which_task_is_due')}`} + placeholder={`${t(timeUnits.find(unit => unit.value === selectedTimeUnit)?.label!)} ${t('after_which_task_is_due')}`} style={styles.inputText} placeholderTextColor="#333" keyboardType='numeric' @@ -131,7 +131,12 @@ export default function TasksForm() { onChange={(e) => setNewTask({ ...newTask, daysToRedo: e.nativeEvent.text.length > 0 ? parseInt(e.nativeEvent.text) : NaN })} /> { + return { + label: t(tu.label), + value: tu.value + } + })} onValueChange={(value) => setSelectedTimeUnit(value?.toString() ?? "")} selectedValue={selectedTimeUnit} maxSelectableItems={1} @@ -208,18 +213,18 @@ export default function TasksForm() { ...task, ...newTask }).then(() => { - toast.success("Task updated successfully!"); + toast.success(t('task_updated_successfully')); router.back(); }); } else { // Create new task taskRepository.create(new Task(newTask.title, newTask.daysToRedo, newTask.category)).then(() => { - toast.success("Task added successfully!"); + toast.success(t('task_added_successfully')); router.back(); }); } } else { - toast.error("Please fill in all fields correctly."); + toast.error(t("please_fill_in_all_fields_correctly")); } }}> diff --git a/app/widgets/hello.tsx b/app/widgets/hello.tsx index 0eb7e87..457147a 100644 --- a/app/widgets/hello.tsx +++ b/app/widgets/hello.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import { useTranslation } from 'react-i18next'; import { ColorProp, FlexWidget, IconWidget, ListWidget, SvgWidget, TextWidget, } from 'react-native-android-widget'; import { getClockProgressSVG } from '../../components/clockProgress'; +import i18n from '../../i18n.js'; import { Category } from '../../models/category'; import { Task } from '../../models/task'; import { GetTaskColor } from '../../utils/colors'; @@ -17,7 +17,8 @@ const adaptDaysToGoToUnit = (t: Task) => { }; export function HelloWidget({ tasks, categories }: { tasks: Task[], categories?: Category[] }) { - const { t } = useTranslation(); + + const { t } = i18n; const demoTasks: Task[] = [ new Task('Task 1', 1, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 0, 5), // 2 days ago diff --git a/components/taskItem.tsx b/components/taskItem.tsx index dfbf8d9..04ef812 100644 --- a/components/taskItem.tsx +++ b/components/taskItem.tsx @@ -91,7 +91,7 @@ export function TaskItem({ task, categories, onUpdate, lightColor, darkColor, .. {task?.title} - {category?.icon + " " + category?.title + " - " + (adaptDaysToGoToUnit(task) == 0 ? "Overdue" : adaptDaysToGoToUnit(task))} + {category?.icon + " " + category?.title + " - " + (adaptDaysToGoToUnit(task) == 0 ? t("Overdue") : adaptDaysToGoToUnit(task))} { diff --git a/i18n.js b/i18n.js index 0612ca7..092310a 100644 --- a/i18n.js +++ b/i18n.js @@ -1,4 +1,4 @@ -import * as Localization from 'expo-localization'; +import { getLocales } from 'expo-localization'; import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import ar from './translations/ar.json'; @@ -12,16 +12,20 @@ import pt from './translations/pt.json'; import ru from './translations/ru.json'; import zh from './translations/zh.json'; -registerWidgetTaskHandler(widgetTaskHandler); - // Initialize i18n -const resources = { en, es, fr, de, it, pt, zh, ja, ru, ar }; +const langList = { en, es, fr, de, it, pt, zh, ja, ru, ar }; +const resources = {}; +const locales = getLocales(); + +Object.keys(langList).forEach((lang) => { + resources[lang] = { translation: langList[lang] }; +}); i18n .use(initReactI18next) .init({ resources, - lng: Localization.locale.split('-')[0], // Use the device's language + lng: locales[0]?.languageTag.split('-')[0], // Use the device's language fallbackLng: 'en', interpolation: { escapeValue: false, // React already escapes values diff --git a/index.tsx b/index.tsx index 0de2073..f3496bf 100644 --- a/index.tsx +++ b/index.tsx @@ -1,6 +1,7 @@ import 'expo-router/entry'; import { registerWidgetTaskHandler } from 'react-native-android-widget'; import { widgetTaskHandler } from './app/widgets/widget-task-handler'; +import "./i18n.js"; registerWidgetTaskHandler(widgetTaskHandler); diff --git a/translations/ar.json b/translations/ar.json index 37b7d1c..3ea4265 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -29,5 +29,37 @@ "hello_tasks": "مرحبًا، المهام!", "no_tasks_created": "لم يتم إنشاء مهام.", "left": "متبقي", - "overdue": "متأخر" + "overdue": "متأخر", + "select_action": "اختر إجراءً", + "choose_action_for_task": "اختر إجراءً لهذه المهمة", + "choose_action_for_category": "اختر إجراءً لهذه الفئة", + "edit": "تحرير", + "remove": "إزالة", + "cancel": "إلغاء", + "select_icon": "اختر رمزًا", + "change_icon": "تغيير الرمز", + "select_iconand_enter_title": "اختر رمزًا وأدخل عنوانًا", + "add_category": "إضافة فئة", + "add_task": "إضافة مهمة", + "update_category": "تحديث الفئة", + "update_task": "تحديث المهمة", + "task_updated_successfully": "تم تحديث المهمة بنجاح!", + "category_updated_successfully": "تم تحديث الفئة بنجاح!", + "error_updating_task": "خطأ أثناء تحديث المهمة:", + "error_updating_category": "خطأ أثناء تحديث الفئة:", + "task_added_successfully": "تمت إضافة المهمة بنجاح!", + "category_added_successfully": "تمت إضافة الفئة بنجاح!", + "please_fill_in_all_fields_correctly": "يرجى ملء جميع الحقول بشكل صحيح.", + "task_deleted_successfully": "تم حذف المهمة بنجاح!", + "category_deleted_successfully": "تم حذف الفئة بنجاح!", + "create_new_category": "إنشاء فئة جديدة", + "after_which_task_is_due": "بعد ذلك تكون المهمة مستحقة", + "Minutes": "دقائق", + "Hours": "ساعات", + "Days": "أيام", + "Weeks": "أسابيع", + "Months": "أشهر", + "select_icon_and_enter_title": "اختر رمزًا وأدخل عنوانًا", + "Tasks": "المهام", + "Categories": "الفئات" } \ No newline at end of file diff --git a/translations/de.json b/translations/de.json index 8d9da9d..47b9665 100644 --- a/translations/de.json +++ b/translations/de.json @@ -29,5 +29,37 @@ "hello_tasks": "Hallo, Aufgaben!", "no_tasks_created": "Keine Aufgaben erstellt.", "left": "verbleibend", - "overdue": "Überfällig" + "overdue": "Überfällig", + "select_action": "Wählen Sie eine Aktion", + "choose_action_for_task": "Wählen Sie eine Aktion für diese Aufgabe", + "choose_action_for_category": "Wählen Sie eine Aktion für diese Kategorie", + "edit": "Bearbeiten", + "remove": "Entfernen", + "cancel": "Abbrechen", + "select_icon": "Symbol auswählen", + "change_icon": "Symbol ändern", + "select_iconand_enter_title": "Wählen Sie ein Symbol und geben Sie einen Titel ein", + "add_category": "Kategorie hinzufügen", + "add_task": "Aufgabe hinzufügen", + "update_category": "Kategorie aktualisieren", + "update_task": "Aufgabe aktualisieren", + "task_updated_successfully": "Aufgabe erfolgreich aktualisiert!", + "category_updated_successfully": "Kategorie erfolgreich aktualisiert!", + "error_updating_task": "Fehler beim Aktualisieren der Aufgabe:", + "error_updating_category": "Fehler beim Aktualisieren der Kategorie:", + "task_added_successfully": "Aufgabe erfolgreich hinzugefügt!", + "category_added_successfully": "Kategorie erfolgreich hinzugefügt!", + "please_fill_in_all_fields_correctly": "Bitte füllen Sie alle Felder korrekt aus.", + "task_deleted_successfully": "Aufgabe erfolgreich gelöscht!", + "category_deleted_successfully": "Kategorie erfolgreich gelöscht!", + "create_new_category": "Neue Kategorie erstellen", + "after_which_task_is_due": "nachdem die Aufgabe fällig ist", + "Minutes": "Minuten", + "Hours": "Stunden", + "Days": "Tage", + "Weeks": "Wochen", + "Months": "Monate", + "select_icon_and_enter_title": "Wählen Sie ein Symbol und geben Sie einen Titel ein", + "Tasks": "Aufgaben", + "Categories": "Kategorien" } \ No newline at end of file diff --git a/translations/en.json b/translations/en.json index 25d20c1..43dfdcc 100644 --- a/translations/en.json +++ b/translations/en.json @@ -29,5 +29,37 @@ "hello_tasks": "Hello, Tasks!", "no_tasks_created": "No tasks created.", "left": "left", - "overdue": "Overdue" + "overdue": "Overdue", + "select_action": "Select an action", + "choose_action_for_task": "Choose an action for this task", + "choose_action_for_category": "Choose an action for this category", + "edit": "Edit", + "remove": "Remove", + "cancel": "Cancel", + "select_icon": "Select an icon", + "change_icon": "Change icon", + "select_iconand_enter_title": "Select an icon and enter a title", + "add_category": "Add Category", + "add_task": "Add Task", + "update_category": "Update Category", + "update_task": "Update Task", + "task_updated_successfully": "Task updated successfully!", + "category_updated_successfully": "Category updated successfully!", + "error_updating_task": "Error updating task:", + "error_updating_category": "Error updating category:", + "task_added_successfully": "Task added successfully!", + "category_added_successfully": "Category added successfully!", + "please_fill_in_all_fields_correctly": "Please fill in all fields correctly.", + "task_deleted_successfully": "Task deleted successfully!", + "category_deleted_successfully": "Category deleted successfully!", + "create_new_category": "Create new category", + "after_which_task_is_due": "after which task is due", + "Minutes": "Minutes", + "Hours": "Hours", + "Days": "Days", + "Weeks": "Weeks", + "Months": "Months", + "select_icon_and_enter_title": "Select an icon and enter a title", + "Tasks": "Tasks", + "Categories": "Categories" } \ No newline at end of file diff --git a/translations/es.json b/translations/es.json index c68620b..6ca255c 100644 --- a/translations/es.json +++ b/translations/es.json @@ -29,5 +29,37 @@ "hello_tasks": "¡Hola, Tareas!", "no_tasks_created": "No se han creado tareas.", "left": "restante", - "overdue": "Atrasado" + "overdue": "Atrasado", + "select_action": "Selecciona una acción", + "choose_action_for_task": "Elige una acción para esta tarea", + "choose_action_for_category": "Elige una acción para esta categoría", + "edit": "Editar", + "remove": "Eliminar", + "cancel": "Cancelar", + "select_icon": "Seleccionar un ícono", + "change_icon": "Cambiar ícono", + "select_iconand_enter_title": "Selecciona un ícono e ingresa un título", + "add_category": "Agregar Categoría", + "add_task": "Agregar Tarea", + "update_category": "Actualizar Categoría", + "update_task": "Actualizar Tarea", + "task_updated_successfully": "¡Tarea actualizada con éxito!", + "category_updated_successfully": "¡Categoría actualizada con éxito!", + "error_updating_task": "Error al actualizar la tarea:", + "error_updating_category": "Error al actualizar la categoría:", + "task_added_successfully": "¡Tarea añadida con éxito!", + "category_added_successfully": "¡Categoría añadida con éxito!", + "please_fill_in_all_fields_correctly": "Por favor, completa todos los campos correctamente.", + "task_deleted_successfully": "¡Tarea eliminada con éxito!", + "category_deleted_successfully": "¡Categoría eliminada con éxito!", + "create_new_category": "Crear nueva categoría", + "after_which_task_is_due": "después de lo cual vence la tarea", + "Minutes": "Minutos", + "Hours": "Horas", + "Days": "Días", + "Weeks": "Semanas", + "Months": "Meses", + "select_icon_and_enter_title": "Selecciona un ícono e ingresa un título", + "Tasks": "Tareas", + "Categories": "Categorías" } \ No newline at end of file diff --git a/translations/fr.json b/translations/fr.json index db77c93..7ee6830 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -29,5 +29,37 @@ "hello_tasks": "Bonjour, Tâches!", "no_tasks_created": "Aucune tâche créée.", "left": "restant", - "overdue": "En retard" + "overdue": "En retard", + "select_action": "Sélectionnez une action", + "choose_action_for_task": "Choisissez une action pour cette tâche", + "choose_action_for_category": "Choisissez une action pour cette catégorie", + "edit": "Modifier", + "remove": "Supprimer", + "cancel": "Annuler", + "select_icon": "Sélectionner une icône", + "change_icon": "Changer d'icône", + "select_iconand_enter_title": "Sélectionnez une icône et entrez un titre", + "add_category": "Ajouter une catégorie", + "add_task": "Ajouter une tâche", + "update_category": "Mettre à jour la catégorie", + "update_task": "Mettre à jour la tâche", + "task_updated_successfully": "Tâche mise à jour avec succès!", + "category_updated_successfully": "Catégorie mise à jour avec succès!", + "error_updating_task": "Erreur lors de la mise à jour de la tâche:", + "error_updating_category": "Erreur lors de la mise à jour de la catégorie:", + "task_added_successfully": "Tâche ajoutée avec succès!", + "category_added_successfully": "Catégorie ajoutée avec succès!", + "please_fill_in_all_fields_correctly": "Veuillez remplir tous les champs correctement.", + "task_deleted_successfully": "Tâche supprimée avec succès!", + "category_deleted_successfully": "Catégorie supprimée avec succès!", + "create_new_category": "Créer une nouvelle catégorie", + "after_which_task_is_due": "après quoi la tâche est due", + "Minutes": "Minutes", + "Hours": "Heures", + "Days": "Jours", + "Weeks": "Semaines", + "Months": "Mois", + "select_icon_and_enter_title": "Sélectionnez une icône et entrez un titre", + "Tasks": "Tâches", + "Categories": "Catégories" } \ No newline at end of file diff --git a/translations/it.json b/translations/it.json index 5ef1370..0ad87e2 100644 --- a/translations/it.json +++ b/translations/it.json @@ -29,5 +29,37 @@ "hello_tasks": "Ciao, Attività!", "no_tasks_created": "Nessuna attività creata.", "left": "rimanente", - "overdue": "In ritardo" + "overdue": "In ritardo", + "select_action": "Seleziona un'azione", + "choose_action_for_task": "Scegli un'azione per questa attività", + "choose_action_for_category": "Scegli un'azione per questa categoria", + "edit": "Modifica", + "remove": "Rimuovi", + "cancel": "Annulla", + "select_icon": "Seleziona un'icona", + "change_icon": "Cambia icona", + "select_iconand_enter_title": "Seleziona un'icona e inserisci un titolo", + "add_category": "Aggiungi Categoria", + "add_task": "Aggiungi Attività", + "update_category": "Aggiorna Categoria", + "update_task": "Aggiorna Attività", + "task_updated_successfully": "Attività aggiornata con successo!", + "category_updated_successfully": "Categoria aggiornata con successo!", + "error_updating_task": "Errore durante l'aggiornamento dell'attività:", + "error_updating_category": "Errore durante l'aggiornamento della categoria:", + "task_added_successfully": "Attività aggiunta con successo!", + "category_added_successfully": "Categoria aggiunta con successo!", + "please_fill_in_all_fields_correctly": "Si prega di compilare correttamente tutti i campi.", + "task_deleted_successfully": "Attività eliminata con successo!", + "category_deleted_successfully": "Categoria eliminata con successo!", + "create_new_category": "Crea nuova categoria", + "after_which_task_is_due": "dopo di che l'attività è dovuta", + "Minutes": "Minuti", + "Hours": "Ore", + "Days": "Giorni", + "Weeks": "Settimane", + "Months": "Mesi", + "select_icon_and_enter_title": "Seleziona un'icona e inserisci un titolo", + "Tasks": "Attività", + "Categories": "Categorie" } \ No newline at end of file diff --git a/translations/ja.json b/translations/ja.json index 831f1fd..52bddcd 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -29,5 +29,37 @@ "hello_tasks": "こんにちは、タスク!", "no_tasks_created": "タスクが作成されていません。", "left": "残り", - "overdue": "期限切れ" + "overdue": "期限切れ", + "select_action": "アクションを選択", + "choose_action_for_task": "このタスクのアクションを選択", + "choose_action_for_category": "このカテゴリのアクションを選択", + "edit": "編集", + "remove": "削除", + "cancel": "キャンセル", + "select_icon": "アイコンを選択", + "change_icon": "アイコンを変更", + "select_iconand_enter_title": "アイコンを選択してタイトルを入力", + "add_category": "カテゴリを追加", + "add_task": "タスクを追加", + "update_category": "カテゴリを更新", + "update_task": "タスクを更新", + "task_updated_successfully": "タスクが正常に更新されました!", + "category_updated_successfully": "カテゴリが正常に更新されました!", + "error_updating_task": "タスクの更新中にエラーが発生しました:", + "error_updating_category": "カテゴリの更新中にエラーが発生しました:", + "task_added_successfully": "タスクが正常に追加されました!", + "category_added_successfully": "カテゴリが正常に追加されました!", + "please_fill_in_all_fields_correctly": "すべてのフィールドを正しく入力してください。", + "task_deleted_successfully": "タスクが正常に削除されました!", + "category_deleted_successfully": "カテゴリが正常に削除されました!", + "create_new_category": "新しいカテゴリを作成", + "after_which_task_is_due": "タスクが期限になるまで", + "Minutes": "分", + "Hours": "時間", + "Days": "日", + "Weeks": "週間", + "Months": "月", + "select_icon_and_enter_title": "アイコンを選択してタイトルを入力", + "Tasks": "タスク", + "Categories": "カテゴリ" } \ No newline at end of file diff --git a/translations/pt.json b/translations/pt.json index f0862da..68893d0 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -29,5 +29,37 @@ "hello_tasks": "Olá, Tarefas!", "no_tasks_created": "Nenhuma tarefa criada.", "left": "restante", - "overdue": "Atrasado" + "overdue": "Atrasado", + "select_action": "Selecione uma ação", + "choose_action_for_task": "Escolha uma ação para esta tarefa", + "choose_action_for_category": "Escolha uma ação para esta categoria", + "edit": "Editar", + "remove": "Remover", + "cancel": "Cancelar", + "select_icon": "Selecionar um ícone", + "change_icon": "Alterar ícone", + "select_iconand_enter_title": "Selecione um ícone e insira um título", + "add_category": "Adicionar Categoria", + "add_task": "Adicionar Tarefa", + "update_category": "Atualizar Categoria", + "update_task": "Atualizar Tarefa", + "task_updated_successfully": "Tarefa atualizada com sucesso!", + "category_updated_successfully": "Categoria atualizada com sucesso!", + "error_updating_task": "Erro ao atualizar a tarefa:", + "error_updating_category": "Erro ao atualizar a categoria:", + "task_added_successfully": "Tarefa adicionada com sucesso!", + "category_added_successfully": "Categoria adicionada com sucesso!", + "please_fill_in_all_fields_correctly": "Por favor, preencha todos os campos corretamente.", + "task_deleted_successfully": "Tarefa excluída com sucesso!", + "category_deleted_successfully": "Categoria excluída com sucesso!", + "create_new_category": "Criar nova categoria", + "after_which_task_is_due": "após o qual a tarefa é devida", + "Minutes": "Minutos", + "Hours": "Horas", + "Days": "Dias", + "Weeks": "Semanas", + "Months": "Meses", + "select_icon_and_enter_title": "Selecione um ícone e insira um título", + "Tasks": "Tarefas", + "Categories": "Categorias" } \ No newline at end of file diff --git a/translations/ru.json b/translations/ru.json index 01429fc..408cb42 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -29,5 +29,37 @@ "hello_tasks": "Привет, задачи!", "no_tasks_created": "Задачи не созданы.", "left": "осталось", - "overdue": "Просрочено" + "overdue": "Просрочено", + "select_action": "Выберите действие", + "choose_action_for_task": "Выберите действие для этой задачи", + "choose_action_for_category": "Выберите действие для этой категории", + "edit": "Редактировать", + "remove": "Удалить", + "cancel": "Отмена", + "select_icon": "Выберите значок", + "change_icon": "Изменить значок", + "select_iconand_enter_title": "Выберите значок и введите название", + "add_category": "Добавить категорию", + "add_task": "Добавить задачу", + "update_category": "Обновить категорию", + "update_task": "Обновить задачу", + "task_updated_successfully": "Задача успешно обновлена!", + "category_updated_successfully": "Категория успешно обновлена!", + "error_updating_task": "Ошибка при обновлении задачи:", + "error_updating_category": "Ошибка при обновлении категории:", + "task_added_successfully": "Задача успешно добавлена!", + "category_added_successfully": "Категория успешно добавлена!", + "please_fill_in_all_fields_correctly": "Пожалуйста, заполните все поля правильно.", + "task_deleted_successfully": "Задача успешно удалена!", + "category_deleted_successfully": "Категория успешно удалена!", + "create_new_category": "Создать новую категорию", + "after_which_task_is_due": "после чего задача должна быть выполнена", + "Minutes": "Минуты", + "Hours": "Часы", + "Days": "Дни", + "Weeks": "Недели", + "Months": "Месяцы", + "select_icon_and_enter_title": "Выберите значок и введите название", + "Tasks": "Задачи", + "Categories": "Категории" } \ No newline at end of file diff --git a/translations/zh.json b/translations/zh.json index f10913a..160b290 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -29,5 +29,37 @@ "hello_tasks": "你好,任务!", "no_tasks_created": "没有创建任务。", "left": "剩余", - "overdue": "逾期" + "overdue": "逾期", + "select_action": "选择一个操作", + "choose_action_for_task": "为此任务选择一个操作", + "choose_action_for_category": "为此类别选择一个操作", + "edit": "编辑", + "remove": "移除", + "cancel": "取消", + "select_icon": "选择一个图标", + "change_icon": "更改图标", + "select_iconand_enter_title": "选择一个图标并输入标题", + "add_category": "添加类别", + "add_task": "添加任务", + "update_category": "更新类别", + "update_task": "更新任务", + "task_updated_successfully": "任务更新成功!", + "category_updated_successfully": "类别更新成功!", + "error_updating_task": "更新任务时出错:", + "error_updating_category": "更新类别时出错:", + "task_added_successfully": "任务添加成功!", + "category_added_successfully": "类别添加成功!", + "please_fill_in_all_fields_correctly": "请正确填写所有字段。", + "task_deleted_successfully": "任务删除成功!", + "category_deleted_successfully": "类别删除成功!", + "create_new_category": "创建新类别", + "after_which_task_is_due": "任务到期后", + "Minutes": "分钟", + "Hours": "小时", + "Days": "天", + "Weeks": "周", + "Months": "月", + "select_icon_and_enter_title": "选择一个图标并输入标题", + "Tasks": "任务", + "Categories": "类别" } \ No newline at end of file