Skip to content

Commit

Permalink
Add Catalan localization (#115)
Browse files Browse the repository at this point in the history
* Add Catalan localization

* Add Catalan date

---------

Co-authored-by: and4po <anderromeroaldana@gmail.com>
  • Loading branch information
KyleKun and and4po authored Dec 24, 2023
1 parent 9cc011c commit 25ffda4
Show file tree
Hide file tree
Showing 6 changed files with 244 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
- Autofocus and capitalize first letter of custom locale and subtitles text fields
- Remember last recording settings (which camera was used and geotagging checkbox)
- Automatically retry geotagging when it fails for the first time
- Added Catalan localization

## v1.5.2 - 09/2023
- Added quick trim shortcuts in save video page for a more precise editing
Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
- Bagas Wastu - Indonesian
- Варвара Попова - Russian
- Miloš Koliáš - Czech
- Ander Romero - Catalan

## App Logo (Initial Version)
- Victória Marques
Expand Down
214 changes: 214 additions & 0 deletions lib/lang/ca.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
const Map<String, String> ca = {
'darkMode': 'Mode Fosc',
'language': 'Llengua',
'videoQuality': 'Qualitat del vídeo',
'donate': 'Fes un donatiu',
'donateMsg':
'Moltes gràcies per fer servir l’app!\n\nSi us agradaria donar suport al desenvolupament,\nno dubteu en fer una donació ^^',
'donationPageTitle': 'Doneu suport al desenvolupament',
'about': 'Quant a',
'appVersion': 'Versió 1.6.0',
'record': 'Enregistra',
'createMovie': 'Crea pel·lícula',
'settings': 'Configuració',
'movieErrorTitle': 'No s’ha creat la pel·lícula!',
'movieInsufficientVideos':
'Cal que tingueu 2 o més vídeos enregistrats per crear una pel·lícula.',
'movieCreatedTitle': 'S’ha creat la pel·lícula!',
'movieCreatedDesc':
'La pel·lícula s’ha desat a l’emmagatzematge dins la carpeta DCIM/OneSecondDiary/Movies',
'movieError': 'S’ha produït un error en desar la pel·lícula!',
'tryAgainMsg': 'Torneu a provar-ho. Si el problema persisteix, contacteu amb el desenvolupador.',
'create': 'Crea',
'days': 'dies',
'day': 'dia',
'totalRecordedTitle': 'Heu enregistrat:',
'tapBelowToGenerate': 'Premeu el botó a sota per generar\nun únic fitxer de vídeo:',
'editQuestionTitle': 'Voleu editar el vídeo?',
'editQuestion': 'Se suprimirà l’enregistrament previ, voleu continuar?',
'yes': 'Sí',
'no': 'No',
'edit': 'Edita',
'emojiHappy': 'Fantàstic!\nFins demà.',
'emojiSad': 'Esperant el\nvostre enregistrament ...',
'rotateDevice': 'Roteu el dispositiu a la dreta',
'recordingErrorTitle': 'S’ha produït un error en enregistrar el vídeo!',
'save': 'Desa',
'saveVideoErrorTitle': 'S’ha produït un error en desar el vídeo!',
'videoSavedTitle': 'S’ha desat el vídeo!',
'videoSavedDesc': 'A reveure :)',
'editVideoProperties': 'Edita les propietats del vídeo',
'comingSoon': ' Pròximament... ',
'saveVideo': 'Desa el vídeo',
'discardVideoTitle': 'Voleu descartar aquest vídeo?',
'discardVideoDesc': 'Premeu «Sí» per tornar a enregistrar-lo',
'introTitle1': 'Enregistreu 1 segon cada dia',
'introDesc1': 'Trieu un moment especial del dia que us agradaria recordar en el futur.',
'introTitle2': 'Creeu la pel·lícula de la vostra vida',
'introDesc2': 'Genereu una recopilació de tots els vídeos que heu enregistrat.',
'introTitle3': 'Sense anuncis i totalment gratuïta',
'introDesc3':
'Si us agrada l’aplicació, considereu donar suport al desenvolupament amb una donació.',
'skip': 'Omet',
'done': 'Fet',
'futureUpdates': 'Futures actualitzacions',
'licenses': 'Llicències',
'contact': 'Contacte',
'share': 'Comparteix',
'shareMsg':
'Fes una ullada a aquesta app: https://play.google.com/store/apps/details?id=com.kylekun.one_second_diary',
'thanksTo': 'Agraïments especials',
'foundVideos': 'vídeos trobats!',
'foundVideo': 'vídeo trobat!',
'notifications': 'Notificacions',
'enableNotifications': 'Activa les notificacions',
'scheduleTime': 'Programa l’hora',
'usePersistentNotifications': 'Notificacions persistents',
'test': 'Prova',
'notificationTitle': 'Ei!',
'notificationBody': 'No us oblideu d’enregistrar un segon del vostre dia 👀',
'recordingSettings': 'Configuració de l’enregistrament',
'seconds': 'Segons: ',
'timer': 'Temporitzador: ',
'dateFormat': 'Format de la data:',
'dateColor': 'Color de la data:',
'selectColor': 'Seleccioneu un color',
'enableGeotagging': 'Activa el geoetiquetatge (opcional)',
'setCustomLocation': 'Defineix una ubicació personalitzada (opcional)',
'ok': 'D’acord',
'reset': 'Restableix',
'enterLocation': 'Introduïu la ubicació',
'allTime': 'Des de sempre',
'last7Days': 'Últims 7 dies',
'last30Days': 'Últims 30 dies',
'last60Days': 'Últims 60 dies',
'last90Days': 'Últims 90 dies',
'thisMonth': 'Aquest mes',
'thisYear': 'Aquest any',
'lastYear': 'L’any passat',
'custom': 'Personalitzat',
'dateRange': 'Rang de dates',
'clipsFound': 'Clips trobats',
'enterSubtitles': 'Introduïu subtítols (opcional)',
'totalSelected': 'Total seleccionats: ',
'selectVideos': 'Seleccioneu vídeos',
'editSubtitles': 'Edita els subtítols',
'noVideoRecorded': 'Cap vídeo enregistrat',
'subtitles': 'Subtítols',
'addVideo': 'Afegeix vídeo',
'calendar': 'Calendari',
'orientation': 'Orientació',
'portrait': 'Vertical',
'landscape': 'Horitzontal',
'profiles': 'Perfils',
'tapToSwitch': 'Feu clic sobre un perfil per canviar',
'createNewProfile': 'Crea un nou perfil',
'newProfile': 'Nou perfil',
'deleteProfile': 'Suprimir el perfil',
'enterProfileName': 'Introduïu el nom del perfil',
'newProfileTooltip':
'En crear un nou perfil es configurarà un nou directori per als vídeos creats mentre aquest perfil sigui seleccionat.',
'deleteProfileTooltip':
'Tots els vídeos associats amb aquest perfil també se suprimiran permanentment. Esteu segur que voleu continuar?',
'profileNameCannotBeEmpty': 'El nom del perfil no pot estar buit',
'reservedProfileName': 'Aquest és un nom de perfil reservat',
'creatingMovie': 'S’està processant... Espereu.\nPot trigar uns quants minuts',
'doNotCloseTheApp': 'No tanqueu l’aplicació',
'cancelMovieCreation': 'Cancel·la la creació de la pel·lícula',
'cancelMovieDesc': 'Esteu segur que voleu cancel·lar la creació de la pel·lícula?',
'reportError': 'Informa d’un error',
'errorMailSubject': '[One Second Diary - v1.6.0] Informe d’error de l’aplicació',
'errorMailBody':
'Si us plau, descriviu l’error que heu trobat i les necessàries passes per reproduir-lo. Gràcies!',
'oops': 'Ups!',
'videoResolutionWarning':
'Ara per ara aquesta resolució de vídeo no és compatible. Assegureu-vos que l’heu enregistrat en horitzontal (relació d’aspecte 16:9)',
'unsupportedPortraitMode':
'Ara per ara els vídeos en vertical no són compatibles. Seleccioneu un altre vídeo.',
'processingVideo': 'S’està processant el vídeo',
'deleteVideoWarning': 'Esteu segur que voleu suprimir aquest vídeo permanentment?',
'deleteVideo': 'Suprimeix el vídeo',
'addSubtitles': 'Afegeix subtítols',
'dateColorAndFormat': 'Color i format de la data',
'locationServicesDisabled':
'Els serveis d’ubicació estan desactivats al vostre dispositiu. Activeu-los i toneu a intentar-ho.',
'locationPermissionDenied': 'S’ha denegat el permís d’ubicació.',
'locationPermissionPermanentlyDenied':
'El permís d’ubicació està permanentment denegat. Activeu-lo manualment a la configuració del telèfon.ç',
'locationServiceError':
'S’ha produït un error mentre es provava d’obtenir la vostra ubicació. Proveu d’afegir una ubicació personalitzada manualment.',
'whatsNew': 'Novetats',
'whatsNewDescv15':
'Aquesta versió porta moltes característiques i millores!\n\nFeu-hi una ullada a les següents pàgines 😊',
'feat1v15': 'Galeria',
'featDesc1v15': 'Afegiu vídeos de la galeria a la vostra col·lecció fàcilment 🤩',
'feat2v15': 'Subtítols',
'featDesc2v15': 'Afegiu o editeu subtítols per incloure més detalls del vostre dia 📝',
'feat3v15': 'Geoetiquetatge',
'featDesc3v15':
'Afegiu geoetiquetatge manual o automàtic als vídeos per recordar on va succeir cada moment 📍',
'feat4v15': 'Perfils',
'featDesc4v15':
'Creeu múltiples perfils per desar els vostres vídeos per separat i canviar entre ells fàcilment 🤗',
'feat5v15': 'Calendari',
'featDesc5v15': 'Vegeu o editeu qualsevol dels dies que heu enregistrat en un calendari 📅',
'feat6v15': 'Pel·lícules',
'featDesc6v15': 'Genereu pel·lícules personalitzades amb períodes i vídeos específics 🎥',
'feat7v15': 'Notificacions',
'featDesc7v15':
'Configureu notificacions programades per recordar-vos que enregistreu el vostre instant especial 🔔',
'default': 'Per defecte',
'profileNameAlreadyExists': 'Ja existeix un perfil amb aquest nom',
'profileNameCannotContainSpecialChars': 'El nom del perfil no pot contenir\ncaràcters especials',
'subtitlesSaved': 'S’han desat els subtítols!',
'error': 'Error',
'migrationError':
'S’ha produït un error mentre es migraven els vídeos. Tanqueu l’aplicació i copieu manualment els vídeos de «Emmagatzematge intern > OneSecondDiary» a «Emmagatzematge intern > DCIM > OneSecondDiary» i després suprimiu la carpeta vella.',
'success': 'Èxit',
'migrationSuccess':
'Migració exitosa! Tots els vídeos i pel·lícules són desats a «Emmagatzematge intern > DCIM > OneSecondDiary»',
'migrationInProgress':
'S’estan migrant tots els vídeos a la nova carpeta de l’aplicació, espereu...',
'migrationFolderDeletionError':
'S’ha completat la migració, però ha succeït un error mentre se suprimien les carpetes velles. Suprimiu-les manualment.',
'preferences': 'Preferències',
'forceNativeCamera': 'Forca la càmera nativa',
'forceNativeCameraDescription':
'Fes servir l’aplicació de càmera nativa per enregistrar vídeos en lloc de la integrada. Això pot solucionar problemes d’enregistrament a dispositius amb pitjor rendiment. Pot ser que no funcioni en alguns dispositius.',
'movies': 'Pel·lícules',
'myMovies': 'Les meves pel·lícules',
'noMoviesFound': 'No s’han trobat pel·lícules',
'play': 'Reprodueix',
'saveVideoTabOne': 'General',
'saveVideoTabTwo': 'Ubicació',
'saveVideoTabThree': 'Subtítols',
'useExperimentalPicker': 'Fes servir el selector de fitxers experimental',
'useExperimentalPickerDescription':
'Fes servir el selector de fitxers experimental per seleccionar vídeos de la galeria. Això permet que veieu els vídeos abans de seleccionar-los, redueix el temps de càrrega i mostra directament els vídeos de la data seleccionada. Desactiveu-lo si experimenteu qualsevol problema o preferiu el mètode antic.',
'currentProfile': 'Perfil actual:',
'change': 'Canvia',
'sendLogs': 'Voleu enviar els registres?',
'sendLogsDescription':
'Si us trobeu davant d’un problema, premeu «Sí» per incloure els registres que m’ajudaran a trobar el problema. Si voleu suggerir una característica o qualsevol altra cosa, premeu «No».',
'whatsNewDescv152':
'La versió 1.6.0 porta diverses correccions i millores!\n\nFeu-hi una ullada a les següents pàgines 😊',
'feat1v152': 'Processament de vídeo més ràpid',
'featDesc1v152': 'El procés d’edició de vídeos llargs ara és molt més ràpid 🚀',
'feat2v152': 'Millora en la retallada dels vídeos',
'featDesc2v152':
'Trieu l’instant d’una forma més precisa amb els nous ràpids botons de tall i una barra de retall millorada 🎞️',
'feat3v152': 'Nou selector de fitxers experimental',
'featDesc3v152':
'El nou selector de fitxers experimental permet previsualitzar i filtrar els vídeos per data, prou de baixar cap avall quan voleu afegir vídeos antics 📅 (Desactiveu-lo des de la configuració si experimenteu qualsevol problema)',
'feat4v152': 'Bloqueig de l’orientació',
'featDesc4v152':
'Quan enregistreu dins l’aplicació, premeu el botó després de posicionar el telèfon per bloquejar l’orientació i prevenir resultats inesperats 📱',
'feat5v152': 'I més...',
'featDesc5v152': 'També trobareu algunes petites millores visuals i correccions d’errors 🐛',
'useFilterInExperimentalPicker': 'Fes servir el filtre de data per seleccionar vídeos',
'useFilterInExperimentalPickerDescription':
'Si està activat, en seleccionar vídeos amb dates passades filtrarà els vídeos amb aquella data. Si està desactivat, es mostraran tots els vídeos. Només funciona amb el selector de fitxers experimental.',
'useAlternativeCalendarColors': 'Fes servir colors del calendari alternatius',
'useAlternativeCalendarColorsDescription':
'Canvia el verd i el vermell del calendari per blau i groc. Útil per a persones daltòniques.',
};
3 changes: 3 additions & 0 deletions lib/lang/translation_service.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'ca.dart';
import 'cs.dart';
import 'de.dart';
import 'en.dart';
Expand Down Expand Up @@ -34,6 +35,7 @@ class TranslationService extends Translations {
LanguageModel('Français', 'fr'),
LanguageModel('Русский', 'ru'),
LanguageModel('Čeština', 'cs'),
LanguageModel('Català', 'ca'),
];

@override
Expand All @@ -47,5 +49,6 @@ class TranslationService extends Translations {
'fr': fr,
'ru': ru,
'cs': cs,
'ca': ca,
};
}
15 changes: 15 additions & 0 deletions lib/utils/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,21 @@ class Constants {
'Noviembre',
'Diciembre',
];

static const caMonths = [
'gener',
'febrer',
'març',
'abril',
'maig',
'juny',
'juliol',
'agost',
'setembre',
'octubre',
'novembre',
'desembre',
];
}

class AppColors {
Expand Down
12 changes: 10 additions & 2 deletions lib/utils/date_format_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ class DateFormatUtils {
month = Constants.ptMonths[monthNumber - 1];
return '$day de $month de $year';
}
if (lang == 'ca') {
month = Constants.caMonths[monthNumber - 1];
//Add custom article for the months that start with a vowel
if (monthNumber == 4 || monthNumber == 8 || monthNumber == 10) {
return "$day d'$month de $year";
}
return '$day de $month de $year';
}
// Default format for English and other languages
month = Constants.enMonths[monthNumber - 1];
// Used to remove leading 0
Expand All @@ -59,10 +67,10 @@ class DateFormatUtils {
return '$month $day$suffix, $year';
}

/// Applied if language is ['pt' or 'es']
/// Applied if language is ['pt', 'es' or 'ca']
static bool isDayFirstPattern() {
final String languageCode = Get.locale!.languageCode;
if (languageCode == 'pt' || languageCode == 'es') {
if (languageCode == 'pt' || languageCode == 'es' || languageCode == 'ca') {
return true;
}
return false;
Expand Down

0 comments on commit 25ffda4

Please sign in to comment.