Add Portuguese suppport.

This commit is contained in:
stonegate 2020-09-23 22:18:45 +08:00
parent e2ef6ea01b
commit 064d63350d
9 changed files with 336 additions and 122 deletions

View File

@ -54,6 +54,8 @@ Credit to [Localizely](https://localizely.com/) for kind support to open source
### ![Spanish]
### ![Portuguese]
## License
Tsacdop is licensed under the [GPL v3.0](https://github.com/stonega/tsacdop/blob/master/LICENSE) license.
@ -168,10 +170,11 @@ For help getting started with Flutter, view our
[github release - recent]: https://github.com/stonega/tsacdop/releases
[github downloads]: https://img.shields.io/github/downloads/stonega/tsacdop/total?color=%230000d&label=downloads
[localizely]: https://img.shields.io/badge/dynamic/json?color=%2326c6da&label=localizely&query=%24.languages.length&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus
[English]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=English&query=%24.languages%5B0%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Chinese Simplified]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Chinese%20Simplified&query=%24.languages%5B1%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[French]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=French(ppp)&query=%24.languages%5B3%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Spanish]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Spanish(Joel)&query=%24.languages%5B5%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[English]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=English&query=%24.languages%5B3%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Chinese Simplified]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Chinese%20Simplified&query=%24.languages%5B2%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[French]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=French(ppp)&query=%24.languages%5B5%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Spanish]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Spanish(Joel)&query=%24.languages%5B8%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Portuguese]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=portuguese(Bruno)&query=%24.languages%5B10%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[localizely - website]: https://localizely.com/
[google play - icon]: https://img.shields.io/badge/google-playStore-%2323CCC6
[google play]: https://play.google.com/store/apps/details?id=com.stonegate.tsacdop

BIN
assets/pt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -18,6 +18,7 @@ import 'package:intl/src/intl_helpers.dart';
import 'messages_en.dart' as messages_en;
import 'messages_es.dart' as messages_es;
import 'messages_fr.dart' as messages_fr;
import 'messages_pt.dart' as messages_pt;
import 'messages_zh-Hans.dart' as messages_zh_hans;
typedef Future<dynamic> LibraryLoader();
@ -25,6 +26,7 @@ Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new Future.value(null),
'es': () => new Future.value(null),
'fr': () => new Future.value(null),
'pt': () => new Future.value(null),
'zh_Hans': () => new Future.value(null),
};
@ -36,6 +38,8 @@ MessageLookupByLibrary _findExact(String localeName) {
return messages_es.messages;
case 'fr':
return messages_fr.messages;
case 'pt':
return messages_pt.messages;
case 'zh_Hans':
return messages_zh_hans.messages;
default:

View File

@ -39,43 +39,47 @@ class MessageLookup extends MessageLookupByLibrary {
static m9(count) => "${Intl.plural(count, zero: '0 hour', one: '${count} hour', other: '${count} hours')}";
static m10(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} minute ago', other: '${count} minutes ago')}";
static m10(service) => "Integrate with ${service}";
static m11(count) => "${Intl.plural(count, zero: '0 min', one: '${count} min', other: '${count} mins')}";
static m11(userName) => "Logged in as ${userName}";
static m12(title) => "Fetch data ${title}";
static m12(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} minute ago', other: '${count} minutes ago')}";
static m13(title) => "Subscribing failed, network error ${title}";
static m13(count) => "${Intl.plural(count, zero: '0 min', one: '${count} min', other: '${count} mins')}";
static m14(title) => "Subscribe ${title}";
static m14(title) => "Fetch data ${title}";
static m15(title) => "Subscribing failed, podcast already exists ${title}";
static m15(title) => "Subscribing failed, network error ${title}";
static m16(title) => "Subscribed successfully ${title}";
static m16(title) => "Subscribe ${title}";
static m17(title) => "Update ${title}";
static m17(title) => "Subscribing failed, podcast already exists ${title}";
static m18(title) => "Update error ${title}";
static m18(title) => "Subscribed successfully ${title}";
static m19(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m19(title) => "Update ${title}";
static m20(date) => "Published at ${date}";
static m20(title) => "Update error ${title}";
static m21(date) => "Removed at ${date}";
static m21(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m22(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
static m22(date) => "Published at ${date}";
static m23(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} second ago', other: '${count} seconds ago')}";
static m23(date) => "Removed at ${date}";
static m24(time) => "Last time ${time}";
static m24(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
static m25(time) => "${time} Left";
static m25(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} second ago', other: '${count} seconds ago')}";
static m26(time) => "To ${time}";
static m26(time) => "Last time ${time}";
static m27(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}";
static m27(time) => "${time} Left";
static m28(version) => "Version: ${version}";
static m28(time) => "To ${time}";
static m29(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}";
static m30(version) => "Version: ${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
@ -140,6 +144,7 @@ class MessageLookup extends MessageLookupByLibrary {
"fonts" : MessageLookupByLibrary.simpleMessage("Fonts"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("Good Night"),
"gpodderLoginDes" : MessageLookupByLibrary.simpleMessage("Congratulations! You have linked gpodder.net account successfully. Tsacdop will automatically sync subscriptions on your device with your gpodder.net account."),
"groupExisted" : MessageLookupByLibrary.simpleMessage("Group already exists"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete this group? Podcasts will be moved to the Home group."),
@ -157,9 +162,12 @@ class MessageLookup extends MessageLookupByLibrary {
"hoursAgo" : m8,
"hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("Import"),
"intergateWith" : m10,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("You can long press on episode card for quick actions."),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("Subscribe podcast via search or import OPML file."),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("You can create new group for podcasts."),
"invalidName" : MessageLookupByLibrary.simpleMessage("Invalid username"),
"lastUpdate" : MessageLookupByLibrary.simpleMessage("Last update"),
"later" : MessageLookupByLibrary.simpleMessage("Later"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Light mode"),
"like" : MessageLookupByLibrary.simpleMessage("Like"),
@ -168,6 +176,10 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Listen"),
"listened" : MessageLookupByLibrary.simpleMessage("Listened"),
"loadMore" : MessageLookupByLibrary.simpleMessage("Load more"),
"loggedInAs" : m11,
"login" : MessageLookupByLibrary.simpleMessage("Login"),
"loginFailed" : MessageLookupByLibrary.simpleMessage("Login failed"),
"logout" : MessageLookupByLibrary.simpleMessage("Logout"),
"mark" : MessageLookupByLibrary.simpleMessage("Mark"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Confirm marking"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Confirm to mark all episodes as listened?"),
@ -178,8 +190,8 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Mark All As Listened"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visit RSS Feed"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visit Site"),
"minsAgo" : m10,
"minsCount" : m11,
"minsAgo" : m12,
"minsCount" : m13,
"network" : MessageLookupByLibrary.simpleMessage("Network"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Create new group"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Newest first"),
@ -189,15 +201,17 @@ class MessageLookup extends MessageLookupByLibrary {
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("No episodes received yet"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No podcasts in this group"),
"noShownote" : MessageLookupByLibrary.simpleMessage("No show notes available for this episode."),
"notificaitonFatch" : m12,
"notificationNetworkError" : m13,
"notificaitonFatch" : m14,
"notificationNetworkError" : m15,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15,
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"notificationSubscribe" : m16,
"notificationSubscribeExisted" : m17,
"notificationSuccess" : m18,
"notificationUpdate" : m19,
"notificationUpdateError" : m20,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
"passwdRequired" : MessageLookupByLibrary.simpleMessage("Password required"),
"password" : MessageLookupByLibrary.simpleMessage("Password"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Play"),
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
@ -207,7 +221,7 @@ class MessageLookup extends MessageLookupByLibrary {
"playerHeightTall" : MessageLookupByLibrary.simpleMessage("High"),
"playing" : MessageLookupByLibrary.simpleMessage("Playing"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19,
"podcast" : m21,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast subscribed"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Download episode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Add episode to playlist"),
@ -215,7 +229,7 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Mark episode as listened to"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"),
"published" : m20,
"published" : m22,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Published daily"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Published monthly"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Published weekly"),
@ -225,15 +239,15 @@ class MessageLookup extends MessageLookupByLibrary {
"remove" : MessageLookupByLibrary.simpleMessage("Remove"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Removal confirmation"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Are you sure you want to unsubscribe?"),
"removedAt" : m21,
"removedAt" : m23,
"save" : MessageLookupByLibrary.simpleMessage("Save"),
"schedule" : MessageLookupByLibrary.simpleMessage("Schedule"),
"search" : MessageLookupByLibrary.simpleMessage("Search"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Search for podcasts"),
"secCount" : m22,
"secondsAgo" : m23,
"secCount" : m24,
"secondsAgo" : m25,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"),
"settings" : MessageLookupByLibrary.simpleMessage("Settings"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"),
@ -313,13 +327,15 @@ class MessageLookup extends MessageLookupByLibrary {
"skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"),
"status" : MessageLookupByLibrary.simpleMessage("Status"),
"stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Export OPML file of all podcasts"),
"syncNow" : MessageLookupByLibrary.simpleMessage("Sync now"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),
"timeLastPlayed" : m24,
"timeLeft" : m25,
"to" : m26,
"timeLastPlayed" : m26,
"timeLeft" : m27,
"to" : m28,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reenabled, please reopen the app"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribing failed"),
@ -340,8 +356,10 @@ class MessageLookup extends MessageLookupByLibrary {
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
"unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorites"),
"updateDate" : MessageLookupByLibrary.simpleMessage("Update date"),
"updateEpisodesCount" : m27,
"updateEpisodesCount" : m29,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"),
"version" : m28
"username" : MessageLookupByLibrary.simpleMessage("Username"),
"usernameRequired" : MessageLookupByLibrary.simpleMessage("Username required"),
"version" : m30
};
}

View File

@ -39,43 +39,47 @@ class MessageLookup extends MessageLookupByLibrary {
static m9(count) => "${Intl.plural(count, zero: 'Cero horas', one: '${count} hora', other: '${count} horas')}";
static m10(count) => "${Intl.plural(count, zero: 'Justo Ahora', one: 'Hace ${count} minuto ', other: 'Hace ${count} minutos')}";
static m10(service) => "Integrate with ${service}";
static m11(count) => "${Intl.plural(count, zero: '0 minutos', one: '${count} minuto', other: '${count} minutos')}";
static m11(userName) => "Logged in as ${userName}";
static m12(title) => "Obtener datos ${title}";
static m12(count) => "${Intl.plural(count, zero: 'Justo Ahora', one: 'Hace ${count} minuto ', other: 'Hace ${count} minutos')}";
static m13(title) => "Suscripción fallida, error de red ${title}";
static m13(count) => "${Intl.plural(count, zero: '0 minutos', one: '${count} minuto', other: '${count} minutos')}";
static m14(title) => "Suscribir ${title}";
static m14(title) => "Obtener datos ${title}";
static m15(title) => "Suscripción fallida, podcast ya existe ${title}";
static m15(title) => "Suscripción fallida, error de red ${title}";
static m16(title) => "Suscripción exitosa";
static m16(title) => "Suscribir ${title}";
static m17(title) => "Actualizar ${title}";
static m17(title) => "Suscripción fallida, podcast ya existe ${title}";
static m18(title) => "Error de actualización ${title}";
static m18(title) => "Suscripción exitosa";
static m19(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m19(title) => "Actualizar ${title}";
static m20(date) => "Publicado el ${date}";
static m20(title) => "Error de actualización ${title}";
static m21(date) => "Removido el (fecha)";
static m21(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m22(count) => "${Intl.plural(count, zero: '0 segundos', one: '${count} segundo', other: '${count} segundos')}";
static m22(date) => "Publicado el ${date}";
static m23(count) => "${Intl.plural(count, zero: 'Justo ahora', one: 'Hace ${count} segundo ', other: 'Hace ${count} segundos')}";
static m23(date) => "Removido el (fecha)";
static m24(time) => "Tiempo previo ${time}";
static m24(count) => "${Intl.plural(count, zero: '0 segundos', one: '${count} segundo', other: '${count} segundos')}";
static m25(time) => "${time} Restante";
static m25(count) => "${Intl.plural(count, zero: 'Justo ahora', one: 'Hace ${count} segundo ', other: 'Hace ${count} segundos')}";
static m26(time) => "A ${time}";
static m26(time) => "Tiempo previo ${time}";
static m27(count) => "${Intl.plural(count, zero: 'No hay actualizaciones', one: 'Se actualizo ${count} episodio', other: 'Se actualizaron ${count} episodios')}";
static m27(time) => "${time} Restante";
static m28(version) => "Versión: ${version}";
static m28(time) => "A ${time}";
static m29(count) => "${Intl.plural(count, zero: 'No hay actualizaciones', one: 'Se actualizo ${count} episodio', other: 'Se actualizaron ${count} episodios')}";
static m30(version) => "Versión: ${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
@ -140,6 +144,7 @@ class MessageLookup extends MessageLookupByLibrary {
"fonts" : MessageLookupByLibrary.simpleMessage("Tipografías"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("Buenas noches"),
"gpodderLoginDes" : MessageLookupByLibrary.simpleMessage("Congratulations! You have linked gpodder.net account successfully. Tsacdop will automatically sync subscriptions on your device with your gpodder.net account."),
"groupExisted" : MessageLookupByLibrary.simpleMessage("El grupo ya existe"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Filtro de grupo"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("¿Estas seguro de que quieres remover este grupo? Los podcasts serán movidos al grupo Home"),
@ -157,9 +162,12 @@ class MessageLookup extends MessageLookupByLibrary {
"hoursAgo" : m8,
"hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("Importar"),
"intergateWith" : m10,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("Puedes mantener presionado un episodio para realizar acciones rápidas"),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("Suscribete a podcasts buscándolos, o importando un archivo OPML"),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("Puedes crear un nuevo grupo de podcasts"),
"invalidName" : MessageLookupByLibrary.simpleMessage("Invalid username"),
"lastUpdate" : MessageLookupByLibrary.simpleMessage("Last update"),
"later" : MessageLookupByLibrary.simpleMessage("Despues"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Modo claro"),
"like" : MessageLookupByLibrary.simpleMessage("Me gusta"),
@ -168,6 +176,10 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Escuchar"),
"listened" : MessageLookupByLibrary.simpleMessage("Escuchado"),
"loadMore" : MessageLookupByLibrary.simpleMessage("Cargar mas"),
"loggedInAs" : m11,
"login" : MessageLookupByLibrary.simpleMessage("Loign"),
"loginFailed" : MessageLookupByLibrary.simpleMessage("Login failed"),
"logout" : MessageLookupByLibrary.simpleMessage("Logout"),
"mark" : MessageLookupByLibrary.simpleMessage("Completado"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Confirmar marcado"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("¿Marcar todos los episodios como escuchados?"),
@ -178,8 +190,8 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Marcar todo como escuchado"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visitar feed RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visitar sitio web"),
"minsAgo" : m10,
"minsCount" : m11,
"minsAgo" : m12,
"minsCount" : m13,
"network" : MessageLookupByLibrary.simpleMessage("Red"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Crear grupo nuevo"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Mas recientes primero"),
@ -189,15 +201,17 @@ class MessageLookup extends MessageLookupByLibrary {
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("Aun no hay episodios recibidos"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No hay podcasts en este grupo"),
"noShownote" : MessageLookupByLibrary.simpleMessage("Aun no hay notas disponibles para este episodio"),
"notificaitonFatch" : m12,
"notificationNetworkError" : m13,
"notificaitonFatch" : m14,
"notificationNetworkError" : m15,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15,
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"notificationSubscribe" : m16,
"notificationSubscribeExisted" : m17,
"notificationSuccess" : m18,
"notificationUpdate" : m19,
"notificationUpdateError" : m20,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Mas antiguos primero"),
"passwdRequired" : MessageLookupByLibrary.simpleMessage("Password required"),
"password" : MessageLookupByLibrary.simpleMessage("Password"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Reproducir"),
"playback" : MessageLookupByLibrary.simpleMessage("Control de reproducción"),
@ -207,7 +221,7 @@ class MessageLookup extends MessageLookupByLibrary {
"playerHeightTall" : MessageLookupByLibrary.simpleMessage("Alto"),
"playing" : MessageLookupByLibrary.simpleMessage("Reproduciendo"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19,
"podcast" : m21,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast añadido"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Descargar episodio"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Añadir episodio a lista de reproducción"),
@ -215,7 +229,7 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marcar episodio como escuchado"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Reproducir episodio\n"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Política de privacidad"),
"published" : m20,
"published" : m22,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Publicado diariamente"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Publicado mensualmente"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Publicado semanalmente"),
@ -225,15 +239,15 @@ class MessageLookup extends MessageLookupByLibrary {
"remove" : MessageLookupByLibrary.simpleMessage("Remover"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirma la remoción "),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("¿Estas seguro de que deseas desuscribirte?"),
"removedAt" : m21,
"removedAt" : m23,
"save" : MessageLookupByLibrary.simpleMessage("Guardar"),
"schedule" : MessageLookupByLibrary.simpleMessage("Horario"),
"search" : MessageLookupByLibrary.simpleMessage("Buscar"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Buscar episodio"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Enlace RSS invalido "),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Buscar podcast"),
"secCount" : m22,
"secondsAgo" : m23,
"secCount" : m24,
"secondsAgo" : m25,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Almacenamiento"),
"settings" : MessageLookupByLibrary.simpleMessage("Ajustes"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Color de acento "),
@ -313,13 +327,15 @@ class MessageLookup extends MessageLookupByLibrary {
"skipSilence" : MessageLookupByLibrary.simpleMessage("Saltar silencios"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Temporizador de sueño"),
"status" : MessageLookupByLibrary.simpleMessage("Status"),
"stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Suscribir"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exportar OPML de todos los podcasts"),
"syncNow" : MessageLookupByLibrary.simpleMessage("Sync now"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Acorde al sistema"),
"timeLastPlayed" : m24,
"timeLeft" : m25,
"to" : m26,
"timeLastPlayed" : m26,
"timeLeft" : m27,
"to" : m28,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Añadido a la lista de reproducción "),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("El tutorial se ha reiniciado, reinicia la app porfavor"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("Error de archivo, suscripción fallida"),
@ -340,8 +356,10 @@ class MessageLookup extends MessageLookupByLibrary {
"unlike" : MessageLookupByLibrary.simpleMessage("No me gusta"),
"unliked" : MessageLookupByLibrary.simpleMessage("Episodio removido de favoritos"),
"updateDate" : MessageLookupByLibrary.simpleMessage("Fecha de actualización "),
"updateEpisodesCount" : m27,
"updateEpisodesCount" : m29,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Actualización fallida, error de red"),
"version" : m28
"username" : MessageLookupByLibrary.simpleMessage("Username"),
"usernameRequired" : MessageLookupByLibrary.simpleMessage("Username required"),
"version" : m30
};
}

View File

@ -39,43 +39,47 @@ class MessageLookup extends MessageLookupByLibrary {
static m9(count) => "${Intl.plural(count, zero: '0 heure', one: '${count} heure', other: '${count} heures')}";
static m10(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} minute', other: 'Il y a ${count} minutes')}";
static m10(service) => "Integrate with ${service}";
static m11(count) => "${Intl.plural(count, zero: '0 min', one: '${count} min', other: '${count} mins')}";
static m11(userName) => "Logged in as ${userName}";
static m12(title) => "Accès aux données ${title} ";
static m12(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} minute', other: 'Il y a ${count} minutes')}";
static m13(title) => "Échec de labonnement, erreur réseau ${title} ";
static m13(count) => "${Intl.plural(count, zero: '0 min', one: '${count} min', other: '${count} mins')}";
static m14(title) => "Abonnement en cours";
static m14(title) => "Accès aux données ${title} ";
static m15(title) => "Échec de labonnement, le podcast existe déjà ${title}";
static m15(title) => "Échec de labonnement, erreur réseau ${title} ";
static m16(title) => "Abonnement réussi.";
static m16(title) => "Abonnement en cours";
static m17(title) => "Mise à jour ${title}";
static m17(title) => "Échec de labonnement, le podcast existe déjà ${title}";
static m18(title) => "Échec de la mise à jour ${title}";
static m18(title) => "Abonnement réussi.";
static m19(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m19(title) => "Mise à jour ${title}";
static m20(date) => "Publié le ${date}";
static m20(title) => "Échec de la mise à jour ${title}";
static m21(date) => "Supprimé le ${date}";
static m21(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m22(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
static m22(date) => "Publié le ${date}";
static m23(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} seconde', other: 'Il y a ${count} secondes')}";
static m23(date) => "Supprimé le ${date}";
static m24(time) => "Dernière écoute à ${time}";
static m24(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
static m25(time) => "${time} Restant";
static m25(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} seconde', other: 'Il y a ${count} secondes')}";
static m26(time) => "à ${time}";
static m26(time) => "Dernière écoute à ${time}";
static m27(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
static m27(time) => "${time} Restant";
static m28(version) => "Version : ${version}";
static m28(time) => "à ${time}";
static m29(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
static m30(version) => "Version : ${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
@ -140,6 +144,7 @@ class MessageLookup extends MessageLookupByLibrary {
"fonts" : MessageLookupByLibrary.simpleMessage("Polices"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("Bonne nuit"),
"gpodderLoginDes" : MessageLookupByLibrary.simpleMessage("Congratulations! You have linked gpodder.net account successfully. Tsacdop will automatically sync subscriptions on your device with your gpodder.net account."),
"groupExisted" : MessageLookupByLibrary.simpleMessage("Ce groupe existe déjà"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Filtrer par groupe"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir supprimer ce groupe ? Les podcasts seront déplacés vers le groupe Home."),
@ -157,9 +162,12 @@ class MessageLookup extends MessageLookupByLibrary {
"hoursAgo" : m8,
"hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("Importer"),
"intergateWith" : m10,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("Un appui long sur un épisode lance les actions rapides."),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("S\'abonner aux podcasts via la section recherche ou un fichier OPML."),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez créer des groupes de podcasts."),
"invalidName" : MessageLookupByLibrary.simpleMessage("Invalid username"),
"lastUpdate" : MessageLookupByLibrary.simpleMessage("Last update"),
"later" : MessageLookupByLibrary.simpleMessage("Plus tard"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Mode clair"),
"like" : MessageLookupByLibrary.simpleMessage("Like"),
@ -168,6 +176,10 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Écoutés"),
"listened" : MessageLookupByLibrary.simpleMessage("Écouté "),
"loadMore" : MessageLookupByLibrary.simpleMessage("Voir plus"),
"loggedInAs" : m11,
"login" : MessageLookupByLibrary.simpleMessage("Login"),
"loginFailed" : MessageLookupByLibrary.simpleMessage("Login failed"),
"logout" : MessageLookupByLibrary.simpleMessage("Logout"),
"mark" : MessageLookupByLibrary.simpleMessage(""),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
@ -178,8 +190,8 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Marquer comme tous lu"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Accéder au flux RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Accéder au site"),
"minsAgo" : m10,
"minsCount" : m11,
"minsAgo" : m12,
"minsCount" : m13,
"network" : MessageLookupByLibrary.simpleMessage("Réseau"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Créer un nouveau groupe"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Le plus récent en premier"),
@ -189,15 +201,17 @@ class MessageLookup extends MessageLookupByLibrary {
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("Aucun épisode récent."),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("Ce groupe ne contient aucun podcast"),
"noShownote" : MessageLookupByLibrary.simpleMessage("Notes de l\'épisode manquantes."),
"notificaitonFatch" : m12,
"notificationNetworkError" : m13,
"notificaitonFatch" : m14,
"notificationNetworkError" : m15,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15,
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"notificationSubscribe" : m16,
"notificationSubscribeExisted" : m17,
"notificationSuccess" : m18,
"notificationUpdate" : m19,
"notificationUpdateError" : m20,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier"),
"passwdRequired" : MessageLookupByLibrary.simpleMessage("Password required"),
"password" : MessageLookupByLibrary.simpleMessage("Password"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
"playback" : MessageLookupByLibrary.simpleMessage("Commandes du lecteur"),
@ -207,7 +221,7 @@ class MessageLookup extends MessageLookupByLibrary {
"playerHeightTall" : MessageLookupByLibrary.simpleMessage("Grand"),
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19,
"podcast" : m21,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Abonné au podcast"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Télécharger l\'épisode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Ajouter à la playlist"),
@ -215,7 +229,7 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer l\'épisode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Gestion des données"),
"published" : m20,
"published" : m22,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Quotidien"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Mensuel"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Hebdomadaire"),
@ -225,15 +239,15 @@ class MessageLookup extends MessageLookupByLibrary {
"remove" : MessageLookupByLibrary.simpleMessage("Supprimer"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirmer la suppression"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir vous désabonner ?"),
"removedAt" : m21,
"removedAt" : m23,
"save" : MessageLookupByLibrary.simpleMessage("Sauvegarder"),
"schedule" : MessageLookupByLibrary.simpleMessage("Programmation"),
"search" : MessageLookupByLibrary.simpleMessage("Rechercher"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Rechercher un épisode"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
"secCount" : m22,
"secondsAgo" : m23,
"secCount" : m24,
"secondsAgo" : m25,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
@ -313,13 +327,15 @@ class MessageLookup extends MessageLookupByLibrary {
"skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
"status" : MessageLookupByLibrary.simpleMessage("Status"),
"stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("S\'abonner"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts."),
"syncNow" : MessageLookupByLibrary.simpleMessage("Sync now"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Système par défaut"),
"timeLastPlayed" : m24,
"timeLeft" : m25,
"to" : m26,
"timeLastPlayed" : m26,
"timeLeft" : m27,
"to" : m28,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode à la playlist."),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."),
"toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."),
@ -340,8 +356,10 @@ class MessageLookup extends MessageLookupByLibrary {
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
"unliked" : MessageLookupByLibrary.simpleMessage("L\'épisode a été supprimé des favoris."),
"updateDate" : MessageLookupByLibrary.simpleMessage("Date de mise à jour"),
"updateEpisodesCount" : m27,
"updateEpisodesCount" : m29,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Échec de la mise à jour, erreur réseau"),
"version" : m28
"username" : MessageLookupByLibrary.simpleMessage("Username"),
"usernameRequired" : MessageLookupByLibrary.simpleMessage("Username required"),
"version" : m30
};
}

View File

@ -658,6 +658,16 @@ class S {
);
}
/// `Congratulations! You have linked gpodder.net account successfully. Tsacdop will automatically sync subscriptions on your device with your gpodder.net account.`
String get gpodderLoginDes {
return Intl.message(
'Congratulations! You have linked gpodder.net account successfully. Tsacdop will automatically sync subscriptions on your device with your gpodder.net account.',
name: 'gpodderLoginDes',
desc: '',
args: [],
);
}
/// `Group already exists`
String get groupExisted {
return Intl.message(
@ -837,6 +847,16 @@ class S {
);
}
/// `Integrate with {service}`
String intergateWith(Object service) {
return Intl.message(
'Integrate with $service',
name: 'intergateWith',
desc: 'Integrate with',
args: [service],
);
}
/// `You can long press on episode card for quick actions.`
String get introFourthPage {
return Intl.message(
@ -867,6 +887,26 @@ class S {
);
}
/// `Invalid username`
String get invalidName {
return Intl.message(
'Invalid username',
name: 'invalidName',
desc: '',
args: [],
);
}
/// `Last update`
String get lastUpdate {
return Intl.message(
'Last update',
name: 'lastUpdate',
desc: 'gpodder.net update',
args: [],
);
}
/// `Later`
String get later {
return Intl.message(
@ -947,6 +987,46 @@ class S {
);
}
/// `Logged in as {userName}`
String loggedInAs(Object userName) {
return Intl.message(
'Logged in as $userName',
name: 'loggedInAs',
desc: 'gpodder.net',
args: [userName],
);
}
/// `Login`
String get login {
return Intl.message(
'Login',
name: 'login',
desc: 'gpodder.net login',
args: [],
);
}
/// `Login failed`
String get loginFailed {
return Intl.message(
'Login failed',
name: 'loginFailed',
desc: '',
args: [],
);
}
/// `Logout`
String get logout {
return Intl.message(
'Logout',
name: 'logout',
desc: 'gpodder.net logout',
args: [],
);
}
/// `Mark`
String get mark {
return Intl.message(
@ -1253,6 +1333,26 @@ class S {
);
}
/// `Password required`
String get passwdRequired {
return Intl.message(
'Password required',
name: 'passwdRequired',
desc: '',
args: [],
);
}
/// `Password`
String get password {
return Intl.message(
'Password',
name: 'password',
desc: '',
args: [],
);
}
/// `Pause`
String get pause {
return Intl.message(
@ -2412,6 +2512,16 @@ class S {
);
}
/// `Status`
String get status {
return Intl.message(
'Status',
name: 'status',
desc: 'gpodder.net status',
args: [],
);
}
/// `Stop`
String get stop {
return Intl.message(
@ -2442,6 +2552,16 @@ class S {
);
}
/// `Sync now`
String get syncNow {
return Intl.message(
'Sync now',
name: 'syncNow',
desc: '',
args: [],
);
}
/// `System default`
String get systemDefault {
return Intl.message(
@ -2705,6 +2825,26 @@ class S {
);
}
/// `Username`
String get username {
return Intl.message(
'Username',
name: 'username',
desc: '',
args: [],
);
}
/// `Username required`
String get usernameRequired {
return Intl.message(
'Username required',
name: 'usernameRequired',
desc: '',
args: [],
);
}
/// `Version: {version}`
String version(Object version) {
return Intl.message(
@ -2724,6 +2864,7 @@ class AppLocalizationDelegate extends LocalizationsDelegate<S> {
Locale.fromSubtags(languageCode: 'en'),
Locale.fromSubtags(languageCode: 'es'),
Locale.fromSubtags(languageCode: 'fr'),
Locale.fromSubtags(languageCode: 'pt'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
];
}

View File

@ -101,9 +101,9 @@ class AboutApp extends StatelessWidget {
),
child: Scaffold(
backgroundColor: Theme.of(context).primaryColor,
appBar: AppBar(title: Center()
// Text(s.homeToprightMenuAbout),
),
appBar: AppBar(
title: Text(s.homeToprightMenuAbout),
),
body: SafeArea(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
@ -268,7 +268,9 @@ class AboutApp extends StatelessWidget {
_translatorInfo(context, name: 'Atrate'),
_translatorInfo(context, name: 'ppp', flag: 'fr'),
_translatorInfo(context,
name: 'Joel Israel', flag: 'mx')
name: 'Joel Israel', flag: 'mx'),
_translatorInfo(context,
name: 'Bruno Pinheiro', flag: 'pt'),
],
),
),

View File

@ -106,6 +106,16 @@ class _LanguagesSettingState extends State<LanguagesSetting> {
onChanged: _setLocale),
),
Divider(height: 1),
ListTile(
title: Text('português'),
onTap: () => _setLocale(Locale('pt')),
contentPadding: const EdgeInsets.only(left: 20, right: 20),
trailing: Radio<Locale>(
value: Locale('pt'),
groupValue: Locale(Intl.getCurrentLocale()),
onChanged: _setLocale),
),
Divider(height: 1),
ListTile(
onTap: () =>
'mailto:<tsacdop.app@gmail.com>?subject=Tsacdop localization project'