diff --git a/lib/settings/about.dart b/lib/settings/about.dart index 228ff00b..6d110816 100644 --- a/lib/settings/about.dart +++ b/lib/settings/about.dart @@ -116,7 +116,7 @@ class InvenTreeAboutWidget extends StatelessWidget { tiles.add( ListTile( title: Text(I18N.of(context).releaseNotes), - subtitle: Text("Display app release notes"), + subtitle: Text(I18N.of(context).appReleaseNotes), leading: FaIcon(FontAwesomeIcons.fileAlt), onTap: () { _releaseNotes(context); @@ -127,7 +127,7 @@ class InvenTreeAboutWidget extends StatelessWidget { tiles.add( ListTile( title: Text(I18N.of(context).credits), - subtitle: Text("Additional app credits"), + subtitle: Text(I18N.of(context).appCredits), leading: FaIcon(FontAwesomeIcons.bullhorn), onTap: () { _credits(context); diff --git a/lib/settings/app_settings.dart b/lib/settings/app_settings.dart index 05302842..355b26cf 100644 --- a/lib/settings/app_settings.dart +++ b/lib/settings/app_settings.dart @@ -95,8 +95,8 @@ class _InvenTreeAppSettingsState extends State { leading: FaIcon(FontAwesomeIcons.shapes), ), ListTile( - title: Text("Include Subcategories"), - subtitle: Text("Display subcategory parts in list view"), + title: Text(I18N.of(context).includeSubcategories), + subtitle: Text(I18N.of(context).includeSubcategoriesDetail), leading: FaIcon(FontAwesomeIcons.sitemap), trailing: Switch( value: partSubcategory, @@ -111,8 +111,8 @@ class _InvenTreeAppSettingsState extends State { leading: FaIcon(FontAwesomeIcons.boxes), ), ListTile( - title: Text("Include Sublocations"), - subtitle: Text("Display sublocation items in list view"), + title: Text(I18N.of(context).includeSublocations), + subtitle: Text(I18N.of(context).includeSublocationsDetail), leading: FaIcon(FontAwesomeIcons.sitemap), trailing: Switch( value: stockSublocation, @@ -129,7 +129,7 @@ class _InvenTreeAppSettingsState extends State { ), ListTile( title: Text(I18N.of(context).serverError), - subtitle: Text("Play audible tone on server error"), + subtitle: Text(I18N.of(context).soundOnServerError), leading: FaIcon(FontAwesomeIcons.server), trailing: Switch( value: serverSounds, @@ -138,7 +138,7 @@ class _InvenTreeAppSettingsState extends State { ), ListTile( title: Text(I18N.of(context).barcodeTones), - subtitle: Text("Play audible tones for barcode actions"), + subtitle: Text(I18N.of(context).soundOnBarcodeAction), leading: FaIcon(FontAwesomeIcons.qrcode), trailing: Switch( value: barcodeSounds, diff --git a/lib/settings/login.dart b/lib/settings/login.dart index ac10672e..cac0dd9a 100644 --- a/lib/settings/login.dart +++ b/lib/settings/login.dart @@ -300,7 +300,7 @@ class _InvenTreeLoginSettingsState extends State { // No profile available! children.add( ListTile( - title: Text("No profiles available"), + title: Text(I18N.of(context).profileNone), ) ); } diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index 63c2fe4d..5f007277 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -163,7 +163,7 @@ class _CategoryDisplayState extends RefreshableState { if (category == null) { return Card( child: ListTile( - title: Text("Top level part category"), + title: Text(I18N.of(context).partCategoryTopLevel) ) ); } else { @@ -248,8 +248,8 @@ class _CategoryDisplayState extends RefreshableState { tiles.add(progressIndicator()); } else if (_subcategories.length == 0) { tiles.add(ListTile( - title: Text("No Subcategories"), - subtitle: Text("No subcategories available") + title: Text(I18N.of(context).noSubcategories), + subtitle: Text(I18N.of(context).noSubcategoriesAvailable) )); } else { tiles.add(SubcategoryList(_subcategories)); diff --git a/lib/widget/fields.dart b/lib/widget/fields.dart index 9878df9f..3fa502b4 100644 --- a/lib/widget/fields.dart +++ b/lib/widget/fields.dart @@ -66,13 +66,13 @@ class ImagePickerField extends FormField { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ FlatButton( - child: Text("Select Image"), + child: Text(I18N.of(context).selectImage), onPressed: () { _selectFromGallery(state); }, ), FlatButton( - child: Text("Take Picture"), + child: Text(I18N.of(context).takePicture), onPressed: () { _selectFromCamera(state); }, @@ -81,7 +81,7 @@ class ImagePickerField extends FormField { ), ); return ListTile( - title: Text("Select Image"), + title: Text(I18N.of(context).selectImage), ); } ); diff --git a/lib/widget/home.dart b/lib/widget/home.dart index b7f9d2f7..014fa2d1 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -104,22 +104,6 @@ class _InvenTreeHomePageState extends State { }); } - void _unsupported() { - showDialog( - context: context, - child: new SimpleDialog( - title: new Text("Unsupported"), - children: [ - ListTile( - title: Text("This feature is not yet supported"), - subtitle: Text("It will be supported in an upcoming release"), - ) - ], - ) - ); - } - - void _loadProfile() async { _profile = await UserProfileDBManager().getSelectedProfile(); @@ -144,8 +128,8 @@ class _InvenTreeHomePageState extends State { // Tap to select / create a profile if (_profile == null) { return ListTile( - title: Text("No Profile Selected"), - subtitle: Text("Tap to create or select a profile"), + title: Text(I18N.of(context).profileNotSelected), + subtitle: Text(I18N.of(context).profileTapToCreate), leading: FaIcon(FontAwesomeIcons.server), trailing: FaIcon( FontAwesomeIcons.user, @@ -160,7 +144,7 @@ class _InvenTreeHomePageState extends State { // Profile is selected ... if (InvenTreeAPI().isConnecting()) { return ListTile( - title: Text("Connecting to server..."), + title: Text(I18N.of(context).serverConnecting), subtitle: Text("${InvenTreeAPI().baseUrl}"), leading: FaIcon(FontAwesomeIcons.server), trailing: Spinner( @@ -173,7 +157,7 @@ class _InvenTreeHomePageState extends State { ); } else if (InvenTreeAPI().isConnected()) { return ListTile( - title: Text("Connected to server"), + title: Text(I18N.of(context).serverConnected), subtitle: Text("${InvenTreeAPI().baseUrl}"), leading: FaIcon(FontAwesomeIcons.server), trailing: FaIcon( @@ -186,7 +170,7 @@ class _InvenTreeHomePageState extends State { ); } else { return ListTile( - title: Text("Could not connect to server"), + title: Text(I18N.of(context).serverCouldNotConnect), subtitle: Text("${_profile.server}"), leading: FaIcon(FontAwesomeIcons.server), trailing: FaIcon( diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index 30ecf99a..b7765275 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -183,7 +183,7 @@ class _LocationDisplayState extends RefreshableState { if (includeActions) { children.add( ListTile( - title: Text("Parent Category"), + title: Text(I18N.of(context).parentCategory), subtitle: Text("${location.parentpathstring}"), leading: FaIcon(FontAwesomeIcons.levelUpAlt), onTap: () { @@ -286,8 +286,8 @@ List detailTiles() { tiles.add(SublocationList(_sublocations)); } else { tiles.add(ListTile( - title: Text("No Sublocations"), - subtitle: Text("No sublocations available") + title: Text(I18N.of(context).sublocationNone), + subtitle: Text(I18N.of(context).sublocationNoneDetail) )); } diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index 040bca7c..7c71a90f 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -216,7 +216,7 @@ class _PartDisplayState extends RefreshableState { if (part.categoryName != null && part.categoryName.isNotEmpty) { tiles.add( ListTile( - title: Text("Part Category"), + title: Text(I18N.of(context).partCategory), subtitle: Text("${part.categoryName}"), leading: FaIcon(FontAwesomeIcons.sitemap), onTap: () { @@ -232,8 +232,8 @@ class _PartDisplayState extends RefreshableState { } else { tiles.add( ListTile( - title: Text("Part Category"), - subtitle: Text("Top level part category"), + title: Text(I18N.of(context).partCategory), + subtitle: Text(I18N.of(context).partCategoryTopLevel), leading: FaIcon(FontAwesomeIcons.sitemap), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null))); @@ -261,7 +261,7 @@ class _PartDisplayState extends RefreshableState { if (part.supplier_count > 0) { tiles.add( ListTile( - title: Text("Suppliers"), + title: Text(I18N.of(context).suppliers), leading: FaIcon(FontAwesomeIcons.industry), trailing: Text("${part.supplier_count}"), ) @@ -289,7 +289,7 @@ class _PartDisplayState extends RefreshableState { if (false && part.isAssembly) { tiles.add(ListTile( - title: Text("Bill of Materials"), + title: Text(I18N.of(context).billOfMaterials), leading: FaIcon(FontAwesomeIcons.thList), trailing: Text("${part.bomItemCount}"), onTap: null, @@ -298,7 +298,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( - title: Text("Building"), + title: Text(I18N.of(context).building), leading: FaIcon(FontAwesomeIcons.tools), trailing: Text("${part.building}"), onTap: null, @@ -344,7 +344,7 @@ class _PartDisplayState extends RefreshableState { // TODO - Add request tests? if (false && part.isTrackable) { tiles.add(ListTile( - title: Text("Required Tests"), + title: Text(I18N.of(context).testsRequired), leading: FaIcon(FontAwesomeIcons.tasks), trailing: Text("${part.testTemplateCount}"), onTap: null, @@ -356,11 +356,10 @@ class _PartDisplayState extends RefreshableState { if (part.notes.isNotEmpty) { tiles.add( ListTile( - title: Text("Notes"), + title: Text(I18N.of(context).notes), leading: FaIcon(FontAwesomeIcons.stickyNote), trailing: Text(""), onTap: () { - print("Hello"); Navigator.push( context, MaterialPageRoute(builder: (context) => PartNotesWidget(part)) diff --git a/lib/widget/search.dart b/lib/widget/search.dart index c2ed7094..1f8a066a 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -157,21 +157,21 @@ class PartSearchDelegate extends SearchDelegate { if (query.length == 0) { return ListTile( - title: Text("Enter search query") + title: Text(I18N.of(context).queryEnter) ); } if (query.length < 3) { return ListTile( - title: Text("Query too short"), - subtitle: Text("Enter a query of at least three characters") + title: Text(I18N.of(context).queryShort), + subtitle: Text(I18N.of(context).queryShortDetail) ); } if (partResults.length == 0) { return ListTile( title: Text(I18N.of(context).noResults), - subtitle: Text("No results for '${query}'") + subtitle: Text(I18N.of(context).queryNoResults + " '${query}'") ); } @@ -340,21 +340,21 @@ class StockSearchDelegate extends SearchDelegate { if (query.length == 0) { return ListTile( - title: Text("Enter search query") + title: Text(I18N.of(context).queryEnter) ); } if (query.length < 3) { return ListTile( - title: Text("Query too short"), - subtitle: Text("Enter a query of at least three characters") + title: Text(I18N.of(context).queryShort), + subtitle: Text(I18N.of(context).queryShortDetail) ); } if (itemResults.length == 0) { return ListTile( title: Text(I18N.of(context).noResults), - subtitle: Text("No results for '${query}'") + subtitle: Text(I18N.of(context).queryNoResults + " '${query}'") ); } diff --git a/lib/widget/starred_parts.dart b/lib/widget/starred_parts.dart index 3d11cc00..aadccd54 100644 --- a/lib/widget/starred_parts.dart +++ b/lib/widget/starred_parts.dart @@ -7,6 +7,8 @@ import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + import '../api.dart'; @@ -24,7 +26,7 @@ class _StarredPartState extends RefreshableState { List starredParts = []; @override - String getAppBarTitle(BuildContext context) => "Starred Parts"; + String getAppBarTitle(BuildContext context) => I18N.of(context).partsStarred; @override Future request(BuildContext context) async { @@ -75,8 +77,8 @@ class _StarredPartState extends RefreshableState { return ListView( children: [ ListTile( - title: Text("No Parts"), - subtitle: Text("No starred parts available") + title: Text(I18N.of(context).partsNone), + subtitle: Text(I18N.of(context).partsStarredNone) ) ], ); diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index 1f5e3323..8cddbe38 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -410,7 +410,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(I18N.of(context).stockLocation), leading: FaIcon(FontAwesomeIcons.mapMarkerAlt), - subtitle: Text("No location set"), + subtitle: Text(I18N.of(context).locationNotSet), ) ); } @@ -508,14 +508,14 @@ class _StockItemDisplayState extends RefreshableState { if (!InvenTreeAPI().checkPermission('stock', 'change')) { tiles.add( ListTile( - title: Text("Permission Required"), + title: Text(I18N.of(context).permissionRequired), leading: FaIcon(FontAwesomeIcons.userTimes) ) ); tiles.add( ListTile( - subtitle: Text("Your account does not have permission to perform stock adjustments"), + subtitle: Text(I18N.of(context).permissionAccountDenied), ) ); diff --git a/lib/widget/stock_item_test_results.dart b/lib/widget/stock_item_test_results.dart index 7704f6a4..dc2fd7ae 100644 --- a/lib/widget/stock_item_test_results.dart +++ b/lib/widget/stock_item_test_results.dart @@ -178,7 +178,7 @@ class _StockItemTestResultDisplayState extends RefreshableState