feat: add i18n

This commit is contained in:
Alberto Ponces 2022-08-07 00:37:12 +01:00
parent ab9b91b975
commit 89b642772c
15 changed files with 259 additions and 123 deletions

40
assets/i18n/en.json Normal file
View file

@ -0,0 +1,40 @@
{
"main": {
"dashboardTab": "Dashboard",
"patcherTab": "Patcher"
},
"homeView": {
"widgetTitle": "Dashboard",
"updatesSubtitle": "ReVanced Updates",
"patchedSubtitle": "Patched Applications"
},
"availableUpdatesCard": {
"widgetTitle": "Updates Available",
"patchButton": "Patch All",
"changelogLabel": "Changelog"
},
"applicationItem": {
"patchButton": "Patch"
},
"installedAppsCard": {
"widgetTitle": "Total Installed",
"changelogLabel": "Changelog"
},
"latestCommitCard": {
"loadingLabel": "Loading",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Update Manager"
},
"patcherView": {
"widgetTitle": "Patcher"
},
"appSelectorCard": {
"widgetTitle": "Select application",
"widgetSubtitle": "No application selected."
},
"patchSelectorCard": {
"widgetTitle": "Select patches",
"widgetSubtitle": "Select an application first."
}
}

View file

@ -11,6 +11,6 @@ const pink40 = Color(0xFF7D5260);
final interTextStyle = GoogleFonts.inter();
final robotoTextStyle = GoogleFonts.roboto();
const ghOrg = "revanced";
const patchesRepo = "revanced-patches";
const integrationsRepo = "revanced-integrations";
const ghOrg = 'revanced';
const patchesRepo = 'revanced-patches';
const integrationsRepo = 'revanced-integrations';

View file

@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/app/app.router.dart';
import 'package:revanced_manager/main_viewmodel.dart';
@ -27,6 +29,16 @@ class MyApp extends StatelessWidget {
navigatorKey: StackedService.navigatorKey,
onGenerateRoute: StackedRouter().onGenerateRoute,
home: const Navigation(),
localizationsDelegates: [
FlutterI18nDelegate(
translationLoader: FileTranslationLoader(
fallbackFile: 'en',
basePath: 'assets/i18n',
),
),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
);
}
}
@ -43,14 +55,20 @@ class Navigation extends StatelessWidget {
bottomNavigationBar: NavigationBar(
onDestinationSelected: model.setIndex,
selectedIndex: model.currentIndex,
destinations: const <Widget>[
destinations: <Widget>[
NavigationDestination(
icon: Icon(Icons.dashboard),
label: "Dashboard",
icon: const Icon(Icons.dashboard),
label: FlutterI18n.translate(
context,
'main.dashboardTab',
),
),
NavigationDestination(
icon: Icon(Icons.build),
label: "Patcher",
icon: const Icon(Icons.build),
label: FlutterI18n.translate(
context,
'main.patcherTab',
),
),
],
),

View file

@ -6,8 +6,9 @@ class GithubAPI {
var github = GitHub();
Future<String?> latestRelease(String org, repoName) async {
var latestRelease = await github.repositories
.getLatestRelease(RepositorySlug(org, repoName));
var latestRelease = await github.repositories.getLatestRelease(
RepositorySlug(org, repoName),
);
var dlurl = latestRelease.assets
?.firstWhere((asset) =>
asset.name != null &&
@ -18,32 +19,10 @@ class GithubAPI {
return dlurl;
}
Future latestCommitTime(String org, repoName) async {
var repo =
await github.repositories.getRepository(RepositorySlug(org, repoName));
var commitTime = repo.pushedAt?.difference(
DateTime.now().toLocal(),
Future<DateTime?> latestCommitTime(String org, repoName) async {
var repo = await github.repositories.getRepository(
RepositorySlug(org, repoName),
);
final hours = commitTime!.inHours.abs();
if (hours > 24) {
var days = (commitTime.inDays).abs().toString();
return "$days days";
} else if (hours > 1 && hours < 24) {
var hours = (commitTime.inHours).abs().toString();
return "$hours hours";
} else {
var minutes = (commitTime.inMinutes).abs().toString();
return "$minutes mins";
}
}
Future contributors(String org, repoName) async {
var contributors =
github.repositories.listContributors(RepositorySlug(org, repoName));
contributors.forEach((contributor) {});
return contributors;
return repo.pushedAt;
}
}

View file

@ -14,7 +14,7 @@ class ManagerAPI {
Future<String?> getPath() async {
final path = await p.getApplicationSupportDirectory();
final workDir = Directory('${path.path}/revanced').createSync();
final workDirPath = "${path.path}/revanced";
final workDirPath = '${path.path}/revanced';
return workDirPath;
}

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/ui/widgets/available_updates_card.dart';
import 'package:revanced_manager/ui/widgets/installed_apps_card.dart';
@ -33,26 +34,35 @@ class HomeView extends StatelessWidget {
),
),
const SizedBox(height: 60),
Text(
"Dashboard",
style: GoogleFonts.inter(
fontSize: 28,
I18nText(
'homeView.widgetTitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 28,
),
),
),
const SizedBox(height: 23),
Text(
"ReVanced Updates",
style: GoogleFonts.inter(
fontSize: 18,
I18nText(
'homeView.updatesSubtitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 18,
),
),
),
const SizedBox(height: 10),
const LatestCommitCard(),
const SizedBox(height: 14),
Text(
"Patched Applications",
style: GoogleFonts.inter(
fontSize: 18,
I18nText(
'homeView.patchedSubtitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 18,
),
),
),
const SizedBox(height: 14),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/ui/views/app_selector/app_selector_view.dart';
import 'package:revanced_manager/ui/widgets/app_selector_card.dart';
@ -29,11 +30,14 @@ class PatcherView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 12),
Text(
"Patcher",
style: GoogleFonts.inter(
fontSize: 28,
fontWeight: FontWeight.w500,
I18nText(
'patcherView.widgetTitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 28,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 23),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/constants.dart';
@ -23,17 +24,23 @@ class AppSelectorCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Select application",
style: GoogleFonts.roboto(
fontSize: 18,
fontWeight: FontWeight.w500,
I18nText(
'appSelectorCard.widgetTitle',
child: Text(
'',
style: GoogleFonts.roboto(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
Text(
"No application selected",
style: robotoTextStyle,
I18nText(
'appSelectorCard.widgetSubtitle',
child: Text(
'',
style: robotoTextStyle,
),
),
],
),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/constants.dart';
@ -20,7 +21,7 @@ class ApplicationItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final isSVG = asset.endsWith(".svg");
final isSVG = asset.endsWith('.svg');
return ListTile(
horizontalTitleGap: 12.0,
leading: isSVG
@ -45,7 +46,10 @@ class ApplicationItem extends StatelessWidget {
style: robotoTextStyle,
),
trailing: PatchTextButton(
text: "Patch",
text: FlutterI18n.translate(
context,
'applicationItem.patchButton',
),
onPressed: onPressed,
),
);

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/ui/widgets/application_item.dart';
import 'package:revanced_manager/ui/widgets/patch_text_button.dart';
@ -21,51 +22,60 @@ class AvailableUpdatesCard extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"Updates Available(2)",
style: GoogleFonts.inter(
fontSize: 16,
color: const Color(0xff7792BA),
fontWeight: FontWeight.w500,
I18nText(
'availableUpdatesCard.widgetTitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 16,
color: const Color(0xff7792BA),
fontWeight: FontWeight.w500,
),
),
),
PatchTextButton(
text: "Patch all",
text: FlutterI18n.translate(
context,
'availableUpdatesCard.patchButton',
),
onPressed: () {},
backgroundColor: const Color(0xff7792BA),
),
],
),
ApplicationItem(
asset: "assets/images/revanced.svg",
name: "ReVanced",
releaseDate: "2 days ago",
asset: 'assets/images/revanced.svg',
name: 'ReVanced',
releaseDate: '2 days ago',
onPressed: () {},
),
ApplicationItem(
asset: "assets/images/reddit.png",
name: "ReReddit",
releaseDate: "Released 1 month ago",
asset: 'assets/images/reddit.png',
name: 'ReReddit',
releaseDate: 'Released 1 month ago',
onPressed: () {},
),
const SizedBox(height: 4),
Text(
"Changelog",
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
fontWeight: FontWeight.w700,
I18nText(
'availableUpdatesCard.changelogLabel',
child: Text(
'',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
fontWeight: FontWeight.w700,
),
),
),
const SizedBox(height: 4),
Text(
"fix: we made the player even worse (you love)",
'fix: we made the player even worse (you love)',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
),
),
const SizedBox(height: 4),
Text(
"chore: guhhughghu",
'chore: guhhughghu',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/ui/widgets/application_item.dart';
@ -17,37 +18,43 @@ class InstalledAppsCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"Total Installed(3)",
style: GoogleFonts.inter(
fontSize: 16,
color: const Color(0xff7792BA),
fontWeight: FontWeight.w500,
I18nText(
'installedAppsCard.widgetTitle',
child: Text(
'',
style: GoogleFonts.inter(
fontSize: 16,
color: const Color(0xff7792BA),
fontWeight: FontWeight.w500,
),
),
),
ApplicationItem(
asset: "assets/images/revanced.svg",
name: "ReVanced",
releaseDate: "2 days ago",
asset: 'assets/images/revanced.svg',
name: 'ReVanced',
releaseDate: '2 days ago',
onPressed: () {},
),
Text(
"Changelog",
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
fontWeight: FontWeight.w700,
I18nText(
'installedAppsCard.changelogLabel',
child: Text(
'',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
fontWeight: FontWeight.w700,
),
),
),
const SizedBox(height: 4),
Text(
"fix: we made the player even worse (you love)",
'fix: we made the player even worse (you love)',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
),
),
const SizedBox(height: 4),
Text(
"chore: guhhughghu",
'chore: guhhughghu',
style: GoogleFonts.roboto(
color: const Color(0xff8691A0),
),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/constants.dart';
@ -13,14 +14,14 @@ class LatestCommitCard extends StatefulWidget {
class _LatestCommitCardState extends State<LatestCommitCard> {
GithubAPI githubAPI = GithubAPI();
String lastPatcherCommit = "Loading...";
String lastManagerCommit = "Loading...";
String lastPatcherCommit = 'Loading...';
String lastManagerCommit = 'Loading...';
void latestCommit() async {
// lastPatcherCommit =
// await githubAPI.latestCommitTime("revanced", "revanced-patcher");
// await githubAPI.latestCommitTime('revanced', 'revanced-patcher');
// lastManagerCommit =
// await githubAPI.latestCommitTime("revanced", "revanced-manager");
// await githubAPI.latestCommitTime('revanced', 'revanced-manager');
}
@override
@ -47,28 +48,34 @@ class _LatestCommitCardState extends State<LatestCommitCard> {
children: [
Row(
children: [
Text(
"Patcher: ",
style: GoogleFonts.roboto(
fontWeight: FontWeight.w700,
I18nText(
'latestCommitCard.patcherLabel',
child: Text(
'',
style: GoogleFonts.roboto(
fontWeight: FontWeight.w700,
),
),
),
Text(
"$lastPatcherCommit ago",
'$lastPatcherCommit ago',
style: robotoTextStyle,
)
],
),
Row(
children: [
Text(
"Manager: ",
style: GoogleFonts.roboto(
fontWeight: FontWeight.w700,
I18nText(
'latestCommitCard.managerLabel',
child: Text(
'',
style: GoogleFonts.roboto(
fontWeight: FontWeight.w700,
),
),
),
Text(
"$lastManagerCommit ago",
'$lastManagerCommit ago',
style: robotoTextStyle,
)
],
@ -76,7 +83,10 @@ class _LatestCommitCardState extends State<LatestCommitCard> {
],
),
PatchTextButton(
text: "Update Manager",
text: FlutterI18n.translate(
context,
'latestCommitCard.updateButton',
),
onPressed: () {},
backgroundColor: const Color(0xff7792BA),
),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/constants.dart';
@ -23,17 +24,23 @@ class PatchSelectorCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Select patches",
style: GoogleFonts.roboto(
fontSize: 18,
fontWeight: FontWeight.w500,
I18nText(
'patchSelectorCard.widgetTitle',
child: Text(
'',
style: GoogleFonts.roboto(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
Text(
"Select an application first.",
style: robotoTextStyle,
I18nText(
'patchSelectorCard.widgetSubtitle',
child: Text(
'',
style: robotoTextStyle,
),
),
],
),

View file

@ -216,6 +216,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.0"
flutter_i18n:
dependency: "direct main"
description:
name: flutter_i18n
url: "https://pub.dartlang.org"
source: hosted
version: "0.32.4"
flutter_lints:
dependency: "direct dev"
description:
@ -223,6 +230,11 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_localizations:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
flutter_svg:
dependency: "direct main"
description:
@ -235,6 +247,11 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
frontend_server_client:
dependency: transitive
description:
@ -326,6 +343,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
intl:
dependency: transitive
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.17.0"
io:
dependency: transitive
description:
@ -702,6 +726,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
toml:
dependency: transitive
description:
name: toml
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.1"
typed_data:
dependency: transitive
description:
@ -765,6 +796,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.0"
xml2json:
dependency: transitive
description:
name: xml2json
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.4"
yaml:
dependency: transitive
description:

View file

@ -16,6 +16,7 @@ dependencies:
flutter:
sdk: flutter
flutter_cache_manager: ^3.3.0
flutter_i18n: ^0.32.4
flutter_svg: ^1.1.1+1
get_it: ^7.2.0
github: ^9.4.0
@ -41,3 +42,4 @@ flutter:
uses-material-design: true
assets:
- assets/images/
- assets/i18n/