Skip to content

Commit

Permalink
Added French
Browse files Browse the repository at this point in the history
Closes #35.
  • Loading branch information
Albert221 committed Nov 22, 2020
1 parent 7d463e3 commit ab4633f
Show file tree
Hide file tree
Showing 14 changed files with 341 additions and 1 deletion.
4 changes: 4 additions & 0 deletions android/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Fast Shopping</string>
</resources>
1 change: 1 addition & 0 deletions fastlane/metadata/android/fr-FR/full_description.txt
@@ -0,0 +1 @@
Fast Shopping est une application mobile développée dans un souci de simplicité, permettant de disposer d'un ensemble de listes de courses facile à gérer. Sans pubs, elle s'adresse à tous ceux qui veulent une application sans fioriture qui fasse bien son travail. Elle n'est pas limitée aux utilisateurs avertis.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions fastlane/metadata/android/fr-FR/short_description.txt
@@ -0,0 +1 @@
Une application qui vous aide à créer facilement des listes de courses.
1 change: 1 addition & 0 deletions fastlane/metadata/android/fr-FR/title.txt
@@ -0,0 +1 @@
Fast Shopping
220 changes: 220 additions & 0 deletions lib/l10n/intl_fr.arb
@@ -0,0 +1,220 @@
{
"@@locale": "fr",
"@@last_modified": "2020-11-22T14:54:21+00:00",
"menu_support_author": "Soutenir l'auteur",
"menu_licenses": "Licences",
"list_item_no_name": "Sans nom",
"@list_item_no_name": {
"description": "When the item has no\/empty name."
},
"list_item_editing_cancel": "ANNULER",
"@list_item_editing_cancel": {
"description": ""
},
"list_item_editing_save": "SAUVEGARDER",
"@list_item_editing_save": {
"description": ""
},
"list_item_remove": "SUPPRIMER",
"@list_item_remove": {
"description": ""
},
"list_item_edit": "ÉDITER",
"@list_item_edit": {
"description": ""
},
"item_removed_snackbar_message": "Cet article a été retiré de la liste.",
"@item_removed_snackbar_message": {
"description": ""
},
"item_removed_snackbar_undo": "DÉFAIRE",
"@item_removed_snackbar_undo": {
"description": ""
},
"add_item_dialog_title": "Ajouter un article",
"@add_item_dialog_title": {
"description": ""
},
"list_item_title_hint": "Écrivez le nom de l'article ici…",
"@list_item_title_hint": {
"description": "Placeholder in item name text field."
},
"add_item_dialog_cancel": "ANNULER",
"@add_item_dialog_cancel": {
"description": ""
},
"add_item_dialog_add": "AJOUTER",
"@add_item_dialog_add": {
"description": ""
},
"archive_banner_archive": "ARCHIVES",
"@archive_banner_archive": {
"description": ""
},
"archive_banner_content": "Tout semble être coché. Souhaitez-vous archiver votre liste de courses ?",
"@archive_banner_content": {
"description": ""
},
"shopping_list_not_selected_placeholder": "Aucune liste sélectionnée",
"@shopping_list_not_selected_placeholder": {
"description": ""
},
"shopping_list_not_selected_message": "Aucune liste sélectionnée, créez-en une.",
"@shopping_list_not_selected_message": {
"description": ""
},
"empty_list_add_some_items_message": "Ajoutez des articles à votre liste !",
"@empty_list_add_some_items_message": {
"description": ""
},
"list_archived_snackbar_message": "La liste a été archivée avec succès.",
"@list_archived_snackbar_message": {
"description": ""
},
"list_archived_snackbar_undo": "DÉFAIRE",
"@list_archived_snackbar_undo": {
"description": ""
},
"shopping_lists_title": "Listes de courses",
"@shopping_lists_title": {
"description": ""
},
"shopping_lists_tab_current": "En cours",
"shopping_lists_tab_archived": "Archivées",
"@shopping_lists_tab_archived": {
"description": ""
},
"shopping_lists_add_new": "Nouvelle liste",
"@shopping_lists_add_new": {
"description": ""
},
"shopping_lists_item_elements": "{count, plural, one {1 article} other {{count} articles}}",
"@shopping_lists_item_elements": {
"description": ""
},
"shopping_list_no_name": "Sans nom",
"@shopping_list_no_name": {
"description": ""
},
"shopping_list_archived_snackbar_message": "La liste a été archivée avec succès.",
"@shopping_list_archived_snackbar_message": {
"description": ""
},
"shopping_list_unarchived_snackbar_message": "La liste a été désarchivée avec succès.",
"@shopping_list_unarchived_snackbar_message": {
"description": ""
},
"add_list_dialog_title": "Ajouter une nouvelle liste de courses",
"@add_list_dialog_title": {
"description": ""
},
"add_list_dialog_name_hint": "Inscrivez le nom de la liste de courses ici…",
"@add_list_dialog_name_hint": {
"description": ""
},
"add_list_dialog_cancel": "ANNULER",
"@add_list_dialog_cancel": {
"description": ""
},
"add_list_dialog_add": "AJOUTER",
"@add_list_dialog_add": {
"description": ""
},
"rename_shopping_list_dialog_title": "Renommer la liste de courses",
"@rename_shopping_list_dialog_title": {
"description": ""
},
"rename_shopping_list_dialog_name_hint": "Inscrivez le nom de la nouvelle liste de courses ici…",
"@rename_shopping_list_dialog_name_hint": {
"description": ""
},
"rename_shopping_list_dialog_cancel": "ANNULER",
"@rename_shopping_list_dialog_cancel": {
"description": ""
},
"rename_shopping_list_dialog_rename": "RENOMMER",
"@rename_shopping_list_dialog_rename": {
"description": ""
},
"delete_shopping_list_dialog_title": "Suppression de la liste de courses",
"@delete_shopping_list_dialog_title": {
"description": ""
},
"delete_shopping_list_dialog_body_before": "Êtes-vous sûr de vouloir supprimer",
"@delete_shopping_list_dialog_body_before": {
"description": ""
},
"delete_shopping_list_dialog_body_after": "la liste de courses ? Cette opération est irréversible.",
"@delete_shopping_list_dialog_body_after": {
"description": ""
},
"delete_shopping_list_dialog_cancel": "ANNULER",
"delete_shopping_list_dialog_delete": "SUPPRIMER",
"@delete_shopping_list_dialog_delete": {
"description": ""
},
"no_current_lists_message": "Il n'y a pas de liste en cours, créez-en une !",
"@no_current_lists_message": {
"description": ""
},
"no_archived_lists_message": "Il n'y a pas de liste archivée.",
"@no_archived_lists_message": {
"description": ""
},
"list_from_old_version": "Liste de l'ancienne version",
"@list_from_old_version": {
"description": ""
},
"support_author_dialog_title": "Soutenir l'auteur",
"support_author_dialog_body": "Vous pouvez me soutenir, moi, le développeur de cette application, en allant à la page ci-dessous.",
"support_author_dialog_button": "SOUTENEZ-MOI",
"menu_layout": "Disposition",
"@menu_layout": {
"description": "Shown on the main screen dropdown, next to the view_stream material icon."
},
"layout_dialog_title": "Disposition",
"layout_dialog_one_list_title": "Liste simple",
"layout_dialog_multiple_lists_title": "Listes multiples",
"layout_dialog_content": "Vous pourrez modifier cela ultérieurement.",
"@layout_dialog_content": {
"description": "Small text shown under one\/multiple lists options."
},
"screenshot_item_1": "Sauce tomate",
"@screenshot_item_1": {
"description": "Item visible on app stores screenshots."
},
"screenshot_item_2": "Moutarde",
"screenshot_item_3": "Sauce barbecue",
"screenshot_item_4": "Vinaigre de vin rouge",
"screenshot_item_5": "Sauce tomate épicée",
"@screenshot_item_5": {
"description": "Expanded item on shopping list in app stores screenshots."
},
"screenshot_item_6": "Huile d''olive extra vierge",
"screenshot_item_7": "Câpres et olives en bocal",
"screenshot_item_8": "Sauce au piment fort",
"screenshot_list_1": "Épicerie",
"@screenshot_list_1": {
"description": "Active shopping list in app stores screenshots."
},
"screenshot_list_2": "Soirée chez Mikaël",
"@screenshot_list_2": {
"description": "Inactive shopping list in app stores screenshots."
},
"app_title": "Fast Shopping",
"@app_title": {
"description": "Shown on top of the screen."
},
"list_item_done_ago": "fait {when}",
"@list_item_done_ago": {
"description": "Small caps date when item was marked as done."
},
"shopping_lists_item_created_at": "Créée {when}",
"@shopping_lists_item_created_at": {
"description": ""
},
"shopping_lists_item_archived_at": "Archivée {when}",
"@shopping_lists_item_archived_at": {
"description": ""
}
}
2 changes: 2 additions & 0 deletions lib/l10n/l10n.dart
Expand Up @@ -376,6 +376,7 @@ class ArbifyLocalizationsDelegate extends LocalizationsDelegate<S> {
List<Locale> get supportedLocales => [
Locale.fromSubtags(languageCode: 'de'),
Locale.fromSubtags(languageCode: 'en'),
Locale.fromSubtags(languageCode: 'fr'),
Locale.fromSubtags(languageCode: 'mk'),
Locale.fromSubtags(languageCode: 'pl'),
Locale.fromSubtags(languageCode: 'ru'),
Expand All @@ -385,6 +386,7 @@ class ArbifyLocalizationsDelegate extends LocalizationsDelegate<S> {
bool isSupported(Locale locale) => [
'de',
'en',
'fr',
'mk',
'pl',
'ru',
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/messages_all.dart
Expand Up @@ -17,6 +17,7 @@ import 'package:intl/src/intl_helpers.dart';

import 'messages_de.dart' as messages_de;
import 'messages_en.dart' as messages_en;
import 'messages_fr.dart' as messages_fr;
import 'messages_mk.dart' as messages_mk;
import 'messages_pl.dart' as messages_pl;
import 'messages_ru.dart' as messages_ru;
Expand All @@ -25,6 +26,7 @@ typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'de': () => new Future.value(null),
'en': () => new Future.value(null),
'fr': () => new Future.value(null),
'mk': () => new Future.value(null),
'pl': () => new Future.value(null),
'ru': () => new Future.value(null),
Expand All @@ -36,6 +38,8 @@ MessageLookupByLibrary _findExact(String localeName) {
return messages_de.messages;
case 'en':
return messages_en.messages;
case 'fr':
return messages_fr.messages;
case 'mk':
return messages_mk.messages;
case 'pl':
Expand Down
99 changes: 99 additions & 0 deletions lib/l10n/messages_fr.dart
@@ -0,0 +1,99 @@
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
// This is a library that provides messages for a fr locale. All the
// messages from the main program should be duplicated here with the same
// function name.

// Ignore issues from commonly used lints in this file.
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
// ignore_for_file:unused_import, file_names

import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';

final messages = new MessageLookup();

typedef String MessageIfAbsent(String messageStr, List<dynamic> args);

class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'fr';

static m0(when) => "fait ${when}";

static m1(when) => "Archivée ${when}";

static m2(when) => "Créée ${when}";

static m3(count) => "${Intl.plural(count, one: '1 article', other: '${count} articles')}";

final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
"add_item_dialog_add" : MessageLookupByLibrary.simpleMessage("AJOUTER"),
"add_item_dialog_cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"add_item_dialog_title" : MessageLookupByLibrary.simpleMessage("Ajouter un article"),
"add_list_dialog_add" : MessageLookupByLibrary.simpleMessage("AJOUTER"),
"add_list_dialog_cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"add_list_dialog_name_hint" : MessageLookupByLibrary.simpleMessage("Inscrivez le nom de la liste de courses ici…"),
"add_list_dialog_title" : MessageLookupByLibrary.simpleMessage("Ajouter une nouvelle liste de courses"),
"app_title" : MessageLookupByLibrary.simpleMessage("Fast Shopping"),
"archive_banner_archive" : MessageLookupByLibrary.simpleMessage("ARCHIVES"),
"archive_banner_content" : MessageLookupByLibrary.simpleMessage("Tout semble être coché. Souhaitez-vous archiver votre liste de courses ?"),
"delete_shopping_list_dialog_body_after" : MessageLookupByLibrary.simpleMessage("la liste de courses ? Cette opération est irréversible."),
"delete_shopping_list_dialog_body_before" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir supprimer"),
"delete_shopping_list_dialog_cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"delete_shopping_list_dialog_delete" : MessageLookupByLibrary.simpleMessage("SUPPRIMER"),
"delete_shopping_list_dialog_title" : MessageLookupByLibrary.simpleMessage("Suppression de la liste de courses"),
"empty_list_add_some_items_message" : MessageLookupByLibrary.simpleMessage("Ajoutez des articles à votre liste !"),
"item_removed_snackbar_message" : MessageLookupByLibrary.simpleMessage("Cet article a été retiré de la liste."),
"item_removed_snackbar_undo" : MessageLookupByLibrary.simpleMessage("DÉFAIRE"),
"layout_dialog_content" : MessageLookupByLibrary.simpleMessage("Vous pourrez modifier cela ultérieurement."),
"layout_dialog_multiple_lists_title" : MessageLookupByLibrary.simpleMessage("Listes multiples"),
"layout_dialog_one_list_title" : MessageLookupByLibrary.simpleMessage("Liste simple"),
"layout_dialog_title" : MessageLookupByLibrary.simpleMessage("Disposition"),
"list_archived_snackbar_message" : MessageLookupByLibrary.simpleMessage("La liste a été archivée avec succès."),
"list_archived_snackbar_undo" : MessageLookupByLibrary.simpleMessage("DÉFAIRE"),
"list_from_old_version" : MessageLookupByLibrary.simpleMessage("Liste de l\'ancienne version"),
"list_item_done_ago" : m0,
"list_item_edit" : MessageLookupByLibrary.simpleMessage("ÉDITER"),
"list_item_editing_cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"list_item_editing_save" : MessageLookupByLibrary.simpleMessage("SAUVEGARDER"),
"list_item_no_name" : MessageLookupByLibrary.simpleMessage("Sans nom"),
"list_item_remove" : MessageLookupByLibrary.simpleMessage("SUPPRIMER"),
"list_item_title_hint" : MessageLookupByLibrary.simpleMessage("Écrivez le nom de l\'article ici…"),
"menu_layout" : MessageLookupByLibrary.simpleMessage("Disposition"),
"menu_licenses" : MessageLookupByLibrary.simpleMessage("Licences"),
"menu_support_author" : MessageLookupByLibrary.simpleMessage("Soutenir l\'auteur"),
"no_archived_lists_message" : MessageLookupByLibrary.simpleMessage("Il n\'y a pas de liste archivée."),
"no_current_lists_message" : MessageLookupByLibrary.simpleMessage("Il n\'y a pas de liste en cours, créez-en une !"),
"rename_shopping_list_dialog_cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"rename_shopping_list_dialog_name_hint" : MessageLookupByLibrary.simpleMessage("Inscrivez le nom de la nouvelle liste de courses ici…"),
"rename_shopping_list_dialog_rename" : MessageLookupByLibrary.simpleMessage("RENOMMER"),
"rename_shopping_list_dialog_title" : MessageLookupByLibrary.simpleMessage("Renommer la liste de courses"),
"screenshot_item_1" : MessageLookupByLibrary.simpleMessage("Sauce tomate"),
"screenshot_item_2" : MessageLookupByLibrary.simpleMessage("Moutarde"),
"screenshot_item_3" : MessageLookupByLibrary.simpleMessage("Sauce barbecue"),
"screenshot_item_4" : MessageLookupByLibrary.simpleMessage("Vinaigre de vin rouge"),
"screenshot_item_5" : MessageLookupByLibrary.simpleMessage("Sauce tomate épicée"),
"screenshot_item_6" : MessageLookupByLibrary.simpleMessage("Huile d\'\'olive extra vierge"),
"screenshot_item_7" : MessageLookupByLibrary.simpleMessage("Câpres et olives en bocal"),
"screenshot_item_8" : MessageLookupByLibrary.simpleMessage("Sauce au piment fort"),
"screenshot_list_1" : MessageLookupByLibrary.simpleMessage("Épicerie"),
"screenshot_list_2" : MessageLookupByLibrary.simpleMessage("Soirée chez Mikaël"),
"shopping_list_archived_snackbar_message" : MessageLookupByLibrary.simpleMessage("La liste a été archivée avec succès."),
"shopping_list_no_name" : MessageLookupByLibrary.simpleMessage("Sans nom"),
"shopping_list_not_selected_message" : MessageLookupByLibrary.simpleMessage("Aucune liste sélectionnée, créez-en une."),
"shopping_list_not_selected_placeholder" : MessageLookupByLibrary.simpleMessage("Aucune liste sélectionnée"),
"shopping_list_unarchived_snackbar_message" : MessageLookupByLibrary.simpleMessage("La liste a été désarchivée avec succès."),
"shopping_lists_add_new" : MessageLookupByLibrary.simpleMessage("Nouvelle liste"),
"shopping_lists_item_archived_at" : m1,
"shopping_lists_item_created_at" : m2,
"shopping_lists_item_elements" : m3,
"shopping_lists_tab_archived" : MessageLookupByLibrary.simpleMessage("Archivées"),
"shopping_lists_tab_current" : MessageLookupByLibrary.simpleMessage("En cours"),
"shopping_lists_title" : MessageLookupByLibrary.simpleMessage("Listes de courses"),
"support_author_dialog_body" : MessageLookupByLibrary.simpleMessage("Vous pouvez me soutenir, moi, le développeur de cette application, en allant à la page ci-dessous."),
"support_author_dialog_button" : MessageLookupByLibrary.simpleMessage("SOUTENEZ-MOI"),
"support_author_dialog_title" : MessageLookupByLibrary.simpleMessage("Soutenir l\'auteur")
};
}
1 change: 1 addition & 0 deletions lib/l10n/timeago.dart
Expand Up @@ -8,6 +8,7 @@ extension TimeAgoI18n on DateTime {
timeago.setLocaleMessages('mk', MkMessages());
timeago.setLocaleMessages('pl', timeago.PlMessages());
timeago.setLocaleMessages('ru', timeago.RuMessages());
timeago.setLocaleMessages('fr', timeago.FrMessages());

return timeago.format(
this,
Expand Down
9 changes: 8 additions & 1 deletion test_driver/app_test.dart
Expand Up @@ -14,7 +14,14 @@ void main() {

tearDownAll(() => driver?.close());

final locales = ['de-DE', 'en-US', 'mk-MK', 'pl-PL', 'ru-RU'];
final locales = [
'de-DE',
'en-US',
'mk-MK',
'pl-PL',
'ru-RU',
'fr-FR',
];
for (final locale in locales) {
test(locale, () async {
await driver.requestData('locale-$locale');
Expand Down

0 comments on commit ab4633f

Please sign in to comment.