From 9e6aebe8a973ca5c0e0707ecfce919ce8e6523d5 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 7 Aug 2025 01:36:37 +0800 Subject: [PATCH 01/59] feat: map legends (#347) * feat: map legends * feat: radar unit --- lib/app/map/_lib/managers/monitor.dart | 41 +- lib/app/map/_lib/managers/precipitation.dart | 261 ++++++----- lib/app/map/_lib/managers/radar.dart | 452 ++++++++++--------- lib/app/map/_lib/managers/temperature.dart | 219 +++++---- lib/app/map/_lib/managers/wind.dart | 223 +++++---- lib/app/map/_widgets/map_legend.dart | 203 +++++++++ lib/utils/extensions/int.dart | 2 + lib/utils/radar_color.dart | 58 +-- lib/widgets/blurred_container.dart | 40 ++ 9 files changed, 958 insertions(+), 541 deletions(-) create mode 100644 lib/app/map/_widgets/map_legend.dart create mode 100644 lib/widgets/blurred_container.dart diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 7b716f276..414c6f761 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -1,6 +1,14 @@ import 'dart:async'; import 'dart:collection'; +import 'package:flutter/material.dart'; + +import 'package:i18n_extension/i18n_extension.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; +import 'package:styled_text/styled_text.dart'; + import 'package:dpip/api/model/eew.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; @@ -17,12 +25,6 @@ import 'package:dpip/utils/instrumental_intensity_color.dart'; import 'package:dpip/utils/log.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/morphing_sheet.dart'; -import 'package:flutter/material.dart'; -import 'package:i18n_extension/i18n_extension.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; -import 'package:styled_text/styled_text.dart'; class MonitorMapLayerManager extends MapLayerManager { final bool isReplayMode; @@ -798,7 +800,10 @@ class _MonitorMapLayerSheetState extends State { ), ], ), - Icon(Symbols.expand_less_rounded, color: context.colors.onErrorContainer, size: 24 + Icon( + Symbols.expand_less_rounded, + color: context.colors.onErrorContainer, + size: 24, ), ], ), @@ -881,7 +886,11 @@ class _MonitorMapLayerSheetState extends State { ), ], ), - Icon(Symbols.expand_more_rounded, color: context.colors.onErrorContainer, size: 24), + Icon( + Symbols.expand_more_rounded, + color: context.colors.onErrorContainer, + size: 24, + ), ], ), Padding( @@ -896,8 +905,12 @@ class _MonitorMapLayerSheetState extends State { 'magnitude': data.info.magnitude.toStringAsFixed(1), 'intensity': localIntensity.asIntensityLabel, }), - style: context.textTheme.bodyLarge!.copyWith(color: context.colors.onErrorContainer), - tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, + style: context.textTheme.bodyLarge!.copyWith( + color: context.colors.onErrorContainer, + ), + tags: { + 'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold)), + }, ), ), Selector( @@ -972,14 +985,18 @@ class _MonitorMapLayerSheetState extends State { text: countdown.toString(), style: TextStyle( fontSize: - context.textTheme.displayMedium!.fontSize! * + context + .textTheme + .displayMedium! + .fontSize! * 1.15, ), ), TextSpan( text: ' 秒'.i18n, style: TextStyle( - fontSize: context.textTheme.labelLarge!.fontSize, + fontSize: + context.textTheme.labelLarge!.fontSize, ), ), ], diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index ad279882f..03f008b57 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -1,8 +1,15 @@ +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/weather/rain.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; +import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; @@ -11,13 +18,10 @@ import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; +import 'package:dpip/widgets/blurred_container.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/morphing_sheet.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; -import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; class RainData { final double latitude; @@ -314,95 +318,51 @@ class PrecipitationMapLayerSheet extends StatelessWidget { _ => interval, }; - return MorphingSheet( - title: '降水'.i18n, - borderRadius: BorderRadius.circular(16), - elevation: 4, - partialBuilder: (context, controller, sheetController) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Selector>( - selector: (context, model) => model.precipitation, - builder: (context, precipitation, header) { - final times = precipitation.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); - return (date: t[0], time: t[1], value: time); - }); - final grouped = times.groupListsBy((time) => time.date).entries.toList(); - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - header!, - SizedBox( - height: kMinInteractiveDimension, - child: ValueListenableBuilder( - valueListenable: manager.currentPrecipitationInterval, - builder: (context, currentPrecipitationInterval, child) { - const intervals = PrecipitationMapLayerManager.precipitationIntervals; - - return ListView.separated( - padding: const EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - physics: const AlwaysScrollableScrollPhysics(), - itemCount: intervals.length, - itemBuilder: (context, index) { - final interval = intervals[index]; - final isSelected = interval == currentPrecipitationInterval; - - return ValueListenableBuilder( - valueListenable: manager.isLoading, - builder: (context, isLoading, child) { - return FilterChip( - selected: isSelected, - showCheckmark: !isLoading, - label: Text(getIntervalLabel(interval)), - side: BorderSide( - color: isSelected ? context.colors.primary : context.colors.outlineVariant, - ), - avatar: isSelected && isLoading ? const LoadingIcon() : null, - onSelected: - isLoading - ? null - : (selected) { - if (!selected) return; - manager.setPrecipitationInterval(interval); - }, - ); - }, - ); - }, - separatorBuilder: (context, index) => const SizedBox(width: 8), - ); - }, - ), - ), - SizedBox( - height: kMinInteractiveDimension, - child: ValueListenableBuilder( - valueListenable: manager.currentPrecipitationTime, - builder: (context, currentPrecipitationTime, child) { - return ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - physics: const AlwaysScrollableScrollPhysics(), - itemCount: grouped.length, - itemBuilder: (context, index) { - final MapEntry(key: date, value: group) = grouped[index]; - - final children = [Text(date)]; - - for (final time in group) { - final isSelected = time.value == currentPrecipitationTime; - - children.add( - ValueListenableBuilder( + return Stack( + children: [ + MorphingSheet( + title: '降水'.i18n, + borderRadius: BorderRadius.circular(16), + elevation: 4, + partialBuilder: (context, controller, sheetController) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Selector>( + selector: (context, model) => model.precipitation, + builder: (context, precipitation, header) { + final times = precipitation.map((time) { + final t = time.toSimpleDateTimeString(context).split(' '); + return (date: t[0], time: t[1], value: time); + }); + final grouped = times.groupListsBy((time) => time.date).entries.toList(); + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + header!, + SizedBox( + height: kMinInteractiveDimension, + child: ValueListenableBuilder( + valueListenable: manager.currentPrecipitationInterval, + builder: (context, currentPrecipitationInterval, child) { + const intervals = PrecipitationMapLayerManager.precipitationIntervals; + + return ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + physics: const AlwaysScrollableScrollPhysics(), + itemCount: intervals.length, + itemBuilder: (context, index) { + final interval = intervals[index]; + final isSelected = interval == currentPrecipitationInterval; + + return ValueListenableBuilder( valueListenable: manager.isLoading, builder: (context, isLoading, child) { return FilterChip( selected: isSelected, showCheckmark: !isLoading, - label: Text(time.time), + label: Text(getIntervalLabel(interval)), side: BorderSide( color: isSelected ? context.colors.primary : context.colors.outlineVariant, ), @@ -412,43 +372,116 @@ class PrecipitationMapLayerSheet extends StatelessWidget { ? null : (selected) { if (!selected) return; - manager.setPrecipitationTime(time.value); + manager.setPrecipitationInterval(interval); }, ); }, - ), - ); - } - - children.add( - const Padding( - padding: EdgeInsets.only(right: 8), - child: VerticalDivider(width: 16, indent: 8, endIndent: 8), - ), + ); + }, + separatorBuilder: (context, index) => const SizedBox(width: 8), ); + }, + ), + ), + SizedBox( + height: kMinInteractiveDimension, + child: ValueListenableBuilder( + valueListenable: manager.currentPrecipitationTime, + builder: (context, currentPrecipitationTime, child) { + return ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + physics: const AlwaysScrollableScrollPhysics(), + itemCount: grouped.length, + itemBuilder: (context, index) { + final MapEntry(key: date, value: group) = grouped[index]; + + final children = [Text(date)]; + + for (final time in group) { + final isSelected = time.value == currentPrecipitationTime; + + children.add( + ValueListenableBuilder( + valueListenable: manager.isLoading, + builder: (context, isLoading, child) { + return FilterChip( + selected: isSelected, + showCheckmark: !isLoading, + label: Text(time.time), + side: BorderSide( + color: isSelected ? context.colors.primary : context.colors.outlineVariant, + ), + avatar: isSelected && isLoading ? const LoadingIcon() : null, + onSelected: + isLoading + ? null + : (selected) { + if (!selected) return; + manager.setPrecipitationTime(time.value); + }, + ); + }, + ), + ); + } + + children.add( + const Padding( + padding: EdgeInsets.only(right: 8), + child: VerticalDivider(width: 16, indent: 8, endIndent: 8), + ), + ); - return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); + return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); + }, + ); }, - ); - }, - ), + ), + ), + ], + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Row( + spacing: 8, + children: [ + const Icon(Symbols.water_drop_rounded, size: 24), + Text('降水'.i18n, style: context.textTheme.titleMedium), + ], ), - ], - ); - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Row( - spacing: 8, - children: [ - const Icon(Symbols.water_drop_rounded, size: 24), - Text('降水'.i18n, style: context.textTheme.titleMedium), + ), + ), + ); + }, + ), + Positioned( + top: 24 + 48 + 16, + left: 24, + child: SafeArea( + child: BlurredContainer( + elevation: 4, + shadowColor: context.colors.shadow.withValues(alpha: 0.4), + child: ColorLegend( + unit: 'mm', + items: [ + ColorLegendItem(color: const Color(0xffc2c2c2), value: 0), + ColorLegendItem(color: const Color(0xFF9CFCFF), value: 10), + ColorLegendItem(color: const Color(0xFF059BFF), value: 30), + ColorLegendItem(color: const Color(0xFF39FF03), value: 50), + ColorLegendItem(color: const Color(0xFFFFFB03), value: 100), + ColorLegendItem(color: const Color(0xFFFF9500), value: 200), + ColorLegendItem(color: const Color(0xFFFF0000), value: 300), + ColorLegendItem(color: const Color(0xFFFB00FF), value: 500), + ColorLegendItem(color: const Color(0xFF960099), value: 1000), + ColorLegendItem(color: const Color(0xFF000000), value: 2000), ], ), ), ), - ); - }, + ), + ], ); } } diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index a25a4e56a..0a217fe42 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -1,9 +1,17 @@ import 'dart:async'; +import 'dart:ui'; + +import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; +import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; @@ -11,13 +19,10 @@ import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/log.dart'; +import 'package:dpip/widgets/blurred_container.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/morphing_sheet.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; -import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; class RadarMapLayerManager extends MapLayerManager { RadarMapLayerManager(super.context, super.controller, {this.getActiveLayerCount}); @@ -464,230 +469,265 @@ class RadarMapLayerSheet extends StatelessWidget { @override Widget build(BuildContext context) { - return MorphingSheet( - title: '雷達回波'.i18n, - borderRadius: BorderRadius.circular(16), - elevation: 4, - partialBuilder: (context, controller, sheetController) { - return Padding( - padding: const EdgeInsets.only(top: 4, bottom: 8), - child: Selector>( - selector: (context, model) => model.radar, - builder: (context, radar, child) { - final times = radar.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); - return (date: t[0], time: t[1], value: time); - }); - final grouped = times.groupListsBy((time) => time.date).entries.toList(); - - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 16, right: 4), - child: SizedBox( - height: 48, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - spacing: 8, + return Stack( + children: [ + MorphingSheet( + title: '雷達回波'.i18n, + borderRadius: BorderRadius.circular(16), + elevation: 4, + partialBuilder: (context, controller, sheetController) { + return Padding( + padding: const EdgeInsets.only(top: 4, bottom: 8), + child: Selector>( + selector: (context, model) => model.radar, + builder: (context, radar, child) { + final times = radar.map((time) { + final t = time.toSimpleDateTimeString(context).split(' '); + return (date: t[0], time: t[1], value: time); + }); + final grouped = times.groupListsBy((time) => time.date).entries.toList(); + + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(left: 16, right: 4), + child: SizedBox( + height: 48, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Icon(Symbols.radar_rounded, size: 24, color: context.colors.onSurface), - Text( - '雷達回波'.i18n, - style: context.textTheme.titleMedium?.copyWith(color: context.colors.onSurface), + Row( + spacing: 8, + children: [ + Icon(Symbols.radar_rounded, size: 24, color: context.colors.onSurface), + Text( + '雷達回波'.i18n, + style: context.textTheme.titleMedium?.copyWith(color: context.colors.onSurface), + ), + AnimatedBuilder( + animation: Listenable.merge([ + manager.currentRadarTime, + manager.playStartTime, + manager.isPlaying, + ]), + builder: (context, child) { + final currentTime = manager.currentRadarTime.value; + + if (currentTime == null) return const SizedBox.shrink(); + + try { + final timeFormatted = currentTime.toSimpleDateTimeString(context); + final timeData = timeFormatted.split(' '); + final date = timeData.length > 1 ? timeData[0] : ''; + final time = timeData.length > 1 ? timeData[1] : timeData[0]; + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 5), + decoration: BoxDecoration( + color: context.colors.surfaceContainer.withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: context.colors.outline), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + Icon( + Icons.schedule_rounded, + size: 12, + color: context.colors.onSurfaceVariant, + ), + if (date.isNotEmpty) ...[ + Text( + date, + style: context.textTheme.labelSmall?.copyWith( + color: context.colors.onSurfaceVariant, + height: 1, + ), + ), + Container( + width: 0.5, + height: 14, + margin: const EdgeInsets.symmetric(horizontal: 2), + color: context.colors.outline, + ), + ], + Text( + time, + style: context.textTheme.bodySmall?.copyWith( + color: context.colors.onSurface, + fontWeight: FontWeight.bold, + height: 1, + ), + ), + ], + ), + ); + } catch (e) { + return const SizedBox.shrink(); + } + }, + ), + ], ), AnimatedBuilder( animation: Listenable.merge([ - manager.currentRadarTime, - manager.playStartTime, manager.isPlaying, + manager.playStartTime, + manager.currentRadarTime, ]), builder: (context, child) { - final currentTime = manager.currentRadarTime.value; - - if (currentTime == null) return const SizedBox.shrink(); - - try { - final timeFormatted = currentTime.toSimpleDateTimeString(context); - final timeData = timeFormatted.split(' '); - final date = timeData.length > 1 ? timeData[0] : ''; - final time = timeData.length > 1 ? timeData[1] : timeData[0]; - - return Container( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 5), - decoration: BoxDecoration( - color: context.colors.surfaceContainer.withValues(alpha: 0.6), - borderRadius: BorderRadius.circular(8), - border: Border.all(color: context.colors.outline), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 4, - children: [ - Icon( - Icons.schedule_rounded, - size: 12, - color: context.colors.onSurfaceVariant, - ), - if (date.isNotEmpty) ...[ - Text( - date, - style: context.textTheme.labelSmall?.copyWith( - color: context.colors.onSurfaceVariant, - height: 1, - ), - ), - Container( - width: 0.5, - height: 14, - margin: const EdgeInsets.symmetric(horizontal: 2), - color: context.colors.outline, - ), - ], - Text( - time, - style: context.textTheme.bodySmall?.copyWith( - color: context.colors.onSurface, - fontWeight: FontWeight.bold, - height: 1, - ), - ), - ], - ), - ); - } catch (e) { + final isPlaying = manager.isPlaying.value; + final startTime = manager.playStartTime.value; + final canPlay = manager.canPlay; + + final shouldHide = startTime == null && !isPlaying; + + if (shouldHide) { return const SizedBox.shrink(); } + + return IconButton( + onPressed: canPlay || isPlaying ? manager.toggleAutoPlay : null, + icon: Icon( + isPlaying ? Symbols.pause_rounded : Symbols.play_arrow_rounded, + size: 24, + color: context.colors.primary, + ), + ); }, ), ], ), - AnimatedBuilder( - animation: Listenable.merge([ - manager.isPlaying, - manager.playStartTime, - manager.currentRadarTime, - ]), - builder: (context, child) { - final isPlaying = manager.isPlaying.value; - final startTime = manager.playStartTime.value; - final canPlay = manager.canPlay; - - final shouldHide = startTime == null && !isPlaying; - - if (shouldHide) { - return const SizedBox.shrink(); - } - - return IconButton( - onPressed: canPlay || isPlaying ? manager.toggleAutoPlay : null, - icon: Icon( - isPlaying ? Symbols.pause_rounded : Symbols.play_arrow_rounded, - size: 24, - color: context.colors.primary, - ), - ); - }, - ), - ], + ), ), - ), - ), - AnimatedBuilder( - animation: Listenable.merge([manager.playStartTime, manager.isPlaying]), - builder: (context, child) { - final startTime = manager.playStartTime.value; - final isPlaying = manager.isPlaying.value; - - if (isPlaying) { - return const SizedBox.shrink(); - } - - if (startTime == null && !isPlaying) { - return Padding( - padding: const EdgeInsets.fromLTRB(16, 4, 16, 8), - child: Text( - '長按設定播放起點'.i18n, - style: context.textTheme.bodySmall?.copyWith(color: context.colors.onSurfaceVariant), - ), - ); - } - - return Padding( - padding: const EdgeInsets.fromLTRB(16, 4, 16, 8), - child: Column( - children: [ - Row( - spacing: 8, + AnimatedBuilder( + animation: Listenable.merge([manager.playStartTime, manager.isPlaying]), + builder: (context, child) { + final startTime = manager.playStartTime.value; + final isPlaying = manager.isPlaying.value; + + if (isPlaying) { + return const SizedBox.shrink(); + } + + if (startTime == null && !isPlaying) { + return Padding( + padding: const EdgeInsets.fromLTRB(16, 4, 16, 8), + child: Text( + '長按設定播放起點'.i18n, + style: context.textTheme.bodySmall?.copyWith(color: context.colors.onSurfaceVariant), + ), + ); + } + + return Padding( + padding: const EdgeInsets.fromLTRB(16, 4, 16, 8), + child: Column( children: [ - _LegendItem( - label: '目前時間'.i18n, - color: context.colors.primaryContainer, - borderColor: context.colors.primary, - ), - _LegendItem( - label: '播放起點'.i18n, - color: context.colors.tertiaryContainer, - borderColor: context.colors.tertiary, + Row( + spacing: 8, + children: [ + _LegendItem( + label: '目前時間'.i18n, + color: context.colors.primaryContainer, + borderColor: context.colors.primary, + ), + _LegendItem( + label: '播放起點'.i18n, + color: context.colors.tertiaryContainer, + borderColor: context.colors.tertiary, + ), + ], ), ], ), - ], - ), - ); - }, - ), - ValueListenableBuilder( - valueListenable: manager.isPlaying, - builder: (context, isPlaying, child) { - if (isPlaying) { - return Container( - height: 32, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), - child: AnimatedBuilder( - animation: Listenable.merge([ - manager.currentRadarTime, - manager.playStartTime, - manager.playEndTime, - ]), - builder: (context, child) { - return _RadarProgressBar(manager: manager); - }, - ), - ); - } - - return SizedBox( - height: kMinInteractiveDimension, - child: ValueListenableBuilder( - valueListenable: manager.currentRadarTime, - builder: (context, currentTime, child) { - return ValueListenableBuilder( - valueListenable: manager.playStartTime, - builder: (context, startTime, child) { - return _AutoScrollingTimeList( - grouped: grouped, - currentTime: currentTime, - startTime: startTime, - manager: manager, - shouldFocusOnShow: true, + ); + }, + ), + ValueListenableBuilder( + valueListenable: manager.isPlaying, + builder: (context, isPlaying, child) { + if (isPlaying) { + return Container( + height: 32, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: AnimatedBuilder( + animation: Listenable.merge([ + manager.currentRadarTime, + manager.playStartTime, + manager.playEndTime, + ]), + builder: (context, child) { + return _RadarProgressBar(manager: manager); + }, + ), + ); + } + + return SizedBox( + height: kMinInteractiveDimension, + child: ValueListenableBuilder( + valueListenable: manager.currentRadarTime, + builder: (context, currentTime, child) { + return ValueListenableBuilder( + valueListenable: manager.playStartTime, + builder: (context, startTime, child) { + return _AutoScrollingTimeList( + grouped: grouped, + currentTime: currentTime, + startTime: startTime, + manager: manager, + shouldFocusOnShow: true, + ); + }, ); }, - ); - }, - ), - ); - }, - ), + ), + ); + }, + ), + ], + ); + }, + ), + ); + }, + ), + Positioned( + top: 24 + 48 + 16, + left: 24, + child: SafeArea( + child: BlurredContainer( + elevation: 4, + shadowColor: context.colors.shadow.withValues(alpha: 0.4), + child: ColorLegend( + reverse: true, + unit: 'dBZ', + items: [ + ColorLegendItem(color: const Color(0xff00ffff), value: 0), + ColorLegendItem(color: const Color(0xff00a3ff), value: 5), + ColorLegendItem(color: const Color(0xff005bff), value: 10), + ColorLegendItem(color: const Color(0xff0000ff), value: 15, blendTail: false), + ColorLegendItem(color: const Color(0xff00ff00), value: 16, hidden: true), + ColorLegendItem(color: const Color(0xff00d300), value: 20), + ColorLegendItem(color: const Color(0xff00a000), value: 25), + ColorLegendItem(color: const Color(0xffccea00), value: 30), + ColorLegendItem(color: const Color(0xffffd300), value: 35), + ColorLegendItem(color: const Color(0xffff8800), value: 40), + ColorLegendItem(color: const Color(0xffff1800), value: 45), + ColorLegendItem(color: const Color(0xffd30000), value: 50), + ColorLegendItem(color: const Color(0xffa00000), value: 55), + ColorLegendItem(color: const Color(0xffea00cc), value: 60), + ColorLegendItem(color: const Color(0xff9600ff), value: 65), ], - ); - }, + ), + ), ), - ); - }, + ), + ], ); } } diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index 6a967fdfc..9b108b23f 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -1,23 +1,29 @@ +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/weather/weather.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; +import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; +import 'package:dpip/models/settings/ui.dart'; import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/extensions/int.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; +import 'package:dpip/widgets/blurred_container.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/morphing_sheet.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; -import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; class TemperatureData { final double latitude; @@ -244,98 +250,131 @@ class TemperatureMapLayerSheet extends StatelessWidget { @override Widget build(BuildContext context) { - return MorphingSheet( - title: '氣溫'.i18n, - borderRadius: BorderRadius.circular(16), - elevation: 4, - partialBuilder: (context, controller, sheetController) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Selector>( - selector: (context, model) => model.temperature, - builder: (context, temperature, header) { - final times = temperature.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); - return (date: t[0], time: t[1], value: time); - }); - final grouped = times.groupListsBy((time) => time.date).entries.toList(); - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - header!, - SizedBox( - height: kMinInteractiveDimension, - child: ValueListenableBuilder( - valueListenable: manager.currentTemperatureTime, - builder: (context, currentTemperatureTime, child) { - return ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - physics: const AlwaysScrollableScrollPhysics(), - itemCount: grouped.length, - itemBuilder: (context, index) { - final MapEntry(key: date, value: group) = grouped[index]; - - final children = [Text(date)]; - - for (final time in group) { - final isSelected = time.value == currentTemperatureTime; - - children.add( - ValueListenableBuilder( - valueListenable: manager.isLoading, - builder: (context, isLoading, child) { - return FilterChip( - selected: isSelected, - showCheckmark: !isLoading, - label: Text(time.time), - side: BorderSide( - color: isSelected ? context.colors.primary : context.colors.outlineVariant, - ), - avatar: isSelected && isLoading ? const LoadingIcon() : null, - onSelected: - isLoading - ? null - : (selected) { - if (!selected) return; - manager.setTemperatureTime(time.value); - }, - ); - }, - ), - ); - } - - children.add( - const Padding( - padding: EdgeInsets.only(right: 8), - child: VerticalDivider(width: 16, indent: 8, endIndent: 8), - ), + return Stack( + children: [ + MorphingSheet( + title: '氣溫'.i18n, + borderRadius: BorderRadius.circular(16), + elevation: 4, + partialBuilder: (context, controller, sheetController) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Selector>( + selector: (context, model) => model.temperature, + builder: (context, temperature, header) { + final times = temperature.map((time) { + final t = time.toSimpleDateTimeString(context).split(' '); + return (date: t[0], time: t[1], value: time); + }); + final grouped = times.groupListsBy((time) => time.date).entries.toList(); + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + header!, + SizedBox( + height: kMinInteractiveDimension, + child: ValueListenableBuilder( + valueListenable: manager.currentTemperatureTime, + builder: (context, currentTemperatureTime, child) { + return ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + physics: const AlwaysScrollableScrollPhysics(), + itemCount: grouped.length, + itemBuilder: (context, index) { + final MapEntry(key: date, value: group) = grouped[index]; + + final children = [Text(date)]; + + for (final time in group) { + final isSelected = time.value == currentTemperatureTime; + + children.add( + ValueListenableBuilder( + valueListenable: manager.isLoading, + builder: (context, isLoading, child) { + return FilterChip( + selected: isSelected, + showCheckmark: !isLoading, + label: Text(time.time), + side: BorderSide( + color: isSelected ? context.colors.primary : context.colors.outlineVariant, + ), + avatar: isSelected && isLoading ? const LoadingIcon() : null, + onSelected: + isLoading + ? null + : (selected) { + if (!selected) return; + manager.setTemperatureTime(time.value); + }, + ); + }, + ), + ); + } + + children.add( + const Padding( + padding: EdgeInsets.only(right: 8), + child: VerticalDivider(width: 16, indent: 8, endIndent: 8), + ), + ); + + return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); + }, ); - - return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); }, - ); - }, - ), + ), + ), + ], + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Row( + spacing: 8, + children: [ + const Icon(Symbols.thermostat_rounded, size: 24), + Text('氣溫'.i18n, style: context.textTheme.titleMedium), + ], ), - ], - ); - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Row( - spacing: 8, - children: [ - const Icon(Symbols.thermostat_rounded, size: 24), - Text('氣溫'.i18n, style: context.textTheme.titleMedium), - ], + ), + ), + ); + }, + ), + Positioned( + top: 24 + 48 + 16, + left: 24, + child: SafeArea( + child: BlurredContainer( + elevation: 4, + shadowColor: context.colors.shadow.withValues(alpha: 0.4), + child: Selector( + selector: (context, model) => model.useFahrenheit, + builder: (context, useFahrenheit, child) { + return ColorLegend( + reverse: true, + unit: useFahrenheit ? '℉' : '℃', + appendUnit: true, + items: [ + ColorLegendItem(color: const Color(0xff4d4e51), value: useFahrenheit ? -20.asFahrenheit : -20), + ColorLegendItem(color: const Color(0xff0000ff), value: useFahrenheit ? -10.asFahrenheit : -10), + ColorLegendItem(color: const Color(0xff6495ED), value: useFahrenheit ? 0.asFahrenheit : 0), + ColorLegendItem(color: const Color(0xff95d07e), value: useFahrenheit ? 10.asFahrenheit : 10), + ColorLegendItem(color: const Color(0xfff6e78b), value: useFahrenheit ? 20.asFahrenheit : 20), + ColorLegendItem(color: const Color(0xffff4500), value: useFahrenheit ? 30.asFahrenheit : 30), + ColorLegendItem(color: const Color(0xff8B0000), value: useFahrenheit ? 40.asFahrenheit : 40), + ], + ); + }, ), ), ), - ); - }, + ), + ], ); } } diff --git a/lib/app/map/_lib/managers/wind.dart b/lib/app/map/_lib/managers/wind.dart index 3c6452c83..355a67534 100644 --- a/lib/app/map/_lib/managers/wind.dart +++ b/lib/app/map/_lib/managers/wind.dart @@ -1,8 +1,15 @@ +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/weather/weather.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; +import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; @@ -11,13 +18,10 @@ import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; +import 'package:dpip/widgets/blurred_container.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/morphing_sheet.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; -import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; class WindData { final double latitude; @@ -195,97 +199,136 @@ class WindMapLayerSheet extends StatelessWidget { @override Widget build(BuildContext context) { - return MorphingSheet( - title: '風向/風速'.i18n, - borderRadius: BorderRadius.circular(16), - elevation: 4, - partialBuilder: (context, controller, sheetController) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Selector>( - selector: (context, model) => model.wind, - builder: (context, wind, child) { - final times = wind.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); - return (date: t[0], time: t[1], value: time); - }); - final grouped = times.groupListsBy((time) => time.date).entries.toList(); - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Row( - spacing: 8, - children: [ - const Icon(Symbols.wind_power_rounded, size: 24), - Text('風向/風速'.i18n, style: context.textTheme.titleMedium), - ], - ), - ), - SizedBox( - height: kMinInteractiveDimension, - child: ValueListenableBuilder( - valueListenable: manager.currentWindTime, - builder: (context, currentWindTime, child) { - return ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - physics: const AlwaysScrollableScrollPhysics(), - itemCount: grouped.length, - itemBuilder: (context, index) { - final MapEntry(key: date, value: group) = grouped[index]; - - final children = [Text(date)]; - - for (final time in group) { - final isSelected = time.value == currentWindTime; - - children.add( - ValueListenableBuilder( - valueListenable: manager.isLoading, - builder: (context, isLoading, child) { - return FilterChip( - selected: isSelected, - showCheckmark: !isLoading, - label: Text(time.time), - side: BorderSide( - color: isSelected ? context.colors.primary : context.colors.outlineVariant, - ), - avatar: isSelected && isLoading ? const LoadingIcon() : null, - onSelected: - isLoading - ? null - : (selected) { - if (!selected) return; - manager.setWindTime(time.value); - }, - ); - }, - ), - ); - } - - children.add( - const Padding( - padding: EdgeInsets.only(right: 8), - child: VerticalDivider(width: 16, indent: 8, endIndent: 8), - ), + return Stack( + children: [ + MorphingSheet( + title: '風向/風速'.i18n, + borderRadius: BorderRadius.circular(16), + elevation: 4, + partialBuilder: (context, controller, sheetController) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Selector>( + selector: (context, model) => model.wind, + builder: (context, wind, child) { + final times = wind.map((time) { + final t = time.toSimpleDateTimeString(context).split(' '); + return (date: t[0], time: t[1], value: time); + }); + final grouped = times.groupListsBy((time) => time.date).entries.toList(); + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Row( + spacing: 8, + children: [ + const Icon(Symbols.wind_power_rounded, size: 24), + Text('風向/風速'.i18n, style: context.textTheme.titleMedium), + ], + ), + ), + SizedBox( + height: kMinInteractiveDimension, + child: ValueListenableBuilder( + valueListenable: manager.currentWindTime, + builder: (context, currentWindTime, child) { + return ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + physics: const AlwaysScrollableScrollPhysics(), + itemCount: grouped.length, + itemBuilder: (context, index) { + final MapEntry(key: date, value: group) = grouped[index]; + + final children = [Text(date)]; + + for (final time in group) { + final isSelected = time.value == currentWindTime; + + children.add( + ValueListenableBuilder( + valueListenable: manager.isLoading, + builder: (context, isLoading, child) { + return FilterChip( + selected: isSelected, + showCheckmark: !isLoading, + label: Text(time.time), + side: BorderSide( + color: isSelected ? context.colors.primary : context.colors.outlineVariant, + ), + avatar: isSelected && isLoading ? const LoadingIcon() : null, + onSelected: + isLoading + ? null + : (selected) { + if (!selected) return; + manager.setWindTime(time.value); + }, + ); + }, + ), + ); + } + + children.add( + const Padding( + padding: EdgeInsets.only(right: 8), + child: VerticalDivider(width: 16, indent: 8, endIndent: 8), + ), + ); + + return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); + }, ); - - return Row(mainAxisSize: MainAxisSize.min, spacing: 8, children: children); }, - ); - }, - ), + ), + ), + ], + ); + }, + ), + ); + }, + ), + Positioned( + top: 24 + 48 + 16, + left: 24, + child: SafeArea( + child: BlurredContainer( + elevation: 4, + shadowColor: context.colors.shadow.withValues(alpha: 0.4), + child: Legend( + unit: 'm/s', + items: [ + LegendItem( + icon: const OutlinedIcon(Symbols.navigation_rounded, fill: Color(0xffffffff), size: 20), + label: '0.1 - 3.3', + ), + LegendItem( + icon: const OutlinedIcon(Symbols.navigation_rounded, fill: Color(0xff03fff0), size: 20), + label: '3.4 - 7.9', + ), + LegendItem( + icon: const OutlinedIcon(Symbols.navigation_rounded, fill: Color(0xff0385ff), size: 20), + label: '8.0 - 13.8', + ), + LegendItem( + icon: const OutlinedIcon(Symbols.navigation_rounded, fill: Color(0xff8000ff), size: 20), + label: '13.9 - 32.6', + ), + LegendItem( + icon: const OutlinedIcon(Symbols.navigation_rounded, fill: Color(0xffff006b), size: 20), + label: '≥ 32.7', ), ], - ); - }, + ), + ), ), - ); - }, + ), + ], ); } } diff --git a/lib/app/map/_widgets/map_legend.dart b/lib/app/map/_widgets/map_legend.dart new file mode 100644 index 000000000..5bbf23df2 --- /dev/null +++ b/lib/app/map/_widgets/map_legend.dart @@ -0,0 +1,203 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; +import 'package:i18n_extension/i18n_extension.dart'; + +import 'package:dpip/core/i18n.dart'; +import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/widgets/layout.dart'; + +class ColorLegendItem { + final Color color; + final String? label; + final num value; + final bool blendHead; + final bool blendTail; + final bool hidden; + + ColorLegendItem({ + required this.color, + required this.value, + this.label, + this.blendHead = true, + this.blendTail = true, + this.hidden = false, + }); + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + + if (other is ColorLegendItem) { + return color == other.color && + value == other.value && + label == other.label && + blendHead == other.blendHead && + blendTail == other.blendTail && + hidden == other.hidden; + } + + return false; + } + + @override + int get hashCode => Object.hash(color, value, blendHead, blendTail, hidden); +} + +class ColorLegend extends StatelessWidget { + final List items; + final bool reverse; + final String? unit; + final bool appendUnit; + + const ColorLegend({super.key, required this.items, this.reverse = false, this.appendUnit = false, this.unit}); + + @override + Widget build(BuildContext context) { + final items = reverse ? this.items.reversed.toList() : this.items; + final visibleItems = items.where((item) => !item.hidden).toList(); + + final children = + items.mapIndexed((index, item) { + if (item.hidden) return const SizedBox.shrink(); + + final visibleIndex = visibleItems.indexOf(item); + + final previous = index == 0 ? null : items.elementAtOrNull(index - 1); + final next = items.elementAtOrNull(index + 1); + + final headColor = + item.blendHead + ? (previous != null + ? Color.alphaBlend(item.color.withValues(alpha: 0.5), previous.color) + : item.color) + : item.color; + final tailColor = + item.blendTail + ? (next != null ? Color.alphaBlend(item.color.withValues(alpha: 0.5), next.color) : item.color) + : item.color; + + return IntrinsicHeight( + child: Layout.row.stretch[6]( + children: [ + if (!item.blendHead && !item.blendTail) + ColoredBox(color: item.color) + else + Container( + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [headColor, item.color, tailColor], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + borderRadius: + visibleIndex == 0 + ? const BorderRadius.vertical(top: Radius.circular(8)) + : (visibleIndex + 1) == visibleItems.length + ? const BorderRadius.vertical(bottom: Radius.circular(8)) + : null, + ), + width: 8, + ), + RichText( + text: TextSpan( + children: [ + TextSpan(text: item.label ?? '${item.value}'), + if (unit != null && appendUnit) + TextSpan(text: ' $unit', style: TextStyle(color: context.colors.outline)), + ], + style: context.textTheme.labelSmall?.copyWith( + color: context.colors.onSurfaceVariant, + fontFeatures: const [FontFeature.tabularFigures()], + ), + ), + ), + ], + ), + ); + }).toList(); + + return Layout.col.left[2]( + children: [ + Layout.col.left(children: children), + if (unit != null && !appendUnit) + Text( + '單位:{unit}'.i18n.args({'unit': unit!}), + style: context.textTheme.labelSmall?.copyWith(color: context.colors.onSurfaceVariant), + ), + ], + ); + } +} + +class LegendItem { + final Widget icon; + final String label; + + LegendItem({required this.icon, required this.label}); +} + +class Legend extends StatelessWidget { + final List items; + final bool reverse; + final String? unit; + final bool appendUnit; + + const Legend({super.key, required this.items, this.reverse = false, this.appendUnit = false, this.unit}); + + @override + Widget build(BuildContext context) { + final items = reverse ? this.items.reversed.toList() : this.items; + + final children = + items.map((item) { + return Layout.row.left[2]( + children: [ + item.icon, + RichText( + text: TextSpan( + children: [ + TextSpan(text: item.label), + if (unit != null && appendUnit) + TextSpan(text: ' $unit', style: TextStyle(color: context.colors.outline)), + ], + style: context.textTheme.labelSmall?.copyWith( + color: context.colors.onSurfaceVariant, + fontFeatures: const [FontFeature.tabularFigures()], + ), + ), + ), + ], + ); + }).toList(); + + return Layout.col.left[2]( + children: [ + Layout.col.left(children: children), + if (unit != null && !appendUnit) + Text( + '單位:{unit}'.i18n.args({'unit': unit!}), + style: context.textTheme.labelSmall?.copyWith(color: context.colors.onSurfaceVariant), + ), + ], + ); + } +} + +class OutlinedIcon extends StatelessWidget { + final IconData icon; + final Color? fill; + final Color? stroke; + final double? size; + + const OutlinedIcon(this.icon, {super.key, this.fill, this.stroke, this.size}); + + @override + Widget build(BuildContext context) { + return Stack( + children: [Icon(icon, fill: 1, color: fill, size: size), Icon(icon, fill: 0, color: stroke, size: size)], + ); + } +} diff --git a/lib/utils/extensions/int.dart b/lib/utils/extensions/int.dart index 416d6d29a..8aa717177 100644 --- a/lib/utils/extensions/int.dart +++ b/lib/utils/extensions/int.dart @@ -23,6 +23,8 @@ extension CommonContext on int { ][this]; String get asIntensityDisplayLabel => ['0', '1', '2', '3', '4', '5⁻', '5⁺', '6⁻', '6⁺', '7'][this]; TZDateTime get asTZDateTime => parseDateTime(this); + int get asFahrenheit => (this * 9 / 5 + 32).round(); + String toSimpleDateTimeString(BuildContext context) => asTZDateTime.toSimpleDateTimeString(context); String toLocaleFullDateString(BuildContext context) => asTZDateTime.toLocaleFullDateString(context); String toLocaleDateTimeString(BuildContext context) => asTZDateTime.toLocaleDateTimeString(context); diff --git a/lib/utils/radar_color.dart b/lib/utils/radar_color.dart index 24d4cd062..e03b7a0c1 100644 --- a/lib/utils/radar_color.dart +++ b/lib/utils/radar_color.dart @@ -1,68 +1,68 @@ final List dBZColors = [ - '00ffff', - '00ecff', - '00daff', - '00c8ff', - '00b6ff', - '00a3ff', - '0091ff', - '007fff', - '006dff', - '005bff', - '0048ff', - '0036ff', - '0024ff', - '0012ff', - '0000ff', - '00ff00', - '00f400', - '00e900', - '00de00', - '00d300', + '00ffff', // 0 + '00ecff', // + '00daff', // + '00c8ff', // + '00b6ff', // + '00a3ff', // 5 + '0091ff', // + '007fff', // + '006dff', // + '005bff', // 10 + '0048ff', // + '0036ff', // + '0024ff', // + '0012ff', // + '0000ff', // 15 + '00ff00', // 16 + '00f400', // 17 + '00e900', // 18 + '00de00', // + '00d300', // 20 '00c800', '00be00', '00b400', '00aa00', - '00a000', + '00a000', // 25 '009600', '33ab00', '66c000', '99d500', - 'ccea00', + 'ccea00', // 30 'ffff00', 'fff400', 'ffe900', 'ffde00', - 'ffd300', + 'ffd300', // 35 'ffc800', 'ffb800', 'ffa800', 'ff9800', - 'ff8800', + 'ff8800', // 40 'ff7800', 'ff6000', 'ff4800', 'ff3000', - 'ff1800', + 'ff1800', // 45 'ff0000', 'f40000', 'e90000', 'de0000', - 'd30000', + 'd30000', // 50 'c80000', 'be0000', 'b40000', 'aa0000', - 'a00000', + 'a00000', // 55 '960000', 'ab0033', 'c00066', 'd50099', - 'ea00cc', + 'ea00cc', // 60 'ff00ff', 'ea00ff', 'd500ff', 'c000ff', - 'ab00ff', + 'ab00ff', // 65 '9600ff', ]; diff --git a/lib/widgets/blurred_container.dart b/lib/widgets/blurred_container.dart new file mode 100644 index 000000000..8e6ad5c42 --- /dev/null +++ b/lib/widgets/blurred_container.dart @@ -0,0 +1,40 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +import 'package:dpip/utils/extensions/build_context.dart'; + +class BlurredContainer extends StatelessWidget { + final Widget child; + final EdgeInsets padding; + final Color? shadowColor; + final double elevation; + final double sigma; + + const BlurredContainer({ + super.key, + required this.child, + this.padding = const EdgeInsets.all(8), + this.shadowColor, + this.elevation = 0, + this.sigma = 16, + }); + + @override + Widget build(BuildContext context) { + return Material( + color: context.colors.surfaceContainer.withValues(alpha: 0.6), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: BorderSide(color: context.colors.outline.withValues(alpha: 0.2)), + ), + elevation: elevation, + shadowColor: shadowColor ?? context.colors.shadow.withValues(alpha: 0.4), + clipBehavior: Clip.antiAlias, + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: sigma, sigmaY: sigma), + child: Padding(padding: padding, child: child), + ), + ); + } +} From b1fcf0835ae07da1fc312a669a87566d9f5a58af Mon Sep 17 00:00:00 2001 From: Lingling Date: Thu, 7 Aug 2025 01:51:32 +0800 Subject: [PATCH 02/59] chore: remove info log (#345) * chore: log * chore: log * chore: log * chore(main): Improve startup * chore: log --------- Co-authored-by: YuYu1015 <44525760+whes1015@users.noreply.github.com> --- lib/app/map/_lib/managers/monitor.dart | 15 --------------- lib/app/map/_lib/managers/precipitation.dart | 13 +------------ lib/app/map/_lib/managers/radar.dart | 8 -------- lib/app/map/_lib/managers/report.dart | 14 -------------- lib/app/map/_lib/managers/temperature.dart | 12 ------------ lib/app/map/_lib/managers/wind.dart | 9 --------- lib/core/installation_tracker.dart | 3 --- lib/core/service.dart | 1 - lib/main.dart | 16 ++++++++-------- lib/widgets/map/map.dart | 4 ---- 10 files changed, 9 insertions(+), 86 deletions(-) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 414c6f761..114848300 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -114,7 +114,6 @@ class MonitorMapLayerManager extends MapLayerManager { if (location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); - TalkerManager.instance.info('Moved Camera to $location'); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); TalkerManager.instance.info('Moved Camera to ${DpipMap.kTaiwanCenter}'); @@ -534,23 +533,16 @@ class MonitorMapLayerManager extends MapLayerManager { // rts await controller.setLayerVisibility(rtsLayerId, false); - TalkerManager.instance.info('Hiding Layer "$rtsLayerId"'); // intensity await controller.setLayerVisibility(intensityLayerId, false); - TalkerManager.instance.info('Hiding Layer "$intensityLayerId"'); await controller.setLayerVisibility(intensity0LayerId, false); - TalkerManager.instance.info('Hiding Layer "$intensity0LayerId"'); await controller.setLayerVisibility(boxLayerId, false); - TalkerManager.instance.info('Hiding Layer "$boxLayerId"'); // eew await controller.setLayerVisibility(epicenterLayerId, false); - TalkerManager.instance.info('Hiding Layer "$epicenterLayerId"'); await controller.setLayerVisibility(pWaveLayerId, false); - TalkerManager.instance.info('Hiding Layer "$pWaveLayerId"'); await controller.setLayerVisibility(sWaveLayerId, false); - TalkerManager.instance.info('Hiding Layer "$sWaveLayerId"'); visible = false; } catch (e, s) { @@ -577,21 +569,14 @@ class MonitorMapLayerManager extends MapLayerManager { final hasBox = GlobalProviders.data.rts?.box.isNotEmpty ?? false; await controller.setLayerVisibility(rtsLayerId, !hasBox); - TalkerManager.instance.info('Showing Layer "$rtsLayerId"'); await controller.setLayerVisibility(intensityLayerId, hasBox); - TalkerManager.instance.info('Showing Layer "$intensityLayerId"'); await controller.setLayerVisibility(intensity0LayerId, hasBox); - TalkerManager.instance.info('Showing Layer "$intensity0LayerId"'); await controller.setLayerVisibility(boxLayerId, hasBox); - TalkerManager.instance.info('Showing Layer "$boxLayerId"'); await controller.setLayerVisibility(epicenterLayerId, true); - TalkerManager.instance.info('Showing Layer "$epicenterLayerId"'); await controller.setLayerVisibility(pWaveLayerId, true); - TalkerManager.instance.info('Showing Layer "$pWaveLayerId"'); await controller.setLayerVisibility(sWaveLayerId, true); - TalkerManager.instance.info('Showing Layer "$sWaveLayerId"'); await _focus(); diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index 03f008b57..25c2d03c5 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -66,7 +66,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { onTimeChanged?.call(time); - TalkerManager.instance.info('Updated Precipitation data to "$time"'); } catch (e, s) { TalkerManager.instance.error('PrecipitationMapLayerManager.setPrecipitationTime', e, s); } finally { @@ -83,10 +82,8 @@ class PrecipitationMapLayerManager extends MapLayerManager { final hideLayerId = '$layerId-${currentPrecipitationInterval.value}'; await controller.setLayerVisibility(showLayerId, true); - TalkerManager.instance.info('Showing Layer "$showLayerId"'); await controller.setLayerVisibility(hideLayerId, false); - TalkerManager.instance.info('Hiding Layer "$hideLayerId"'); currentPrecipitationInterval.value = interval; } catch (e, s) { @@ -100,7 +97,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { if (location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); - TalkerManager.instance.info('Moved Camera to $location'); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); TalkerManager.instance.info('Moved Camera to ${DpipMap.kTaiwanCenter}'); @@ -150,7 +146,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { final properties = GeojsonSourceProperties(data: data); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); if (!context.mounted) return; } @@ -223,9 +218,7 @@ class PrecipitationMapLayerManager extends MapLayerManager { properties.entries.map( (entry) => controller .addLayer(sourceId, '$layerId-${entry.key}', entry.value, belowLayerId: BaseMapLayerIds.userLocation) - .then((value) { - TalkerManager.instance.info('Added Layer "$layerId-${entry.key}"'); - }), + .then((value) {}), ), ); } @@ -247,7 +240,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(hideLayerId, false); - TalkerManager.instance.info('Hiding Layer "$hideLayerId"'); visible = false; } catch (e, s) { @@ -264,7 +256,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(showLayerId, true); - TalkerManager.instance.info('Showing Layer "$showLayerId"'); await _focus(); @@ -282,11 +273,9 @@ class PrecipitationMapLayerManager extends MapLayerManager { for (final interval in precipitationIntervals) { await controller.removeLayer('$layerId-$interval'); - TalkerManager.instance.info('Removed Layer "$layerId-$interval"'); } await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); } catch (e, s) { TalkerManager.instance.error('PrecipitationMapLayerManager.remove', e, s); } diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index 0a217fe42..8f8a4b622 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -138,8 +138,6 @@ class RadarMapLayerManager extends MapLayerManager { currentRadarTime.value = time; await _setupAndShowLayer(time); - - TalkerManager.instance.info('Updated Radar tiles to "$time"'); } catch (e, s) { TalkerManager.instance.error('RadarMapLayerManager._updateRadarTileUrl', e, s); } finally { @@ -161,14 +159,12 @@ class RadarMapLayerManager extends MapLayerManager { ); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); } if (!isLayerExists) { final properties = RasterLayerProperties(visibility: visible ? 'visible' : 'none'); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.exptechCountyOutline); - TalkerManager.instance.info('Added Layer "$layerId"'); } else if (visible) { await controller.setLayerVisibility(layerId, true); } @@ -209,7 +205,6 @@ class RadarMapLayerManager extends MapLayerManager { try { await _setupAndShowLayer(time); await _hideLayer(time); - TalkerManager.instance.info('Preloaded radar layer: $time'); } catch (e, s) { TalkerManager.instance.error('Failed to preload radar layer: $time', e, s); } @@ -323,7 +318,6 @@ class RadarMapLayerManager extends MapLayerManager { if (location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); - TalkerManager.instance.info('Moved Camera to $location'); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); TalkerManager.instance.info('Moved Camera to ${DpipMap.kTaiwanCenter}'); @@ -367,7 +361,6 @@ class RadarMapLayerManager extends MapLayerManager { } visible = false; - TalkerManager.instance.info('Hidden all radar layers'); } catch (e, s) { TalkerManager.instance.error('RadarMapLayerManager.hide', e, s); } @@ -381,7 +374,6 @@ class RadarMapLayerManager extends MapLayerManager { if (currentRadarTime.value != null) { final layerId = MapLayerIds.radar(currentRadarTime.value); await controller.setLayerVisibility(layerId, true); - TalkerManager.instance.info('Showing Layer "$layerId"'); } await _focus(); diff --git a/lib/app/map/_lib/managers/report.dart b/lib/app/map/_lib/managers/report.dart index 519387941..e7f1146a7 100644 --- a/lib/app/map/_lib/managers/report.dart +++ b/lib/app/map/_lib/managers/report.dart @@ -124,7 +124,6 @@ class ReportMapLayerManager extends MapLayerManager { final properties = GeojsonSourceProperties(data: data); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); if (!context.mounted) return; } @@ -157,8 +156,6 @@ class ReportMapLayerManager extends MapLayerManager { ); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); - - TalkerManager.instance.info('Added Layer "$layerId"'); } didSetup = true; @@ -179,7 +176,6 @@ class ReportMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, false); - TalkerManager.instance.info('Hiding Layer "$layerId"'); visible = false; } catch (e, s) { @@ -199,7 +195,6 @@ class ReportMapLayerManager extends MapLayerManager { initialReportId = null; } else { await controller.setLayerVisibility(layerId, true); - TalkerManager.instance.info('Showing Layer "$layerId"'); await _focus(); } @@ -217,10 +212,7 @@ class ReportMapLayerManager extends MapLayerManager { final sourceId = MapSourceIds.report(); await controller.removeLayer(layerId); - TalkerManager.instance.info('Removed Layer "$layerId"'); - await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); } catch (e, s) { TalkerManager.instance.error('ReportMapLayerManager.dispose', e, s); } @@ -261,7 +253,6 @@ class ReportMapLayerManager extends MapLayerManager { final properties = GeojsonSourceProperties(data: data); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); if (!context.mounted) return; } @@ -276,13 +267,11 @@ class ReportMapLayerManager extends MapLayerManager { ); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); - TalkerManager.instance.info('Added Layer "$layerId"'); } if (focus) await _focus(report); await controller.setLayerVisibility(MapLayerIds.report(), false); - TalkerManager.instance.info('Hiding Layer "$layerId"'); } catch (e, s) { TalkerManager.instance.error('ReportMapLayerManager._addReport', e, s); } @@ -300,18 +289,15 @@ class ReportMapLayerManager extends MapLayerManager { if (isLayerExists) { await controller.removeLayer(layerId); - TalkerManager.instance.info('Removed Layer "$layerId"'); } if (isSourceExists) { await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); } if (focus) await _focus(); await controller.setLayerVisibility(MapLayerIds.report(), true); - TalkerManager.instance.info('Showing Layer "$layerId"'); } catch (e, s) { TalkerManager.instance.error('ReportMapLayerManager._removeReport', e, s); } diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index 9b108b23f..ed91b9659 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -64,8 +64,6 @@ class TemperatureMapLayerManager extends MapLayerManager { await setup(); onTimeChanged?.call(time); - - TalkerManager.instance.info('Updated Temperature data time to "$time"'); } catch (e, s) { TalkerManager.instance.error('TemperatureMapLayerManager.setTemperatureTime', e, s); } finally { @@ -79,10 +77,8 @@ class TemperatureMapLayerManager extends MapLayerManager { if (location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); - TalkerManager.instance.info('Moved Camera to $location'); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); - TalkerManager.instance.info('Moved Camera to ${DpipMap.kTaiwanCenter}'); } } catch (e, s) { TalkerManager.instance.error('TemperatureMapLayerManager._focus', e, s); @@ -133,7 +129,6 @@ class TemperatureMapLayerManager extends MapLayerManager { final properties = GeojsonSourceProperties(data: data); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); if (!context.mounted) return; } @@ -176,7 +171,6 @@ class TemperatureMapLayerManager extends MapLayerManager { ); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); - TalkerManager.instance.info('Added Layer "$layerId"'); } if (isSourceExists && isLayerExists) return; @@ -195,7 +189,6 @@ class TemperatureMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, false); - TalkerManager.instance.info('Hiding Layer "$layerId"'); visible = false; } catch (e, s) { @@ -211,8 +204,6 @@ class TemperatureMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, true); - TalkerManager.instance.info('Showing Layer "$layerId"'); - await _focus(); visible = true; @@ -228,10 +219,7 @@ class TemperatureMapLayerManager extends MapLayerManager { final sourceId = MapSourceIds.temperature(currentTemperatureTime.value); await controller.removeLayer(layerId); - TalkerManager.instance.info('Removed Layer "$layerId"'); - await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); } catch (e, s) { TalkerManager.instance.error('TemperatureMapLayerManager.remove', e, s); } diff --git a/lib/app/map/_lib/managers/wind.dart b/lib/app/map/_lib/managers/wind.dart index 355a67534..3768693be 100644 --- a/lib/app/map/_lib/managers/wind.dart +++ b/lib/app/map/_lib/managers/wind.dart @@ -58,8 +58,6 @@ class WindMapLayerManager extends MapLayerManager { await setup(); onTimeChanged?.call(time); - - TalkerManager.instance.info('Updated Wind data time to "$time"'); } catch (e, s) { TalkerManager.instance.error('WindMapLayerManager.setWindTime', e, s); } finally { @@ -111,7 +109,6 @@ class WindMapLayerManager extends MapLayerManager { final properties = GeojsonSourceProperties(data: data); await controller.addSource(sourceId, properties); - TalkerManager.instance.info('Added Source "$sourceId"'); if (!context.mounted) return; } @@ -127,7 +124,6 @@ class WindMapLayerManager extends MapLayerManager { ); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); - TalkerManager.instance.info('Added Layer "$layerId"'); } if (isSourceExists && isLayerExists) return; @@ -146,7 +142,6 @@ class WindMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, false); - TalkerManager.instance.info('Hiding Layer "$layerId"'); visible = false; } catch (e, s) { @@ -162,7 +157,6 @@ class WindMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, true); - TalkerManager.instance.info('Showing Layer "$layerId"'); visible = true; } catch (e, s) { @@ -177,10 +171,7 @@ class WindMapLayerManager extends MapLayerManager { final sourceId = MapSourceIds.wind(currentWindTime.value); await controller.removeLayer(layerId); - TalkerManager.instance.info('Removed Layer "$layerId"'); - await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); } catch (e, s) { TalkerManager.instance.error('WindMapLayerManager.dispose', e, s); } diff --git a/lib/core/installation_tracker.dart b/lib/core/installation_tracker.dart index 0483126d4..f1c7d0381 100644 --- a/lib/core/installation_tracker.dart +++ b/lib/core/installation_tracker.dart @@ -5,7 +5,6 @@ import 'package:dpip/utils/log.dart'; final talker = TalkerManager.instance; Future initializeInstallationData() async { - talker.log('--- 開始檢查應用程式安裝狀態 ---'); final PackageInfo packageInfo = await PackageInfo.fromPlatform(); final int? installTime = packageInfo.installTime?.millisecondsSinceEpoch; @@ -20,7 +19,6 @@ Future initializeInstallationData() async { final int? storedInstallTime = Preference.installTime; if (storedInstallTime == null || storedVersion == null) { - talker.info('SharedPreferences 中未找到安裝時間或版本記錄。'); talker.info('這是 App 首次安裝。'); Preference.instance.clear(); @@ -49,5 +47,4 @@ Future initializeInstallationData() async { } else { talker.info('應用程式未重新安裝也未升級。使用現有安裝資料。'); } - talker.log('--- 應用程式安裝狀態檢查結束 ---'); } diff --git a/lib/core/service.dart b/lib/core/service.dart index 2658230d0..f025444ea 100644 --- a/lib/core/service.dart +++ b/lib/core/service.dart @@ -27,7 +27,6 @@ enum ServiceEvent { setAsForeground, setAsBackground, sendPosition, sendDebug, r Future initBackgroundService() async { final isAutoLocationEnabled = GlobalProviders.location.auto; if (!isAutoLocationEnabled) { - TalkerManager.instance.info('自動定位未啟用,不初始化背景服務'); return; } diff --git a/lib/main.dart b/lib/main.dart index 31ababf27..781d67001 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -37,21 +37,21 @@ void main() async { }; await Global.init(); - await DeviceInfo.init(); await Preference.init(); GlobalProviders.init(); - await AppLocalizations.load(); - initializeTimeZones(); - await initializeInstallationData(); + await Future.wait([ + DeviceInfo.init(), + AppLocalizations.load(), + initializeInstallationData(), + fcmInit(), + notifyInit(), + updateInfoToServer(), + ]); - await fcmInit(); - await notifyInit(); initBackgroundService(); - await updateInfoToServer(); - runApp( I18n( initialLocale: GlobalProviders.ui.locale, diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 2b393b535..d7c012ca8 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -249,7 +249,6 @@ class DpipMapState extends State { sourceId, GeojsonSourceProperties(data: GeoJsonBuilder().addFeature(location.toFeatureBuilder()).build()), ); - TalkerManager.instance.info('Added Source "$sourceId"'); } else { await controller.setGeoJsonSource(sourceId, GeoJsonBuilder().addFeature(location.toFeatureBuilder()).build()); TalkerManager.instance.info('Updated Source "$sourceId"'); @@ -267,7 +266,6 @@ class DpipMapState extends State { iconIgnorePlacement: true, ), ); - TalkerManager.instance.info('Added Layer "$layerId"'); } await controller.moveCamera(CameraUpdate.newLatLngZoom(location, 7)); @@ -301,7 +299,6 @@ class DpipMapState extends State { await spritePngFile.writeAsBytes(spritePngData.buffer.asUint8List()); final spritePngFile2x = File('$mapDir/sprites@2x.png'); await spritePngFile2x.writeAsBytes(spritePngData.buffer.asUint8List()); - TalkerManager.instance.info('Copied sprite.png to $spritePngFile'); // Copy sprite.json final spriteJsonData = await rootBundle.load('assets/sprites.json'); @@ -309,7 +306,6 @@ class DpipMapState extends State { await spriteJsonFile.writeAsBytes(spriteJsonData.buffer.asUint8List()); final spriteJsonFile2x = File('$mapDir/sprites@2x.json'); await spriteJsonFile2x.writeAsBytes(spriteJsonData.buffer.asUint8List()); - TalkerManager.instance.info('Copied sprite.json to $spriteJsonFile'); final spriteUri = '${spriteJsonFile.parent.uri}sprites'; TalkerManager.instance.info('Sprite is $spriteUri'); From 160a98ba0eb32064c383658ba26a6582387fcd97 Mon Sep 17 00:00:00 2001 From: Lingling Date: Thu, 7 Aug 2025 08:11:02 +0800 Subject: [PATCH 03/59] feat(donate): Enhance subscription UI with purchased state & loading (#343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(donate): Enhance subscription UI with purchased state & loading - 新增已訂閱商品視覺回饋 (右側顯示勾選圖標)。 - 更改商品選單點擊處理邏輯: - 點擊時,其他商品名稱、內容及價格文字變灰。 - 點擊中的商品價格位置顯示轉圈。 - 已訂閱商品點擊後禁用,避免重複操作。 * fix(monitor): time width * fix(donate): context * fix: context * fix(donate): crash * fix: Useless code * fix(monitor): alpha --- lib/app/map/_lib/managers/monitor.dart | 6 +- lib/app/settings/donate/page.dart | 143 +++++++++++++++++++------ lib/core/service.dart | 2 - 3 files changed, 116 insertions(+), 35 deletions(-) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 114848300..5a228f405 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -1038,15 +1038,15 @@ class _MonitorMapLayerSheetState extends State { } return Container( padding: const EdgeInsets.all(8), - width: 200, + width: 230, decoration: BoxDecoration( - color: Theme.of(context).colorScheme.surface.withAlpha((0.5 * 255).round()), + color: context.colors.surface.withValues(alpha: 0.5), borderRadius: BorderRadius.circular(16), ), child: Text( displayTime, textAlign: TextAlign.center, - style: TextStyle(color: Theme.of(context).colorScheme.onSurface, fontSize: 16), + style: TextStyle(color: context.colors.onSurface, fontSize: 16), ), ); }, diff --git a/lib/app/settings/donate/page.dart b/lib/app/settings/donate/page.dart index 05da71c94..f4aae7514 100644 --- a/lib/app/settings/donate/page.dart +++ b/lib/app/settings/donate/page.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:dpip/core/i18n.dart'; +import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/product_detail.dart'; import 'package:dpip/utils/functions.dart'; import 'package:dpip/widgets/list/list_section.dart'; @@ -10,6 +11,7 @@ import 'package:dpip/widgets/list/list_tile.dart'; import 'package:flutter/material.dart'; import 'package:i18n_extension/i18n_extension.dart'; import 'package:in_app_purchase/in_app_purchase.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:url_launcher/url_launcher.dart'; class SettingsDonatePage extends StatefulWidget { @@ -23,6 +25,9 @@ class SettingsDonatePage extends StatefulWidget { class _SettingsDonatePageState extends State { bool isPending = false; + String? processingProductId; + final Set purchasedProductIds = {}; + final _refreshIndicatorKey = GlobalKey(); Completer> products = Completer(); @@ -30,7 +35,10 @@ class _SettingsDonatePageState extends State { StreamSubscription>? subscription; Future refresh() async { - setState(() => products = Completer>()); + setState(() { + products = Completer>(); + purchasedProductIds.clear(); + }); final isAvailable = await InAppPurchase.instance.isAvailable(); @@ -64,6 +72,17 @@ class _SettingsDonatePageState extends State { } void onPurchaseUpdate(List purchaseDetailsList) { + bool hasAnyPending = purchaseDetailsList.any((detail) => detail.status == PurchaseStatus.pending); + + if (mounted) { + setState(() { + isPending = hasAnyPending; + if (!hasAnyPending) { + processingProductId = null; + } + }); + } + for (final purchaseDetails in purchaseDetailsList) { switch (purchaseDetails.status) { case PurchaseStatus.purchased: @@ -71,16 +90,26 @@ class _SettingsDonatePageState extends State { if (purchaseDetails.pendingCompletePurchase) { InAppPurchase.instance.completePurchase(purchaseDetails); } - setState(() => isPending = false); + if (mounted) { + setState(() { + purchasedProductIds.add(purchaseDetails.productID); + }); + } + break; case PurchaseStatus.error: case PurchaseStatus.canceled: if (purchaseDetails.pendingCompletePurchase) { InAppPurchase.instance.completePurchase(purchaseDetails); } - setState(() => isPending = false); + break; case PurchaseStatus.pending: + if (processingProductId == null) { + setState(() { + processingProductId = purchaseDetails.productID; + }); + } break; } } @@ -129,10 +158,9 @@ class _SettingsDonatePageState extends State { Padding( padding: const EdgeInsets.all(24), child: Text( - 'DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!'.i18n, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, // 調整顏色,使其顯眼 - ), + 'DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!' + .i18n, + style: context.textTheme.bodyMedium?.copyWith(color: context.colors.onSurfaceVariant), textAlign: TextAlign.justify, ), ), @@ -146,14 +174,44 @@ class _SettingsDonatePageState extends State { product.title.contains('(') ? product.title.substring(0, product.title.indexOf('(')).trim() : product.title, - subtitle: Text(product.description), - trailing: Text('{price}/月'.i18n.args({'price': product.price})), - onTap: () { - if (isPending) return; - setState(() => isPending = true); - final purchaseParam = PurchaseParam(productDetails: product); - InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam); - }, + titleStyle: + (processingProductId != null && processingProductId != product.id) + ? TextStyle(color: context.theme.disabledColor) + : const TextStyle(fontWeight: FontWeight.bold), + subtitle: Text( + product.description, + style: TextStyle( + color: + (processingProductId != null && processingProductId != product.id) + ? context.theme.disabledColor + : context.textTheme.bodySmall?.color, + ), + ), + trailing: + (purchasedProductIds.contains(product.id)) + ? Icon(Symbols.check_rounded, color: context.colors.primary) + : (processingProductId == product.id) + ? const CircularProgressIndicator.adaptive() + : Text( + '{price}/月'.i18n.args({'price': product.price}), + style: TextStyle( + color: + (processingProductId != null && processingProductId != product.id) + ? context.theme.disabledColor + : context.textTheme.bodyMedium?.color, + ), + ), + onTap: + isPending || purchasedProductIds.contains(product.id) + ? null + : () { + setState(() { + isPending = true; + processingProductId = product.id; + }); + final purchaseParam = PurchaseParam(productDetails: product); + InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam); + }, ), ], ), @@ -167,14 +225,42 @@ class _SettingsDonatePageState extends State { product.title.contains('(') ? product.title.substring(0, product.title.indexOf('(')).trim() : product.title, - subtitle: Text(product.description), - trailing: Text(product.price), - onTap: () { - if (isPending) return; - setState(() => isPending = true); - final purchaseParam = PurchaseParam(productDetails: product); - InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam); - }, + titleStyle: + (processingProductId != null && processingProductId != product.id) + ? TextStyle(color: context.theme.disabledColor) + : const TextStyle(fontWeight: FontWeight.bold), + subtitle: Text( + product.description, + style: TextStyle( + color: + (processingProductId != null && processingProductId != product.id) + ? context.theme.disabledColor + : context.textTheme.bodySmall?.color, + ), + ), + trailing: + (processingProductId == product.id) + ? const CircularProgressIndicator.adaptive() + : Text( + product.price, + style: TextStyle( + color: + (processingProductId != null && processingProductId != product.id) + ? context.theme.disabledColor + : context.textTheme.bodyMedium?.color, + ), + ), + onTap: + isPending + ? null + : () { + setState(() { + isPending = true; + processingProductId = product.id; + }); + final purchaseParam = PurchaseParam(productDetails: product); + InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam); + }, ), ], ), @@ -194,19 +280,16 @@ class _SettingsDonatePageState extends State { if (!available) { final storeName = Platform.isIOS ? 'App Store' : 'Google Play'; - ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('無法連線至 {store},請稍後再試。'.i18n.args({'store': storeName})))); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('無法連線至 {store},請稍後再試。'.i18n.args({'store': storeName}))), + ); return; } InAppPurchase.instance.restorePurchases(); ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('正在恢復您購買的訂閱'.i18n))); }, - child: Text( - '恢復購買'.i18n, - style: const TextStyle( - decoration: TextDecoration.underline, - ), - ), + child: Text('恢復購買'.i18n, style: const TextStyle(decoration: TextDecoration.underline)), ), const SizedBox(height: 4), InkWell( diff --git a/lib/core/service.dart b/lib/core/service.dart index f025444ea..034bc8f89 100644 --- a/lib/core/service.dart +++ b/lib/core/service.dart @@ -109,8 +109,6 @@ Future _initializeAndroidForegroundService() async { ledColor: Colors.white, channelShowBadge: false, locked: true, - playSound: false, - onlyAlertOnce: true, ) ], ); From 15816e6992054f88fa569a0aecd6c17383edf622 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 7 Aug 2025 13:00:19 +0800 Subject: [PATCH 04/59] feat: map symbol value (#348) Co-authored-by: Lingling --- lib/app/map/_lib/managers/precipitation.dart | 139 ++++++++++--------- lib/app/map/_lib/managers/temperature.dart | 69 +++++++-- lib/app/map/_lib/managers/tsunami.dart | 2 +- lib/app/map/_lib/managers/wind.dart | 48 ++++++- lib/app/map/page.dart | 2 +- lib/app_old/page/map/tsunami/tsunami.dart | 2 +- lib/app_old/page/map/weather/humidity.dart | 2 +- lib/app_old/page/map/weather/pressure.dart | 2 +- lib/utils/constants.dart | 14 +- lib/widgets/map/map.dart | 4 +- pubspec.lock | 54 ++----- 11 files changed, 209 insertions(+), 129 deletions(-) diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index 25c2d03c5..ed78af6d7 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -13,6 +13,7 @@ import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; +import 'package:dpip/utils/constants.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/extensions/string.dart'; @@ -65,7 +66,6 @@ class PrecipitationMapLayerManager extends MapLayerManager { await setup(); onTimeChanged?.call(time); - } catch (e, s) { TalkerManager.instance.error('PrecipitationMapLayerManager.setPrecipitationTime', e, s); } finally { @@ -110,6 +110,8 @@ class PrecipitationMapLayerManager extends MapLayerManager { Future setup() async { if (didSetup) return; + final colors = context.colors; + try { if (GlobalProviders.data.precipitation.isEmpty) { final precipitationList = (await ExpTech().getRainList()).reversed.toList(); @@ -151,75 +153,83 @@ class PrecipitationMapLayerManager extends MapLayerManager { } if (!isLayerExists) { - final properties = { + final Map properties = { for (final interval in precipitationIntervals) - interval: CircleLayerProperties( - circleRadius: [ - Expressions.interpolate, - ['linear'], - [Expressions.zoom], - 7, - 5, - 12, - 15, - ], - circleColor: [ - Expressions.interpolate, - ['linear'], - [Expressions.get, interval], - 0, - '#c2c2c2', - 10, - '#9cfcff', - 30, - '#059bff', - 50, - '#39ff03', - 100, - '#fffb03', - 200, - '#ff9500', - 300, - '#ff0000', - 500, - '#fb00ff', - 1000, - '#960099', - 2000, - '#000000', - ], - circleOpacity: [ - 'case', - [ - '<', + ...({ + interval: CircleLayerProperties( + circleColor: [ + Expressions.interpolate, + ['linear'], [Expressions.get, interval], 0, + '#c2c2c2', + 10, + '#9cfcff', + 30, + '#059bff', + 50, + '#39ff03', + 100, + '#fffb03', + 200, + '#ff9500', + 300, + '#ff0000', + 500, + '#fb00ff', + 1000, + '#960099', + 2000, + '#000000', ], - 0, - 0.7, - ], - circleStrokeWidth: 0.2, - circleStrokeColor: '#000000', - circleStrokeOpacity: [ - 'case', - [ - '<', - [Expressions.get, interval], - 0, + circleRadius: kCircleIconSize, + circleOpacity: 0.75, + circleStrokeColor: colors.outlineVariant.toHexStringRGB(), + circleStrokeWidth: 0.5, + circleStrokeOpacity: 0.75, + visibility: interval == currentPrecipitationInterval.value ? 'visible' : 'none', + ), + '$interval-label': SymbolLayerProperties( + textField: [ + Expressions.concat, + [Expressions.get, 'name'], + '\n', + [ + Expressions.concat, + [Expressions.get, interval], + 'mm', + ], ], - 0, - 0.7, - ], - visibility: interval == currentPrecipitationInterval.value ? 'visible' : 'none', - ), + textSize: 10, + textColor: colors.onSurfaceVariant.toHexStringRGB(), + textHaloColor: colors.outlineVariant.toHexStringRGB(), + textHaloWidth: 1, + textFont: ['Noto Sans TC Bold'], + textOffset: [0, 1], + textAnchor: 'top', + visibility: interval == currentPrecipitationInterval.value ? 'visible' : 'none', + ), + }), }; await Future.wait( - properties.entries.map( - (entry) => controller - .addLayer(sourceId, '$layerId-${entry.key}', entry.value, belowLayerId: BaseMapLayerIds.userLocation) - .then((value) {}), - ), + properties.entries.map((entry) { + final isValueLayer = entry.key.endsWith('-label'); + final interval = isValueLayer ? entry.key.substring(0, entry.key.length - 6) : entry.key; + + return controller.addLayer( + sourceId, + '$layerId-${entry.key}', + entry.value, + belowLayerId: BaseMapLayerIds.userLocation, + minzoom: isValueLayer ? 10 : null, + filter: [ + Expressions.largerOrEqual, + [Expressions.get, interval], + 0, + ], + ); + }), ); } @@ -237,9 +247,11 @@ class PrecipitationMapLayerManager extends MapLayerManager { final layerId = MapLayerIds.precipitation(currentPrecipitationTime.value); final hideLayerId = '$layerId-${currentPrecipitationInterval.value}'; + final hideValueLayerId = '$layerId-${currentPrecipitationInterval.value}-label'; try { await controller.setLayerVisibility(hideLayerId, false); + await controller.setLayerVisibility(hideValueLayerId, false); visible = false; } catch (e, s) { @@ -253,9 +265,11 @@ class PrecipitationMapLayerManager extends MapLayerManager { final layerId = MapLayerIds.precipitation(currentPrecipitationTime.value); final showLayerId = '$layerId-${currentPrecipitationInterval.value}'; + final showValueLayerId = '$layerId-${currentPrecipitationInterval.value}-label'; try { await controller.setLayerVisibility(showLayerId, true); + await controller.setLayerVisibility(showValueLayerId, true); await _focus(); @@ -273,6 +287,7 @@ class PrecipitationMapLayerManager extends MapLayerManager { for (final interval in precipitationIntervals) { await controller.removeLayer('$layerId-$interval'); + await controller.removeLayer('$layerId-$interval-label'); } await controller.removeSource(sourceId); diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index ed91b9659..1709da6c6 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -14,6 +14,7 @@ import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; import 'package:dpip/models/settings/ui.dart'; +import 'package:dpip/utils/constants.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/int.dart'; import 'package:dpip/utils/extensions/latlng.dart'; @@ -89,6 +90,8 @@ class TemperatureMapLayerManager extends MapLayerManager { Future setup() async { if (didSetup) return; + final colors = context.colors; + try { if (GlobalProviders.data.temperature.isEmpty) { final temperatureList = (await ExpTech().getWeatherList()).reversed.toList(); @@ -134,16 +137,8 @@ class TemperatureMapLayerManager extends MapLayerManager { } if (!isLayerExists) { + // circles final properties = CircleLayerProperties( - circleRadius: [ - Expressions.interpolate, - ['linear'], - [Expressions.zoom], - 7, - 5, - 12, - 15, - ], circleColor: [ Expressions.interpolate, ['linear'], @@ -163,14 +158,57 @@ class TemperatureMapLayerManager extends MapLayerManager { 40, '#8B0000', ], - circleOpacity: 0.7, - circleStrokeWidth: 0.2, - circleStrokeColor: '#000000', - circleStrokeOpacity: 0.7, + circleRadius: kCircleIconSize, + circleOpacity: 0.75, + circleStrokeColor: colors.outlineVariant.toHexStringRGB(), + circleStrokeWidth: 0.5, + circleStrokeOpacity: 0.75, + visibility: visible ? 'visible' : 'none', + ); + + // labels + final temperature = [ + Expressions.caseExpression, + GlobalProviders.ui.useFahrenheit, + [ + Expressions.round, + [ + Expressions.plus, + [ + Expressions.multiply, + [Expressions.get, 'temperature'], + 1.8, + ], + 32, + ], + ], + [Expressions.get, 'temperature'], + ]; + final properties2 = SymbolLayerProperties( + textField: [ + Expressions.concat, + [Expressions.get, 'name'], + '\n', + [Expressions.concat, temperature, if (GlobalProviders.ui.useFahrenheit) '℉' else '℃'], + ], + textSize: 10, + textColor: colors.onSurfaceVariant.toHexStringRGB(), + textHaloColor: colors.outlineVariant.toHexStringRGB(), + textHaloWidth: 1, + textFont: ['Noto Sans TC Bold'], + textOffset: [0, 1], + textAnchor: 'top', visibility: visible ? 'visible' : 'none', ); await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); + await controller.addLayer( + sourceId, + '$layerId-label', + properties2, + belowLayerId: BaseMapLayerIds.userLocation, + minzoom: 10, + ); } if (isSourceExists && isLayerExists) return; @@ -189,6 +227,7 @@ class TemperatureMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, false); + await controller.setLayerVisibility('$layerId-label', false); visible = false; } catch (e, s) { @@ -204,6 +243,8 @@ class TemperatureMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, true); + await controller.setLayerVisibility('$layerId-label', true); + await _focus(); visible = true; @@ -219,6 +260,8 @@ class TemperatureMapLayerManager extends MapLayerManager { final sourceId = MapSourceIds.temperature(currentTemperatureTime.value); await controller.removeLayer(layerId); + await controller.removeLayer('$layerId-label'); + await controller.removeSource(sourceId); } catch (e, s) { TalkerManager.instance.error('TemperatureMapLayerManager.remove', e, s); diff --git a/lib/app/map/_lib/managers/tsunami.dart b/lib/app/map/_lib/managers/tsunami.dart index 3156308f6..ed006ce4d 100644 --- a/lib/app/map/_lib/managers/tsunami.dart +++ b/lib/app/map/_lib/managers/tsunami.dart @@ -272,7 +272,7 @@ class _TsunamiMapLayerSheetState extends State { textColor: '#ffffff', textHaloColor: '#000000', textHaloWidth: 1, - textFont: ['Noto Sans Regular'], + textFont: ['Noto Sans TC Bold'], textOffset: [ Expressions.literal, [0, 3.5], diff --git a/lib/app/map/_lib/managers/wind.dart b/lib/app/map/_lib/managers/wind.dart index 3768693be..11160b327 100644 --- a/lib/app/map/_lib/managers/wind.dart +++ b/lib/app/map/_lib/managers/wind.dart @@ -13,7 +13,6 @@ import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/data.dart'; -import 'package:dpip/utils/constants.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/geojson.dart'; @@ -69,6 +68,8 @@ class WindMapLayerManager extends MapLayerManager { Future setup() async { if (didSetup) return; + final colors = context.colors; + try { if (GlobalProviders.data.wind.isEmpty) { final windList = (await ExpTech().getWeatherList()).reversed.toList(); @@ -114,16 +115,55 @@ class WindMapLayerManager extends MapLayerManager { } if (!isLayerExists) { + // arrows final properties = SymbolLayerProperties( iconImage: [Expressions.get, 'icon'], - iconSize: kSymbolIconSize, + iconSize: [ + Expressions.interpolate, + ['linear'], + [Expressions.zoom], + 5, + 0.1, + 15, + 0.8, + ], iconRotate: [Expressions.get, 'wind_direction'], + iconOpacity: 0.75, iconAllowOverlap: true, iconIgnorePlacement: true, visibility: visible ? 'visible' : 'none', ); + // labels + final properties2 = SymbolLayerProperties( + textField: [ + Expressions.concat, + [Expressions.get, 'name'], + '\n', + [ + Expressions.concat, + [Expressions.get, 'wind_speed'], + 'm/s', + ], + ], + textSize: 10, + textColor: colors.onSurfaceVariant.toHexStringRGB(), + textHaloColor: colors.outlineVariant.toHexStringRGB(), + textHaloWidth: 1, + textFont: ['Noto Sans TC Bold'], + textOffset: [0, 2], + textAnchor: 'top', + visibility: visible ? 'visible' : 'none', + ); + await controller.addLayer(sourceId, layerId, properties, belowLayerId: BaseMapLayerIds.userLocation); + await controller.addLayer( + sourceId, + '$layerId-label', + properties2, + belowLayerId: BaseMapLayerIds.userLocation, + minzoom: 10, + ); } if (isSourceExists && isLayerExists) return; @@ -142,6 +182,7 @@ class WindMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, false); + await controller.setLayerVisibility('$layerId-label', false); visible = false; } catch (e, s) { @@ -157,6 +198,7 @@ class WindMapLayerManager extends MapLayerManager { try { await controller.setLayerVisibility(layerId, true); + await controller.setLayerVisibility('$layerId-label', true); visible = true; } catch (e, s) { @@ -171,6 +213,8 @@ class WindMapLayerManager extends MapLayerManager { final sourceId = MapSourceIds.wind(currentWindTime.value); await controller.removeLayer(layerId); + await controller.removeLayer('$layerId-label'); + await controller.removeSource(sourceId); } catch (e, s) { TalkerManager.instance.error('WindMapLayerManager.dispose', e, s); diff --git a/lib/app/map/page.dart b/lib/app/map/page.dart index f051cd207..a20936a7c 100644 --- a/lib/app/map/page.dart +++ b/lib/app/map/page.dart @@ -299,7 +299,7 @@ class _MapPageState extends State with TickerProviderStateMixin { return Scaffold( body: Stack( children: [ - DpipMap(onMapCreated: onMapCreated, tiltGesturesEnabled: true), + DpipMap(onMapCreated: onMapCreated), PositionedLayerButton( activeLayers: _activeLayers, currentBaseMap: _baseMapType, diff --git a/lib/app_old/page/map/tsunami/tsunami.dart b/lib/app_old/page/map/tsunami/tsunami.dart index fc84907fb..e90d87692 100644 --- a/lib/app_old/page/map/tsunami/tsunami.dart +++ b/lib/app_old/page/map/tsunami/tsunami.dart @@ -185,7 +185,7 @@ class _TsunamiMapState extends State { textColor: '#ffffff', textHaloColor: '#000000', textHaloWidth: 1, - textFont: ['Noto Sans Regular'], + textFont: ['Noto Sans TC Bold'], textOffset: [ Expressions.literal, [0, 3.5], diff --git a/lib/app_old/page/map/weather/humidity.dart b/lib/app_old/page/map/weather/humidity.dart index 049f1347f..a3094c25f 100644 --- a/lib/app_old/page/map/weather/humidity.dart +++ b/lib/app_old/page/map/weather/humidity.dart @@ -219,7 +219,7 @@ class _HumidityMapState extends State { textColor: '#ffffff', textHaloColor: '#000000', textHaloWidth: 1, - textFont: ['Noto Sans Regular'], + textFont: ['Noto Sans TC Bold'], textOffset: [ Expressions.literal, [0, 2], diff --git a/lib/app_old/page/map/weather/pressure.dart b/lib/app_old/page/map/weather/pressure.dart index f148181a2..fb37f9d49 100644 --- a/lib/app_old/page/map/weather/pressure.dart +++ b/lib/app_old/page/map/weather/pressure.dart @@ -221,7 +221,7 @@ class _PressureMapState extends State { textColor: '#ffffff', textHaloColor: '#000000', textHaloWidth: 1, - textFont: ['Noto Sans Regular'], + textFont: ['Noto Sans TC Bold'], textOffset: [ Expressions.literal, [0, 2], diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 689f497bc..5fd3d6569 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -16,6 +16,16 @@ const kSymbolIconSize = [ [Expressions.zoom], 5, 0.1, - 10, - 0.6, + 15, + 1, +]; + +const kCircleIconSize = [ + Expressions.interpolate, + ['linear'], + [Expressions.zoom], + 5, + 2, + 15, + 12, ]; diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index d7c012ca8..76b4ff074 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -128,7 +128,7 @@ class DpipMapState extends State { }, }, 'sprite': spritePath, - 'glyphs': 'https://glyphs.geolonia.com/{fontstack}/{range}.pbf', + 'glyphs': 'https://cdn.jsdelivr.net/gh/exptechtw/map-glyph/{fontstack}/{range}.pbf', 'layers': [ { 'id': 'background', @@ -328,7 +328,7 @@ class DpipMapState extends State { final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom); return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(3, 9), + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12), trackCameraPosition: true, initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), styleString: styleAbsoluteFilePath!, diff --git a/pubspec.lock b/pubspec.lock index c95179260..d97c17bc5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -507,38 +507,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.3" - flutter_local_notifications: - dependency: "direct main" - description: - name: flutter_local_notifications - sha256: "33b3e0269ae9d51669957a923f2376bee96299b09915d856395af8c4238aebfa" - url: "https://pub.dev" - source: hosted - version: "19.1.0" - flutter_local_notifications_linux: - dependency: transitive - description: - name: flutter_local_notifications_linux - sha256: e3c277b2daab8e36ac5a6820536668d07e83851aeeb79c446e525a70710770a5 - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_local_notifications_platform_interface: - dependency: transitive - description: - name: flutter_local_notifications_platform_interface - sha256: "2569b973fc9d1f63a37410a9f7c1c552081226c597190cb359ef5d5762d1631c" - url: "https://pub.dev" - source: hosted - version: "9.0.0" - flutter_local_notifications_windows: - dependency: transitive - description: - name: flutter_local_notifications_windows - sha256: f8fc0652a601f83419d623c85723a3e82ad81f92b33eaa9bcc21ea1b94773e6e - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -838,26 +806,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.1" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lint: dependency: "direct dev" description: @@ -1435,10 +1403,10 @@ packages: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.4" timezone: dependency: "direct main" description: @@ -1571,10 +1539,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.1.4" vm_service: dependency: transitive description: @@ -1664,5 +1632,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.8.0-0 <4.0.0" + dart: ">=3.7.0 <4.0.0" flutter: ">=3.31.0-0.0.pre" From 9870447f497fc63b785c0e7415efc2eec8865e2a Mon Sep 17 00:00:00 2001 From: Lingling Date: Fri, 8 Aug 2025 16:00:13 +0800 Subject: [PATCH 05/59] fix: timeline line clipping and widge (#349) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(_widgets/history_timeline) 事件時間順序 時間軸線斷掉 * docs: changelog * docs: changelog --- CHANGELOG.md | 19 +++++++++++++++++-- .../home/_widgets/history_timeline_item.dart | 3 +-- lib/app/home/page.dart | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 660f89ca5..14cfce922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ ## [未發布] +### 新增 + +- 氣象類別圖例 +- 地圖頁面-氣象站顯示參數 + +### 更改 + +- 贊助頁面邏輯。 +- 事件時間點順序和時間軸線。 + +### 修正 + +- 強震監視器顯示時間 +- 雷達迴波 被 世界圖層 覆蓋 + ## [3.0.014] - 2025-07-23 ### 新增 @@ -175,9 +190,9 @@ ## [3.0.001] - 2025-05-01 -[未發布]: https://github.com/exptechtw/dpip/compare/v3.0.014...HEAD +[未發布]: https://github.com/exptechtw/dpip/compare/v3.0.0...HEAD [3.0.014]: https://github.com/exptechtw/dpip/compare/v3.0.013(2)...v3.0.014 -[3.0.013]: https://github.com/exptechtw/dpip/compare/v3.0.012...v3.0.013(2) +[3.0.013]: https://github.com/exptechtw/dpip/compare/v3.0.012(1)...v3.0.013(2) [3.0.012]: https://github.com/exptechtw/dpip/compare/v3.0.011...v3.0.012(1) [3.0.011]: https://github.com/exptechtw/dpip/compare/v3.0.010...v3.0.011 [3.0.010]: https://github.com/exptechtw/dpip/compare/v3.0.009...v3.0.010 diff --git a/lib/app/home/_widgets/history_timeline_item.dart b/lib/app/home/_widgets/history_timeline_item.dart index 377c44ab9..00bdad64a 100644 --- a/lib/app/home/_widgets/history_timeline_item.dart +++ b/lib/app/home/_widgets/history_timeline_item.dart @@ -39,8 +39,7 @@ class HistoryTimelineItem extends StatelessWidget { children: [ Positioned( top: first ? 42 : 0, - bottom: last ? null : 0, - height: last ? 42 : null, + bottom: last ? 0 : 0, width: 1, child: Container(color: context.colors.outlineVariant), ), diff --git a/lib/app/home/page.dart b/lib/app/home/page.dart index 402982f1e..c0081ff6f 100644 --- a/lib/app/home/page.dart +++ b/lib/app/home/page.dart @@ -182,7 +182,7 @@ class _HomePageState extends State { children: grouped.entries.sorted((a, b) => b.key.compareTo(a.key)).mapIndexed((index, entry) { final date = entry.key; - final historyGroup = entry.value; + final historyGroup = entry.value.sorted((a, b) => b.time.send.compareTo(a.time.send)); return Column( children: [ DateTimelineItem(date, first: index == 0), From 3a17fc97b298ccd8ee43f024a356a86c6f05e580 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Fri, 8 Aug 2025 22:39:06 +0800 Subject: [PATCH 06/59] refactor: background service (#350) * refactor: background service * fix: service is auto starting after configure * fix: missing function * fix(BackgroundLocationService): platform guard * fix: attemp to fix DidNotStartInTimeException * refactor: simplify logics for location settings * fix: attemp to fix not supported issue * fix: ios service initialization * fix: log stack trace * fix: geojson * fix: geojson type * fix: use double toString * style: sort imports * chore: shorter class name * fix: set preference --- android/app/src/main/AndroidManifest.xml | 4 +- lib/api/exptech.dart | 8 +- lib/app/home/_widgets/eew_card.dart | 59 +- lib/app/home/_widgets/thunderstorm_card.dart | 2 +- lib/app/home/page.dart | 6 +- lib/app/map/_lib/managers/monitor.dart | 660 +++++++++++------- lib/app/map/_lib/managers/precipitation.dart | 4 +- lib/app/map/_lib/managers/radar.dart | 4 +- lib/app/map/_lib/managers/temperature.dart | 4 +- lib/app/settings/location/page.dart | 576 ++++----------- .../settings/location/select/[city]/page.dart | 64 +- lib/app/settings/notify/page.dart | 5 +- lib/app_old/page/map/radar/radar.dart | 40 +- lib/core/ios_get_location.dart | 27 +- lib/core/location.dart | 89 --- lib/core/notify.dart | 18 +- lib/core/preference.dart | 8 + lib/core/service.dart | 618 +++++++++++----- lib/core/update.dart | 20 +- lib/global.dart | 27 +- lib/main.dart | 2 +- lib/models/settings/location.dart | 205 ++++-- lib/models/settings/map.dart | 12 + lib/route/event_viewer/intensity.dart | 60 +- lib/route/event_viewer/thunderstorm.dart | 82 +-- lib/utils/extensions/datetime.dart | 11 +- lib/utils/extensions/int.dart | 2 +- lib/utils/extensions/latlng.dart | 19 +- lib/utils/extensions/preference.dart | 41 +- lib/utils/extensions/string.dart | 2 +- lib/utils/geojson.dart | 2 +- lib/utils/location_to_code.dart | 92 --- lib/utils/map_utils.dart | 74 +- lib/widgets/map/map.dart | 8 +- pubspec.lock | 8 + pubspec.yaml | 1 + 36 files changed, 1470 insertions(+), 1394 deletions(-) delete mode 100644 lib/core/location.dart delete mode 100644 lib/utils/location_to_code.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 0ed01c6a7..fc7f27a2e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + @@ -8,6 +7,7 @@ + diff --git a/lib/api/exptech.dart b/lib/api/exptech.dart index 60c467718..6efe01dd5 100644 --- a/lib/api/exptech.dart +++ b/lib/api/exptech.dart @@ -1,6 +1,9 @@ import 'dart:convert'; import 'dart:io'; +import 'package:http/http.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/api/model/announcement.dart'; import 'package:dpip/api/model/changelog/changelog.dart'; import 'package:dpip/api/model/crowdin/localization_progress.dart'; @@ -24,7 +27,6 @@ import 'package:dpip/core/preference.dart'; import 'package:dpip/models/settings/notify.dart'; import 'package:dpip/utils/extensions/response.dart'; import 'package:dpip/utils/extensions/string.dart'; -import 'package:http/http.dart'; class ExpTech { String? apikey; @@ -486,8 +488,8 @@ class ExpTech { } /// 回傳所在地 - Future updateDeviceLocation({required String token, required String lat, required String lng}) async { - final requestUrl = Route.location(token: token, lat: lat, lng: lng); + Future updateDeviceLocation({required String token, required LatLng coordinates}) async { + final requestUrl = Route.location(token: token, lat: '${coordinates.latitude}', lng: '${coordinates.longitude}'); final res = await get(requestUrl); diff --git a/lib/app/home/_widgets/eew_card.dart b/lib/app/home/_widgets/eew_card.dart index 6c7f8cb2f..7a300a8c2 100644 --- a/lib/app/home/_widgets/eew_card.dart +++ b/lib/app/home/_widgets/eew_card.dart @@ -28,14 +28,16 @@ class EewCard extends StatefulWidget { } class _EewCardState extends State { - late int localIntensity; - late int localArrivalTime; + int? localIntensity; + int? localArrivalTime; int countdown = 0; Timer? _timer; void _updateCountdown() { - final remainingSeconds = ((localArrivalTime - GlobalProviders.data.currentTime) / 1000).floor(); + if (localArrivalTime == null) return; + + final remainingSeconds = ((localArrivalTime! - GlobalProviders.data.currentTime) / 1000).floor(); if (remainingSeconds < -1) return; setState(() => countdown = remainingSeconds); @@ -45,17 +47,19 @@ class _EewCardState extends State { void initState() { super.initState(); - final info = eewLocationInfo( - widget.data.info.magnitude, - widget.data.info.depth, - widget.data.info.latitude, - widget.data.info.longitude, - GlobalProviders.location.coordinateNotifier.value.latitude, - GlobalProviders.location.coordinateNotifier.value.longitude, - ); + if (GlobalProviders.location.coordinates != null) { + final info = eewLocationInfo( + widget.data.info.magnitude, + widget.data.info.depth, + widget.data.info.latitude, + widget.data.info.longitude, + GlobalProviders.location.coordinates!.latitude, + GlobalProviders.location.coordinates!.longitude, + ); - localIntensity = intensityFloatToInt(info.i); - localArrivalTime = (widget.data.info.time + sWaveTimeByDistance(widget.data.info.depth, info.dist)).floor(); + localIntensity = intensityFloatToInt(info.i); + localArrivalTime = (widget.data.info.time + sWaveTimeByDistance(widget.data.info.depth, info.dist)).floor(); + } _updateCountdown(); _timer = Timer.periodic(const Duration(seconds: 1), (_) => _updateCountdown()); @@ -118,14 +122,23 @@ class _EewCardState extends State { padding: const EdgeInsets.only(top: 8), child: StyledText( text: - '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' - .i18n - .args({ - 'time': widget.data.info.time.toSimpleDateTimeString(context), - 'location': widget.data.info.location, - 'magnitude': widget.data.info.magnitude.toStringAsFixed(1), - 'intensity': localIntensity.asIntensityLabel, - }), + localIntensity != null + ? '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' + .i18n + .args({ + 'time': widget.data.info.time.toSimpleDateTimeString(context), + 'location': widget.data.info.location, + 'magnitude': widget.data.info.magnitude.toStringAsFixed(1), + 'intensity': localIntensity!.asIntensityLabel, + }) + : '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。' + .i18n + .args({ + 'time': widget.data.info.time.toSimpleDateTimeString(context), + 'location': widget.data.info.location, + 'magnitude': widget.data.info.magnitude.toStringAsFixed(1), + 'depth': widget.data.info.depth.toStringAsFixed(1), + }), style: context.textTheme.bodyLarge!.copyWith(color: context.colors.onErrorContainer), tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, ), @@ -133,7 +146,7 @@ class _EewCardState extends State { Selector( selector: (context, model) => model.code, builder: (context, code, child) { - if (code == null) { + if (code == null || localIntensity == null) { return const SizedBox.shrink(); } @@ -160,7 +173,7 @@ class _EewCardState extends State { Padding( padding: const EdgeInsets.only(top: 12, bottom: 8), child: Text( - localIntensity.asIntensityLabel, + localIntensity!.asIntensityLabel, style: context.textTheme.displayMedium!.copyWith( fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, diff --git a/lib/app/home/_widgets/thunderstorm_card.dart b/lib/app/home/_widgets/thunderstorm_card.dart index b705d7367..d9f2e34cc 100644 --- a/lib/app/home/_widgets/thunderstorm_card.dart +++ b/lib/app/home/_widgets/thunderstorm_card.dart @@ -74,7 +74,7 @@ class ThunderstormCard extends StatelessWidget { padding: const EdgeInsets.only(top: 8), child: StyledText( text: '您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。'.i18n.args({ - 'time': history.time.expiresAt.toSimpleDateTimeString(context), + 'time': history.time.expiresAt.toSimpleDateTimeString(), }), style: context.textTheme.bodyLarge!.copyWith(color: context.theme.extendedColors.onBlueContainer), tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, diff --git a/lib/app/home/page.dart b/lib/app/home/page.dart index c0081ff6f..feca4f0e6 100644 --- a/lib/app/home/page.dart +++ b/lib/app/home/page.dart @@ -63,7 +63,7 @@ class _HomePageState extends State { if (_isLoading) return; final auto = GlobalProviders.location.auto; - final code = GlobalProviders.location.codeNotifier.value; + final code = GlobalProviders.location.code; final location = Global.location[code]; if (code == null || location == null) { @@ -123,7 +123,7 @@ class _HomePageState extends State { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) => _checkVersion()); - GlobalProviders.location.codeNotifier.addListener(_refresh); + GlobalProviders.location.$code.addListener(_refresh); _refresh(); } @@ -218,7 +218,7 @@ class _HomePageState extends State { @override void dispose() { - GlobalProviders.location.codeNotifier.removeListener(_refresh); + GlobalProviders.location.$code.removeListener(_refresh); super.dispose(); } } diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 5a228f405..8e4c6eb5a 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -110,9 +110,9 @@ class MonitorMapLayerManager extends MapLayerManager { Future _focus() async { try { - final location = GlobalProviders.location.coordinateNotifier.value; + final location = GlobalProviders.location.coordinates; - if (location.isValid) { + if (location != null && location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); @@ -704,231 +704,415 @@ class _MonitorMapLayerSheetState extends State { } else { final data = activeEew.first; - final info = eewLocationInfo( - data.info.magnitude, - data.info.depth, - data.info.latitude, - data.info.longitude, - GlobalProviders.location.coordinateNotifier.value.latitude, - GlobalProviders.location.coordinateNotifier.value.longitude, - ); - - localIntensity = intensityFloatToInt(info.i); - localArrivalTime = (data.info.time + sWaveTimeByDistance(data.info.depth, info.dist)).floor(); - - _timer = Timer.periodic(const Duration(seconds: 1), (_) => _updateCountdown()); - - return InkWell( - onTap: () => _toggleCollapse(), - child: Padding( - padding: const EdgeInsets.all(12), - child: - _isCollapsed - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, + if (GlobalProviders.location.coordinates == null) { + if (_isCollapsed) { + child = Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + spacing: 8, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - spacing: 8, - children: [ - Container( - decoration: BoxDecoration( - color: context.colors.error, - borderRadius: BorderRadius.circular(8), - ), - padding: - activeEew.length > 1 - ? const EdgeInsets.fromLTRB(8, 6, 12, 6) - : const EdgeInsets.fromLTRB(8, 6, 8, 6), - child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 4, + Container( + decoration: BoxDecoration( + color: context.colors.error, + borderRadius: BorderRadius.circular(8), + ), + padding: + activeEew.length > 1 + ? const EdgeInsets.fromLTRB(8, 6, 12, 6) + : const EdgeInsets.fromLTRB(8, 6, 8, 6), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + Icon( + Symbols.crisis_alert_rounded, + color: context.colors.onError, + weight: 700, + size: 16, + ), + if (activeEew.length > 1) + RichText( + text: TextSpan( children: [ - Icon( - Symbols.crisis_alert_rounded, - color: context.colors.onError, - weight: 700, - size: 16, + TextSpan( + text: '1', + style: context.textTheme.labelMedium!.copyWith( + color: context.colors.onError, + fontWeight: FontWeight.bold, + ), ), - if (activeEew.length > 1) - RichText( - text: TextSpan( - children: [ - TextSpan( - text: '1', - style: context.textTheme.labelMedium!.copyWith( - color: context.colors.onError, - fontWeight: FontWeight.bold, - ), - ), - TextSpan( - text: '/${activeEew.length}', - style: context.textTheme.labelMedium!.copyWith( - color: context.colors.onError.withValues(alpha: 0.6), - fontWeight: FontWeight.bold, - ), - ), - ], - ), + TextSpan( + text: '/${activeEew.length}', + style: context.textTheme.labelMedium!.copyWith( + color: context.colors.onError.withValues(alpha: 0.6), + fontWeight: FontWeight.bold, ), + ), ], ), ), - Text( - '#${data.serial} ${data.info.time.toSimpleDateTimeString(context)} ${data.info.location}', - style: context.textTheme.bodyMedium!.copyWith( - fontWeight: FontWeight.bold, - color: context.colors.onErrorContainer, - ), - ), - ], - ), - Icon( - Symbols.expand_less_rounded, - color: context.colors.onErrorContainer, - size: 24, - ), - ], + ], + ), + ), + Text( + '#${data.serial} ${data.info.time.toSimpleDateTimeString(context)} ${data.info.location}', + style: context.textTheme.bodyMedium!.copyWith( + fontWeight: FontWeight.bold, + color: context.colors.onErrorContainer, + ), ), - Padding( - padding: const EdgeInsets.only(top: 8), + ], + ), + Icon(Symbols.expand_less_rounded, color: context.colors.onErrorContainer, size: 24), + ], + ), + Padding( + padding: const EdgeInsets.only(top: 8), + child: StyledText( + text: '規模 M{magnitude},深度{depth}公里'.i18n.args({ + 'magnitude': data.info.magnitude.toStringAsFixed(1), + 'depth': data.info.depth.toStringAsFixed(1), + }), + style: context.textTheme.bodyMedium!.copyWith(color: context.colors.onErrorContainer), + tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, + ), + ), + ], + ); + } else { + child = Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + spacing: 8, + children: [ + Container( + decoration: BoxDecoration( + color: context.colors.error, + borderRadius: BorderRadius.circular(8), + ), + padding: const EdgeInsets.fromLTRB(8, 6, 12, 6), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.min, + spacing: 4, children: [ - StyledText( - text: '規模 M{magnitude},所在地預估{intensity}'.i18n.args({ - 'time': data.info.time.toSimpleDateTimeString(context), - 'location': data.info.location, - 'magnitude': data.info.magnitude.toStringAsFixed(1), - 'intensity': localIntensity.asIntensityLabel, - }), - style: context.textTheme.bodyMedium!.copyWith( - color: context.colors.onErrorContainer, - ), - tags: { - 'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold)), - }, + Icon( + Symbols.crisis_alert_rounded, + color: context.colors.onError, + weight: 700, + size: 22, ), - Text( - countdown >= 0 - ? '{countdown}秒後抵達'.i18n.args({'countdown': countdown}) - : '已抵達'.i18n, - style: context.textTheme.bodyMedium!.copyWith( + '緊急地震速報'.i18n, + style: context.textTheme.labelLarge!.copyWith( + color: context.colors.onError, fontWeight: FontWeight.bold, - color: context.colors.onErrorContainer, - height: 1, - leadingDistribution: TextLeadingDistribution.even, ), ), ], ), ), + Text( + '第 {serial} 報'.i18n.args({'serial': activeEew.first.serial}), + style: context.textTheme.bodyLarge!.copyWith( + color: context.colors.onErrorContainer, + ), + ), ], - ) - : Column( - mainAxisSize: MainAxisSize.min, + ), + Icon(Symbols.expand_more_rounded, color: context.colors.onErrorContainer, size: 24), + ], + ), + Padding( + padding: const EdgeInsets.only(top: 8), + child: StyledText( + text: + '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。' + .i18n + .args({ + 'time': data.info.time.toSimpleDateTimeString(context), + 'location': data.info.location, + 'magnitude': data.info.magnitude.toStringAsFixed(1), + 'depth': data.info.depth.toStringAsFixed(1), + }), + style: context.textTheme.bodyLarge!.copyWith(color: context.colors.onErrorContainer), + tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, + ), + ), + ], + ); + } + } else { + final info = eewLocationInfo( + data.info.magnitude, + data.info.depth, + data.info.latitude, + data.info.longitude, + GlobalProviders.location.coordinates!.latitude, + GlobalProviders.location.coordinates!.longitude, + ); + + localIntensity = intensityFloatToInt(info.i); + localArrivalTime = (data.info.time + sWaveTimeByDistance(data.info.depth, info.dist)).floor(); + + _timer ??= Timer.periodic(const Duration(seconds: 1), (_) => _updateCountdown()); + + if (_isCollapsed) { + child = Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + spacing: 8, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - spacing: 8, - children: [ - Container( - decoration: BoxDecoration( - color: context.colors.error, - borderRadius: BorderRadius.circular(8), - ), - padding: const EdgeInsets.fromLTRB(8, 6, 12, 6), - child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 4, + Container( + decoration: BoxDecoration( + color: context.colors.error, + borderRadius: BorderRadius.circular(8), + ), + padding: + activeEew.length > 1 + ? const EdgeInsets.fromLTRB(8, 6, 12, 6) + : const EdgeInsets.fromLTRB(8, 6, 8, 6), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + Icon( + Symbols.crisis_alert_rounded, + color: context.colors.onError, + weight: 700, + size: 16, + ), + if (activeEew.length > 1) + RichText( + text: TextSpan( children: [ - Icon( - Symbols.crisis_alert_rounded, - color: context.colors.onError, - weight: 700, - size: 22, - ), - Text( - '緊急地震速報'.i18n, - style: context.textTheme.labelLarge!.copyWith( + TextSpan( + text: '1', + style: context.textTheme.labelMedium!.copyWith( color: context.colors.onError, fontWeight: FontWeight.bold, ), ), + TextSpan( + text: '/${activeEew.length}', + style: context.textTheme.labelMedium!.copyWith( + color: context.colors.onError.withValues(alpha: 0.6), + fontWeight: FontWeight.bold, + ), + ), ], ), ), - Text( - '第 {serial} 報'.i18n.args({'serial': activeEew.first.serial}), - style: context.textTheme.bodyLarge!.copyWith( - color: context.colors.onErrorContainer, - ), + ], + ), + ), + Text( + '#${data.serial} ${data.info.time.toSimpleDateTimeString(context)} ${data.info.location}', + style: context.textTheme.bodyMedium!.copyWith( + fontWeight: FontWeight.bold, + color: context.colors.onErrorContainer, + ), + ), + ], + ), + Icon(Symbols.expand_less_rounded, color: context.colors.onErrorContainer, size: 24), + ], + ), + Padding( + padding: const EdgeInsets.only(top: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + StyledText( + text: '規模 M{magnitude},所在地預估{intensity}'.i18n.args({ + 'magnitude': data.info.magnitude.toStringAsFixed(1), + 'intensity': localIntensity.asIntensityLabel, + }), + style: context.textTheme.bodyMedium!.copyWith(color: context.colors.onErrorContainer), + tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, + ), + + Text( + countdown >= 0 ? '{countdown}秒後抵達'.i18n.args({'countdown': countdown}) : '已抵達'.i18n, + style: context.textTheme.bodyMedium!.copyWith( + fontWeight: FontWeight.bold, + color: context.colors.onErrorContainer, + height: 1, + leadingDistribution: TextLeadingDistribution.even, + ), + ), + ], + ), + ), + ], + ); + } else { + child = Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + spacing: 8, + children: [ + Container( + decoration: BoxDecoration( + color: context.colors.error, + borderRadius: BorderRadius.circular(8), + ), + padding: const EdgeInsets.fromLTRB(8, 6, 12, 6), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + Icon( + Symbols.crisis_alert_rounded, + color: context.colors.onError, + weight: 700, + size: 22, + ), + Text( + '緊急地震速報'.i18n, + style: context.textTheme.labelLarge!.copyWith( + color: context.colors.onError, + fontWeight: FontWeight.bold, ), - ], - ), - Icon( - Symbols.expand_more_rounded, - color: context.colors.onErrorContainer, - size: 24, - ), - ], + ), + ], + ), ), - Padding( - padding: const EdgeInsets.only(top: 8), - child: StyledText( - text: - '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' - .i18n - .args({ - 'time': data.info.time.toSimpleDateTimeString(context), - 'location': data.info.location, - 'magnitude': data.info.magnitude.toStringAsFixed(1), - 'intensity': localIntensity.asIntensityLabel, - }), - style: context.textTheme.bodyLarge!.copyWith( - color: context.colors.onErrorContainer, - ), - tags: { - 'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold)), - }, + Text( + '第 {serial} 報'.i18n.args({'serial': activeEew.first.serial}), + style: context.textTheme.bodyLarge!.copyWith( + color: context.colors.onErrorContainer, ), ), - Selector( - selector: (context, model) => model.code, - builder: (context, code, child) { - if (code == null) { - return const SizedBox.shrink(); - } - - return Padding( - padding: const EdgeInsets.only(top: 8, bottom: 4), - child: IntrinsicHeight( - child: Row( + ], + ), + Icon(Symbols.expand_more_rounded, color: context.colors.onErrorContainer, size: 24), + ], + ), + Padding( + padding: const EdgeInsets.only(top: 8), + child: StyledText( + text: + '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' + .i18n + .args({ + 'time': data.info.time.toSimpleDateTimeString(context), + 'location': data.info.location, + 'magnitude': data.info.magnitude.toStringAsFixed(1), + 'intensity': localIntensity.asIntensityLabel, + }), + style: context.textTheme.bodyLarge!.copyWith(color: context.colors.onErrorContainer), + tags: {'bold': StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold))}, + ), + ), + Selector( + selector: (context, model) => model.code, + builder: (context, code, child) { + if (code == null) { + return const SizedBox.shrink(); + } + + return Padding( + padding: const EdgeInsets.only(top: 8, bottom: 4), + child: IntrinsicHeight( + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(4), + child: Column( mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.all(4), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Text( - '所在地預估'.i18n, - style: context.textTheme.labelLarge!.copyWith( - color: context.colors.onErrorContainer.withValues(alpha: 0.6), - ), - ), - Padding( - padding: const EdgeInsets.only(top: 12, bottom: 8), - child: Text( - localIntensity.asIntensityLabel, + Text( + '所在地預估'.i18n, + style: context.textTheme.labelLarge!.copyWith( + color: context.colors.onErrorContainer.withValues(alpha: 0.6), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 12, bottom: 8), + child: Text( + localIntensity.asIntensityLabel, + style: context.textTheme.displayMedium!.copyWith( + fontWeight: FontWeight.bold, + color: context.colors.onErrorContainer, + height: 1, + leadingDistribution: TextLeadingDistribution.even, + ), + textAlign: TextAlign.center, + ), + ), + ], + ), + ), + ), + VerticalDivider( + color: context.colors.onErrorContainer.withValues(alpha: 0.4), + width: 24, + ), + Expanded( + child: Padding( + padding: const EdgeInsets.all(4), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + '震波'.i18n, + style: context.textTheme.labelLarge!.copyWith( + color: context.colors.onErrorContainer.withValues(alpha: 0.6), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 12, bottom: 8), + child: + (countdown >= 0) + ? RichText( + text: TextSpan( + children: [ + TextSpan( + text: countdown.toString(), + style: TextStyle( + fontSize: + context.textTheme.displayMedium!.fontSize! * 1.15, + ), + ), + TextSpan( + text: ' 秒'.i18n, + style: TextStyle( + fontSize: context.textTheme.labelLarge!.fontSize, + ), + ), + ], + style: context.textTheme.displayMedium!.copyWith( + fontWeight: FontWeight.bold, + color: context.colors.onErrorContainer, + height: 1, + leadingDistribution: TextLeadingDistribution.even, + ), + ), + textAlign: TextAlign.center, + ) + : Text( + '抵達'.i18n, style: context.textTheme.displayMedium!.copyWith( fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, @@ -937,87 +1121,25 @@ class _MonitorMapLayerSheetState extends State { ), textAlign: TextAlign.center, ), - ), - ], - ), - ), - ), - VerticalDivider( - color: context.colors.onErrorContainer.withValues(alpha: 0.4), - width: 24, - ), - Expanded( - child: Padding( - padding: const EdgeInsets.all(4), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Text( - '震波'.i18n, - style: context.textTheme.labelLarge!.copyWith( - color: context.colors.onErrorContainer.withValues(alpha: 0.6), - ), - ), - Padding( - padding: const EdgeInsets.only(top: 12, bottom: 8), - child: - (countdown >= 0) - ? RichText( - text: TextSpan( - children: [ - TextSpan( - text: countdown.toString(), - style: TextStyle( - fontSize: - context - .textTheme - .displayMedium! - .fontSize! * - 1.15, - ), - ), - TextSpan( - text: ' 秒'.i18n, - style: TextStyle( - fontSize: - context.textTheme.labelLarge!.fontSize, - ), - ), - ], - style: context.textTheme.displayMedium!.copyWith( - fontWeight: FontWeight.bold, - color: context.colors.onErrorContainer, - height: 1, - leadingDistribution: TextLeadingDistribution.even, - ), - ), - textAlign: TextAlign.center, - ) - : Text( - '抵達'.i18n, - style: context.textTheme.displayMedium!.copyWith( - fontWeight: FontWeight.bold, - color: context.colors.onErrorContainer, - height: 1, - leadingDistribution: TextLeadingDistribution.even, - ), - textAlign: TextAlign.center, - ), - ), - ], - ), - ), ), ], ), ), - ); - }, + ), + ], ), - ], - ), - ), + ), + ); + }, + ), + ], + ); + } + } + + return InkWell( + onTap: () => _toggleCollapse(), + child: Padding(padding: const EdgeInsets.all(12), child: child), ); } }, diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index ed78af6d7..9d19fbdfd 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -93,9 +93,9 @@ class PrecipitationMapLayerManager extends MapLayerManager { Future _focus() async { try { - final location = GlobalProviders.location.coordinateNotifier.value; + final location = GlobalProviders.location.coordinates; - if (location.isValid) { + if (location != null && location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index 8f8a4b622..60c86a6c0 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -314,9 +314,9 @@ class RadarMapLayerManager extends MapLayerManager { Future _focus() async { try { - final location = GlobalProviders.location.coordinateNotifier.value; + final location = GlobalProviders.location.coordinates; - if (location.isValid) { + if (location != null && location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index 1709da6c6..7d97967d3 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -74,9 +74,9 @@ class TemperatureMapLayerManager extends MapLayerManager { Future _focus() async { try { - final location = GlobalProviders.location.coordinateNotifier.value; + final location = GlobalProviders.location.coordinates; - if (location.isValid) { + if (location != null && location.isValid) { await controller.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); } else { await controller.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); diff --git a/lib/app/settings/location/page.dart b/lib/app/settings/location/page.dart index 1bdc150d9..f74a21f5d 100644 --- a/lib/app/settings/location/page.dart +++ b/lib/app/settings/location/page.dart @@ -1,10 +1,19 @@ import 'dart:io'; +import 'package:flutter/material.dart'; + import 'package:autostarter/autostarter.dart'; import 'package:disable_battery_optimization/disable_battery_optimization.dart'; +import 'package:go_router/go_router.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:material_symbols_icons/symbols.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/app/settings/location/select/%5Bcity%5D/page.dart'; import 'package:dpip/app/settings/location/select/page.dart'; import 'package:dpip/core/i18n.dart'; +import 'package:dpip/core/providers.dart'; import 'package:dpip/core/service.dart'; import 'package:dpip/global.dart'; import 'package:dpip/models/settings/location.dart'; @@ -12,13 +21,6 @@ import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/log.dart'; import 'package:dpip/widgets/list/list_section.dart'; import 'package:dpip/widgets/list/list_tile.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:go_router/go_router.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:material_symbols_icons/symbols.dart'; -import 'package:permission_handler/permission_handler.dart'; -import 'package:provider/provider.dart'; final stateSettingsLocationView = _SettingsLocationPageState(); @@ -33,319 +35,168 @@ class SettingsLocationPage extends StatefulWidget { State createState() => _SettingsLocationPageState(); } -const platform = MethodChannel('com.exptech.dpip/location'); - class _SettingsLocationPageState extends State with WidgetsBindingObserver { PermissionStatus? notificationPermission; PermissionStatus? locationPermission; PermissionStatus? locationAlwaysPermission; - bool? autoStartPermission; - bool? batteryOptimizationPermission; + bool autoStartPermission = true; + bool batteryOptimizationPermission = true; + + Future permissionStatusUpdate() async { + final values = await Future.wait([ + Permission.notification.status, + Permission.location.status, + Permission.locationAlways.status, + if (Platform.isAndroid) Autostarter.checkAutoStartState(), + if (Platform.isAndroid) DisableBatteryOptimization.isBatteryOptimizationDisabled, + ]); - Future requestLocationAlwaysPermission() async { - var status = await Permission.locationWhenInUse.status; - if (status.isDenied) { - status = await Permission.locationWhenInUse.request(); - } - - if (status.isPermanentlyDenied) { - openAppSettings(); - return false; - } + if (!mounted) return; - return status.isGranted; + setState(() { + notificationPermission = values[0] as PermissionStatus?; + locationPermission = values[1] as PermissionStatus?; + locationAlwaysPermission = values[2] as PermissionStatus?; + autoStartPermission = values[3] as bool? ?? true; + batteryOptimizationPermission = values[4] as bool? ?? true; + }); } - Future checkNotificationPermission() async { - final status = await Permission.notification.request(); - if (!mounted) return false; - - setState(() => notificationPermission = status); - - if (!status.isGranted) { - await showDialog( - context: context, - builder: (context) { - return AlertDialog( - icon: const Icon(Symbols.error), - title: const Text('無法取得通知權限'), - content: Text( - "'自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。'${status.isPermanentlyDenied ? '請您到應用程式設定中找到並允許「通知」權限後再試一次。' : ""}", + /// Shows a error dialog to the user with the given permission type. [type] can be either [Permission] or + /// `"auto-start"` + Future showPermissionDialog(dynamic type) async { + if (!mounted) return; + if (type is! Permission && type is! String) return; + + final title = switch (type) { + Permission.notification => '無法取得通知權限'.i18n, + Permission.location => '無法取得位置權限'.i18n, + Permission.locationAlways => '無法取得位置權限'.i18n, + 'auto-start' => '無法取得自啟動權限'.i18n, + 'battery-optimization' => '省電策略'.i18n, + _ => '無法取得權限'.i18n, + }; + + final content = switch (type) { + Permission.notification => '自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。'.i18n, + Permission.location => '自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。'.i18n, + Permission.locationAlways => + Platform.isIOS + ? '自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。'.i18n + : '自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。'.i18n, + 'auto-start' => '為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。'.i18n, + 'battery-optimization' => '為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。'.i18n, + _ => '自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。'.i18n, + }; + + await showDialog( + context: context, + builder: (context) { + return AlertDialog( + icon: const Icon(Symbols.error_rounded), + title: Text(title), + content: Text(content), + actionsAlignment: MainAxisAlignment.spaceBetween, + actions: [ + TextButton( + child: Text('取消'.i18n), + onPressed: () { + Navigator.pop(context); + }, ), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - child: const Text('取消'), - onPressed: () { - Navigator.pop(context); - }, - ), - if (status.isPermanentlyDenied) - FilledButton( - child: const Text('設定'), - onPressed: () { - openAppSettings(); - Navigator.pop(context); - }, - ) - else - FilledButton( - child: const Text('再試一次'), - onPressed: () { - checkNotificationPermission(); - Navigator.pop(context); - }, - ), - ], - ); - }, - ); + FilledButton( + child: Text('設定'.i18n), + onPressed: () { + openAppSettings(); + Navigator.pop(context); + }, + ), + ], + ); + }, + ); + } + Future requestPermissions() async { + if (!await Permission.notification.request().isGranted) { + TalkerManager.instance.warning('🧪 failed notification (NOTIFICATION) permission test'); + await showPermissionDialog(Permission.notification); return false; } - return true; - } - - Future checkLocationPermission() async { - final status = await Permission.location.request(); - if (!mounted) return false; - - setState(() => locationPermission = status); - - if (!status.isGranted) { - await showDialog( - context: context, - builder: (context) { - return AlertDialog( - icon: const Icon(Symbols.error), - title: const Text('無法取得位置權限'), - content: Text( - "'自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。'${status.isPermanentlyDenied ? '請您到應用程式設定中找到並允許「位置」權限後再試一次。' : ""}", - ), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - child: const Text('取消'), - onPressed: () { - Navigator.pop(context); - }, - ), - if (status.isPermanentlyDenied) - FilledButton( - child: const Text('設定'), - onPressed: () { - openAppSettings(); - Navigator.pop(context); - }, - ) - else - FilledButton( - child: const Text('再試一次'), - onPressed: () { - checkLocationPermission(); - Navigator.pop(context); - }, - ), - ], - ); - }, - ); - + if (!await Permission.location.request().isGranted) { + TalkerManager.instance.warning('🧪 failed location (ACCESS_COARSE_LOCATION) permission test'); + showPermissionDialog(Permission.location); return false; } - return true; - } - - Future checkLocationAlwaysPermission() async { - final status = await Permission.locationAlways.status; - - setState(() => locationAlwaysPermission = status); - - if (status.isGranted) { - return true; - } else { - if (!mounted) return false; - final permissionType = Platform.isAndroid ? '一律允許' : '永遠'; - - final status = - await showDialog( - context: context, - builder: (context) { - return AlertDialog( - icon: const Icon(Symbols.my_location), - title: Text('$permissionType 位置權限'), - content: Text('為了獲得更好的自動定位體驗,您需要將位置權限提升至「$permissionType」以便讓 DPIP 在背景自動設定所在地資訊。'), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - child: const Text('取消'), - onPressed: () { - Navigator.pop(context, false); - }, - ), - FilledButton( - child: const Text('確定'), - onPressed: () async { - final status = await Permission.locationAlways.request(); - - setState(() => locationAlwaysPermission = status); - - if (status.isPermanentlyDenied) { - openAppSettings(); - } - - if (!context.mounted) return; - - Navigator.pop(context, status.isGranted); - }, - ), - ], - ); - }, - ) ?? - false; - - return status; + if (!await Permission.locationWhenInUse.request().isGranted) { + TalkerManager.instance.warning('🧪 failed location when in use (ACCESS_FINE_LOCATION) permission test'); + showPermissionDialog(Permission.locationWhenInUse); + return false; } - } - Future androidCheckAutoStartPermission(int num) async { - if (!Platform.isAndroid) return true; - - try { - final bool? isAvailable = await Autostarter.isAutoStartPermissionAvailable(); - if (isAvailable == null || !isAvailable) return true; - - final bool? status = await Autostarter.checkAutoStartState(); - if (status == null || status) return true; - - if (!mounted) return true; - - final String contentText = - (num == 0) - ? '為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。' - : '為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。'; - - return await showDialog( - context: context, - builder: (context) { - return AlertDialog( - icon: const Icon(Symbols.my_location), - title: const Text('自啟動權限'), - content: Text(contentText), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - child: const Text('取消'), - onPressed: () { - Navigator.pop(context, false); - }, - ), - FilledButton( - child: const Text('確定'), - onPressed: () async { - await Autostarter.getAutoStartPermission(newTask: true); - - if (!context.mounted) return; - Navigator.pop(context, false); - }, - ), - ], - ); - }, - ) ?? - false; - } catch (err) { - TalkerManager.instance.error(err); + if (!await Permission.locationAlways.request().isGranted) { + TalkerManager.instance.warning('🧪 failed location always (ACCESS_BACKGROUND_LOCATION) permission test'); + showPermissionDialog(Permission.locationAlways); return false; } - } - Future androidCheckBatteryOptimizationPermission(int num) async { if (!Platform.isAndroid) return true; - try { - final bool status = await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; - if (status) return true; - - if (!mounted) return true; - - final String contentText = - (num == 0) - ? '為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。' - : '為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。'; - - return await showDialog( - context: context, - builder: (context) { - return AlertDialog( - icon: const Icon(Symbols.my_location), - title: const Text('省電策略'), - content: Text(contentText), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - child: const Text('取消'), - onPressed: () { - Navigator.pop(context, false); - }, - ), - FilledButton( - child: const Text('確定'), - onPressed: () { - DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); - Navigator.pop(context, false); - }, - ), - ], - ); - }, - ) ?? - false; - } catch (err) { - TalkerManager.instance.error(err); - return false; - } - } + autoStart: + { + final available = await Autostarter.isAutoStartPermissionAvailable(); + if (available == null) break autoStart; - Future toggleAutoLocation() async { - final isAuto = context.read().auto; + final status = await DisableBatteryOptimization.isAutoStartEnabled; + if (status == null || status) { + batteryOptimizationPermission = true; + break autoStart; + } - stopAndroidBackgroundService(); + await DisableBatteryOptimization.showEnableAutoStartSettings( + '自動啟動', + '為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。', + ); + } - if (!isAuto) { - final notification = await checkNotificationPermission(); - if (!notification) return; + batteryOptimization: + { + final status = await DisableBatteryOptimization.isBatteryOptimizationDisabled; + if (status == null || status) { + batteryOptimizationPermission = true; + break batteryOptimization; + } - final location = await checkLocationPermission(); - if (!location) return; + await DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); + } - await checkLocationAlwaysPermission(); + manufacturerBatteryOptimization: + { + final status = await DisableBatteryOptimization.isManufacturerBatteryOptimizationDisabled; + if (status == null || status) break manufacturerBatteryOptimization; - final bool autoStart = await androidCheckAutoStartPermission(0); - autoStartPermission = autoStart; - if (!autoStart) return; + await DisableBatteryOptimization.showEnableAutoStartSettings( + '省電策略', + '為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。', + ); + } - final bool batteryOptimization = await androidCheckBatteryOptimizationPermission(0); - batteryOptimizationPermission = batteryOptimization; - if (!batteryOptimization) return; + setState(() {}); + return true; + } - if (!isAuto) { - startAndroidBackgroundService(shouldInitialize: false); - } - } + Future toggleAutoLocation(bool shouldEnable) async { + if (shouldEnable) { + if (!await requestPermissions()) return; - if (Platform.isIOS) { - await platform.invokeMethod('toggleLocation', {'isEnabled': !isAuto}).catchError((_) {}); + await LocationServiceManager.start(); + } else { + await LocationServiceManager.stop(); } - if (!mounted) return; - - context.read().setAuto(!isAuto); - context.read().setCode(null); - context.read().setLatLng(); + GlobalProviders.location.setAuto(shouldEnable); } @override @@ -355,57 +206,11 @@ class _SettingsLocationPageState extends State with Widget permissionStatusUpdate(); } - @override - void dispose() { - WidgetsBinding.instance.removeObserver(this); - super.dispose(); - } - @override void didChangeAppLifecycleState(AppLifecycleState state) { permissionStatusUpdate(); } - void permissionStatusUpdate() { - Permission.notification.status.then((value) { - setState(() { - notificationPermission = value; - }); - }); - Permission.location.status.then((value) { - setState(() { - locationPermission = value; - }); - }); - Permission.locationAlways.status.then((value) { - setState(() { - locationAlwaysPermission = value; - }); - }); - if (Platform.isAndroid) { - Future checkAutoStart() async { - final autoStart = await Autostarter.checkAutoStartState(); - if (mounted) { - setState(() { - autoStartPermission = autoStart ?? false; - }); - } - } - - Future checkBatteryOptimization() async { - final batteryOptimization = await DisableBatteryOptimization.isBatteryOptimizationDisabled; - if (mounted) { - setState(() { - batteryOptimizationPermission = batteryOptimization ?? false; - }); - } - } - - checkAutoStart(); - checkBatteryOptimization(); - } - } - @override Widget build(BuildContext context) { final permissionType = Platform.isAndroid ? '一律允許' : '永遠'; @@ -422,7 +227,7 @@ class _SettingsLocationPageState extends State with Widget title: '自動更新'.i18n, subtitle: Text('定期更新目前的所在地'.i18n), icon: Symbols.my_location_rounded, - trailing: Switch(value: auto, onChanged: (value) => toggleAutoLocation()), + trailing: Switch(value: auto, onChanged: toggleAutoLocation), ); }, ), @@ -497,16 +302,16 @@ class _SettingsLocationPageState extends State with Widget ); }, ), - if (Platform.isAndroid && false) + if (Platform.isAndroid) Selector( selector: (context, model) => model.auto, builder: (context, auto, child) { return Visibility( - visible: auto && !autoStartPermission!, + visible: auto && !autoStartPermission, maintainAnimation: true, maintainState: true, child: AnimatedOpacity( - opacity: auto && !autoStartPermission! ? 1 : 0, + opacity: auto && !autoStartPermission ? 1 : 0, curve: const Interval(0.2, 1, curve: Easing.standard), duration: Durations.medium2, child: SettingsListTextSection( @@ -523,16 +328,16 @@ class _SettingsLocationPageState extends State with Widget ); }, ), - if (batteryOptimizationPermission != null && Platform.isAndroid) + if (Platform.isAndroid) Selector( selector: (context, model) => model.auto, builder: (context, auto, child) { return Visibility( - visible: auto && !batteryOptimizationPermission!, + visible: auto && !batteryOptimizationPermission, maintainAnimation: true, maintainState: true, child: AnimatedOpacity( - opacity: auto && !batteryOptimizationPermission! ? 1 : 0, + opacity: auto && !batteryOptimizationPermission ? 1 : 0, curve: const Interval(0.2, 1, curve: Easing.standard), duration: Durations.medium2, child: SettingsListTextSection( @@ -566,17 +371,7 @@ class _SettingsLocationPageState extends State with Widget icon: Symbols.location_city_rounded, trailing: const Icon(Symbols.chevron_right_rounded), enabled: !auto, - onTap: () async { - final bool autoStart = await androidCheckAutoStartPermission(1); - if (!autoStart) return; - - final bool batteryOptimization = await androidCheckBatteryOptimizationPermission(1); - if (!batteryOptimization) return; - - if (!context.mounted) return; - - context.push(SettingsLocationSelectPage.route); - }, + onTap: () => context.push(SettingsLocationSelectPage.route), ); }, ), @@ -594,86 +389,19 @@ class _SettingsLocationPageState extends State with Widget icon: Symbols.forest_rounded, trailing: const Icon(Symbols.chevron_right_rounded), enabled: !auto && city != null, - onTap: () async { - if (city == null) return; - - final bool autoStart = await androidCheckAutoStartPermission(1); - if (!autoStart) return; - - final bool batteryOptimization = await androidCheckBatteryOptimizationPermission(1); - if (!batteryOptimization) return; - - if (!context.mounted) return; - - context.push(SettingsLocationSelectCityPage.route(city)); - }, + onTap: city == null ? null : () => context.push(SettingsLocationSelectCityPage.route(city)), ); }, ), ], ), - if (false && Platform.isAndroid) - Selector( - selector: (context, model) => (auto: model.auto, code: model.code), - builder: (context, data, child) { - final (:auto, :code) = data; - - return Visibility( - visible: !auto && code != null && !autoStartPermission!, - maintainAnimation: true, - maintainState: true, - child: AnimatedOpacity( - opacity: !auto && code != null && !autoStartPermission! ? 1 : 0, - curve: const Interval(0.2, 1, curve: Easing.standard), - duration: Durations.medium2, - child: SettingsListTextSection( - icon: Symbols.warning_rounded, - iconColor: context.colors.error, - content: '自啟動權限已被拒絕,請移至設定允許權限。', - contentColor: context.colors.error, - trailing: TextButton( - child: const Text('設定'), - onPressed: () async { - await Autostarter.getAutoStartPermission(newTask: true); - }, - ), - ), - ), - ); - }, - ), - if (batteryOptimizationPermission != null && Platform.isAndroid) - Selector( - selector: (context, model) => (auto: model.auto, code: model.code), - builder: (context, data, child) { - final (:auto, :code) = data; - - return Visibility( - visible: !auto && code != null && !batteryOptimizationPermission!, - maintainAnimation: true, - maintainState: true, - child: AnimatedOpacity( - opacity: !auto && code != null && !batteryOptimizationPermission! ? 1 : 0, - curve: const Interval(0.2, 1, curve: Easing.standard), - duration: Durations.medium2, - child: SettingsListTextSection( - icon: Symbols.warning_rounded, - iconColor: context.colors.error, - content: '省電策略已被拒絕,請移至設定允許權限。', - contentColor: context.colors.error, - trailing: TextButton( - child: const Text('設定'), - onPressed: () { - DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); - Navigator.pop(context); - }, - ), - ), - ), - ); - }, - ), ], ); } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } } diff --git a/lib/app/settings/location/select/[city]/page.dart b/lib/app/settings/location/select/[city]/page.dart index e22bc68f8..26c85a14c 100644 --- a/lib/app/settings/location/select/[city]/page.dart +++ b/lib/app/settings/location/select/[city]/page.dart @@ -1,3 +1,9 @@ +import 'package:flutter/material.dart'; + +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/app/settings/location/page.dart'; import 'package:dpip/core/preference.dart'; @@ -7,9 +13,6 @@ import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/widgets/list/list_section.dart'; import 'package:dpip/widgets/list/list_tile.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; -import 'package:flutter/material.dart'; -import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:provider/provider.dart'; class SettingsLocationSelectCityPage extends StatefulWidget { final String city; @@ -38,38 +41,35 @@ class _SettingsLocationSelectCityPageState extends State( selector: (context, model) => model.code, - builder: - (context, code, child) => ListSectionTile( - title: '${town.value.city} ${town.value.town}', - subtitle: Text( - '${town.key}・${town.value.lng.toStringAsFixed(2)}°E・${town.value.lat.toStringAsFixed(2)}°N', - ), - trailing: - loadingTown == town.key - ? const LoadingIcon() - : Icon(code == town.key ? Symbols.check_rounded : null), - enabled: loadingTown == null, - onTap: () async { - if (loadingTown != null) return; + builder: (context, code, child) { + return ListSectionTile( + title: '${town.value.city} ${town.value.town}', + subtitle: Text( + '${town.key}・${town.value.lng.toStringAsFixed(2)}°E・${town.value.lat.toStringAsFixed(2)}°N', + ), + trailing: + loadingTown == town.key + ? const LoadingIcon() + : Icon(code == town.key ? Symbols.check_rounded : null), + enabled: loadingTown == null, + onTap: () async { + if (loadingTown != null) return; - setState(() => loadingTown = town.key); - await ExpTech().updateDeviceLocation( - token: Preference.notifyToken, - lat: town.value.lat.toString(), - lng: town.value.lng.toString(), - ); + setState(() => loadingTown = town.key); + await ExpTech().updateDeviceLocation( + token: Preference.notifyToken, + coordinates: LatLng(town.value.lat, town.value.lng), + ); - if (!context.mounted) return; - setState(() => loadingTown = null); + if (!context.mounted) return; + setState(() => loadingTown = null); - context.read().setCode(town.key); - context.read().setLatLng( - latitude: town.value.lat, - longitude: town.value.lng, - ); - context.popUntil(SettingsLocationPage.route); - }, - ), + context.read().setCode(town.key); + context.read().setCoordinates(LatLng(town.value.lat, town.value.lng)); + context.popUntil(SettingsLocationPage.route); + }, + ); + }, ), ], ), diff --git a/lib/app/settings/notify/page.dart b/lib/app/settings/notify/page.dart index a039923c0..d652ac3d6 100644 --- a/lib/app/settings/notify/page.dart +++ b/lib/app/settings/notify/page.dart @@ -84,13 +84,12 @@ class _SettingsNotifyPageState extends State { }) .catchError((error) { if (error.toString().contains('401')) { - if (GlobalProviders.location.latitude != null && GlobalProviders.location.longitude != null) { + if (GlobalProviders.location.coordinates != null) { Future.delayed(const Duration(seconds: 2), () { ExpTech() .updateDeviceLocation( token: Preference.notifyToken, - lat: GlobalProviders.location.latitude.toString(), - lng: GlobalProviders.location.longitude.toString(), + coordinates: GlobalProviders.location.coordinates!, ) .then((_) { if (mounted) { diff --git a/lib/app_old/page/map/radar/radar.dart b/lib/app_old/page/map/radar/radar.dart index b78406115..63df24c5c 100644 --- a/lib/app_old/page/map/radar/radar.dart +++ b/lib/app_old/page/map/radar/radar.dart @@ -1,17 +1,18 @@ import 'dart:io'; +import 'package:flutter/material.dart'; + +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; -import 'package:dpip/utils/need_location.dart'; import 'package:dpip/utils/radar_color.dart'; import 'package:dpip/widgets/list/time_selector.dart'; import 'package:dpip/widgets/map/legend.dart'; import 'package:dpip/widgets/map/map.dart'; -import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; typedef PositionUpdateCallback = void Function(); @@ -141,36 +142,15 @@ class _RadarMapState extends State { } Future start() async { - userLat = GlobalProviders.location.latitude ?? 0; - userLon = GlobalProviders.location.longitude ?? 0; - - final location = LatLng(userLat, userLon); - - if (location.isValid) { - await _mapController.setGeoJsonSource('markers-geojson', { - 'type': 'FeatureCollection', - 'features': [ - { - 'type': 'Feature', - 'properties': {}, - 'geometry': { - 'coordinates': [userLon, userLat], - 'type': 'Point', - }, - }, - ], - }); - final cameraUpdate = CameraUpdate.newLatLngZoom(LatLng(userLat, userLon), 8); - await _mapController.animateCamera(cameraUpdate, duration: const Duration(milliseconds: 1000)); - } + final location = GlobalProviders.location.coordinates; - if (!mounted) return; - - if (!location.isValid && !GlobalProviders.location.auto) { - await showLocationDialog(context); + if (location != null && location.isValid) { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); + } else { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); } - _addUserLocationMarker(); + if (!mounted) return; setState(() {}); } diff --git a/lib/core/ios_get_location.dart b/lib/core/ios_get_location.dart index 10d55146d..e19b83c32 100644 --- a/lib/core/ios_get_location.dart +++ b/lib/core/ios_get_location.dart @@ -1,9 +1,12 @@ import 'dart:async'; +import 'package:flutter/services.dart'; + +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/core/providers.dart'; -import 'package:dpip/utils/location_to_code.dart'; import 'package:dpip/utils/log.dart'; -import 'package:flutter/services.dart'; +import 'package:dpip/utils/map_utils.dart'; const _channel = MethodChannel('com.exptech.dpip/data'); Completer? _completer; @@ -17,20 +20,22 @@ Future getSavedLocation() async { try { final result = await _channel.invokeMethod>('getSavedLocation'); - final data = result?.map((key, value) => MapEntry(key, value.toDouble())); - final latitude = data?['lat'] as double?; - final longitude = data?['lon'] as double?; + if (result == null) return; - GlobalProviders.location.setLatLng(latitude: latitude, longitude: longitude); + final latitude = result['lat'] as double?; + final longitude = result['lon'] as double?; if (latitude != null && longitude != null) { - final location = GeoJsonHelper.checkPointInPolygons(latitude, longitude); - print(location); - GlobalProviders.location.setCode(location?.code.toString()); + final code = getTownCodeFromCoordinates(LatLng(latitude, longitude)); + GlobalProviders.location.setCode(code); + GlobalProviders.location.setCoordinates(LatLng(latitude, longitude)); + } else { + GlobalProviders.location.setCode(null); + GlobalProviders.location.setCoordinates(null); } - } catch (e) { - TalkerManager.instance.error('Error in getSavedLocation: $e'); + } catch (e, s) { + TalkerManager.instance.error('Error in getSavedLocation', e, s); } finally { _completer?.complete(); _completer = null; diff --git a/lib/core/location.dart b/lib/core/location.dart deleted file mode 100644 index a1bcf2a4b..000000000 --- a/lib/core/location.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'dart:async'; - -import 'package:dpip/core/providers.dart'; -import 'package:dpip/utils/location_to_code.dart'; -import 'package:dpip/utils/log.dart'; -import 'package:geolocator/geolocator.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; - -StreamSubscription? positionStreamSubscription; -Timer? restartTimer; - -class GetLocationResult { - final bool change; - final int? code; - final double? lat; - final double? lng; - - GetLocationResult({required this.change, this.code, this.lat, this.lng}); - - factory GetLocationResult.fromJson(Map json) { - return GetLocationResult( - change: json['change'] as bool, - code: json['code'] as int?, - lat: json['lat'] as double?, - lng: json['lng'] as double?, - ); - } - - Map toJson() { - return {'code': code, 'change': change, 'lat': lat, 'lng': lng}; - } - - LatLng get latlng => LatLng(lat ?? 0, lng ?? 0); -} - -class LocationService { - static final LocationService _instance = LocationService._internal(); - - factory LocationService() { - return _instance; - } - - LocationService._internal(); - - final GeolocatorPlatform geolocatorPlatform = GeolocatorPlatform.instance; - - @pragma('vm:entry-point') - Future androidGetLocation() async { - final isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); - - if (!isLocationServiceEnabled) { - TalkerManager.instance.warning('位置服務未啟用'); - return GetLocationResult(change: false, lat: 0, lng: 0); - } - - bool hasLocationChanged = false; - final lastLatitude = GlobalProviders.location.latitude ?? 0; - final lastLongitude = GlobalProviders.location.longitude ?? 0; - - final currentPosition = await Geolocator.getCurrentPosition( - locationSettings: const LocationSettings(accuracy: LocationAccuracy.medium), - ); - - final currentLocation = GeoJsonHelper.checkPointInPolygons(currentPosition.latitude, currentPosition.longitude); - - final distanceInMeters = Geolocator.distanceBetween( - lastLatitude, - lastLongitude, - currentPosition.latitude, - currentPosition.longitude, - ); - - if (distanceInMeters >= 250) { - GlobalProviders.location.setLatLng(latitude: currentPosition.latitude, longitude: currentPosition.longitude); - GlobalProviders.location.setCode(currentLocation?.code.toString()); - hasLocationChanged = true; - TalkerManager.instance.debug('距離: $distanceInMeters 更新位置'); - } else { - TalkerManager.instance.debug('距離: $distanceInMeters 不更新位置'); - } - - return GetLocationResult( - change: hasLocationChanged, - code: currentLocation?.code, - lat: currentPosition.latitude, - lng: currentPosition.longitude, - ); - } -} diff --git a/lib/core/notify.dart b/lib/core/notify.dart index 876f466b3..8fa5e511a 100644 --- a/lib/core/notify.dart +++ b/lib/core/notify.dart @@ -44,17 +44,17 @@ void _navigateBasedOnChannelKey(BuildContext context, String? channelKey) { context.push(MapPage.route(options: MapPageOptions(initialLayers: {MapLayer.monitor}))); return; } - + if (channelKey.startsWith('int_report')) { context.push(MapPage.route(options: MapPageOptions(initialLayers: {MapLayer.monitor}))); return; } - + if (channelKey.startsWith('eq')) { context.push(MapPage.route(options: MapPageOptions(initialLayers: {MapLayer.monitor}))); return; } - + context.go('/home'); } @@ -356,6 +356,18 @@ Future notifyInit() async { enableVibration: true, vibrationPattern: lowVibrationPattern, ), + NotificationChannel( + channelKey: 'background', + channelName: '自動定位', + channelDescription: '背景定位服務通知', + importance: NotificationImportance.Low, + defaultColor: const Color(0xFF2196f3), + channelShowBadge: false, + enableVibration: false, + enableLights: false, + playSound: false, + locked: true, + ), ], channelGroups: [ NotificationChannelGroup(channelGroupKey: 'group_eew', channelGroupName: '地震速報音效'), diff --git a/lib/core/preference.dart b/lib/core/preference.dart index 6f7b91fe1..f00f2295a 100644 --- a/lib/core/preference.dart +++ b/lib/core/preference.dart @@ -11,6 +11,7 @@ class PreferenceKeys { static const locationLatitude = 'location:latitude'; static const locationOldLongitude = 'location:oldLongitude'; static const locationOldLatitude = 'location:oldLatitude'; + static const locationFavorited = 'location:favorite'; // #endregion // #region User Interface @@ -45,6 +46,10 @@ class Preference { instance = await SharedPreferencesWithCache.create(cacheOptions: const SharedPreferencesWithCacheOptions()); } + static Future reload() async { + await instance.reloadCache(); + } + static String? get version => instance.getString('app-version'); static set version(String? value) => instance.set('app-version', value); @@ -81,6 +86,9 @@ class Preference { static double? get locationOldLatitude => instance.getDouble(PreferenceKeys.locationOldLatitude); static set locationOldLatitude(double? value) => instance.set(PreferenceKeys.locationOldLatitude, value); + + static List get locationFavorited => instance.getStringList(PreferenceKeys.locationFavorited) ?? []; + static set locationFavorited(List value) => instance.set(PreferenceKeys.locationFavorited, value); // #endregion // #region User Interface diff --git a/lib/core/service.dart b/lib/core/service.dart index 034bc8f89..1a133f713 100644 --- a/lib/core/service.dart +++ b/lib/core/service.dart @@ -2,247 +2,485 @@ import 'dart:async'; import 'dart:io'; import 'dart:ui'; +import 'package:flutter/services.dart'; + +import 'package:awesome_notifications/awesome_notifications.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; +import 'package:geojson_vi/geojson_vi.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/api/exptech.dart'; -import 'package:dpip/app_old/page/map/radar/radar.dart'; -import 'package:dpip/core/location.dart'; +import 'package:dpip/api/model/location/location.dart'; import 'package:dpip/core/preference.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/global.dart'; +import 'package:dpip/utils/extensions/datetime.dart'; import 'package:dpip/utils/extensions/latlng.dart'; -import 'package:dpip/utils/location_to_code.dart'; import 'package:dpip/utils/log.dart'; -import 'package:awesome_notifications/awesome_notifications.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_background_service/flutter_background_service.dart'; -import 'package:intl/intl.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:permission_handler/permission_handler.dart'; -Timer? _locationUpdateTimer; -final _backgroundService = FlutterBackgroundService(); -bool _isAndroidServiceInitialized = false; +class PositionEvent { + final LatLng? coordinates; + final String? code; + + PositionEvent(this.coordinates, this.code); -enum ServiceEvent { setAsForeground, setAsBackground, sendPosition, sendDebug, removePosition, stopService } + factory PositionEvent.fromJson(Map json) { + final coordinates = json['coordinates'] as List?; + final code = json['code'] as String?; -Future initBackgroundService() async { - final isAutoLocationEnabled = GlobalProviders.location.auto; - if (!isAutoLocationEnabled) { - return; + return PositionEvent(coordinates != null ? LatLng(coordinates[0] as double, coordinates[1] as double) : null, code); } - final notificationPermission = await Permission.notification.status; - final locationPermission = await Permission.locationAlways.status; + Map toJson() { + return {'coordinates': coordinates?.toJson(), 'code': code}; + } +} - if (notificationPermission.isGranted && locationPermission.isGranted) { - if (!Platform.isAndroid) return; +/// Events emitted by the background service. +final class LocationServiceEvent { + /// Event emitted when a new position is set in the background service. Contains the updated location coordinates. + static const position = 'position'; - await _initializeAndroidForegroundService(); - _setupPositionListener(); - startAndroidBackgroundService(shouldInitialize: true); - } + /// Method event to stop the service. + static const stop = 'stop'; } -Future startAndroidBackgroundService({required bool shouldInitialize}) async { - if (!_isAndroidServiceInitialized) { - await _initializeAndroidForegroundService(); - _setupPositionListener(); +/// Background location service. +/// +/// This class is responsible for managing the background location service. It is used to handle start and stop the +/// service. +class LocationServiceManager { + LocationServiceManager._(); + + /// The notification ID used for the background service notification + static const kNotificationId = 888888; + + /// Instance of the background service + static FlutterBackgroundService? instance; + + /// Platform channel for iOS + static const platform = MethodChannel('com.exptech.dpip/location'); + + /// Whether the background service is available on the current platform + static bool get avaliable => Platform.isAndroid || Platform.isIOS; + + /// Initializes the background location service. + /// + /// Configures the service with Android specific settings. Sets up a listener for position updates that reloads + /// preferences and updates device location. + /// + /// Will starts the service if automatic location updates are enabled. + static Future initalize() async { + if (instance != null || !avaliable) return; + + TalkerManager.instance.info('👷 initializing location service'); + + final service = FlutterBackgroundService(); + + try { + await service.configure( + androidConfiguration: AndroidConfiguration( + onStart: LocationService._$onStart, + autoStart: false, + isForegroundMode: false, + foregroundServiceTypes: [AndroidForegroundType.location], + notificationChannelId: 'background', + initialNotificationTitle: 'DPIP', + initialNotificationContent: '正在初始化自動定位服務...', + foregroundServiceNotificationId: kNotificationId, + ), + // iOS is handled in native code + iosConfiguration: IosConfiguration( + autoStart: false, + onForeground: LocationService._$onStartIOS, + onBackground: LocationService._$onStartIOS, + ), + ); + + // Reloads the UI isolate's preference cache when a new position is set in the background service. + service.on(LocationServiceEvent.position).listen((data) => _onPosition(PositionEvent.fromJson(data!))); + + instance = service; + TalkerManager.instance.info('👷 service initialized'); + } catch (e, s) { + TalkerManager.instance.error('👷 initializing location service FAILED', e, s); + } + + if (Preference.locationAuto == true) await start(); } - final isServiceRunning = await _backgroundService.isRunning(); - if (!isServiceRunning) { - _backgroundService.startService(); - } else if (!shouldInitialize) { - stopAndroidBackgroundService(); - _backgroundService.startService(); + /// Starts the background location service. + /// + /// Initializes the service if not already initialized. Only starts if the service is not already running. + static Future start() async { + if (!avaliable) return; + + TalkerManager.instance.info('👷 starting location service'); + + try { + final service = instance; + if (service == null) throw Exception('Not initialized.'); + + if (Platform.isIOS) { + await platform.invokeMethod('toggleLocation', {'isEnabled': true}); + return; + } + + if (await service.isRunning()) { + TalkerManager.instance.warning('👷 location service is already running, skipping...'); + return; + } + + await service.startService(); + } catch (e, s) { + TalkerManager.instance.error('👷 starting location service FAILED', e, s); + } } -} -Future stopAndroidBackgroundService() async { - final isServiceRunning = await _backgroundService.isRunning(); - if (!isServiceRunning) return; + /// Stops the background location service by invoking the stop event. + static Future stop() async { + if (!avaliable) return; + + TalkerManager.instance.info('👷 stopping location service'); + + try { + final service = instance; + if (service == null) throw Exception('Not initialized.'); + + if (Platform.isIOS) { + await platform.invokeMethod('toggleLocation', {'isEnabled': false}); + return; + } - final isAutoLocationEnabled = GlobalProviders.location.auto; - if (isAutoLocationEnabled) { - _backgroundService.invoke(ServiceEvent.removePosition.name); + service.invoke(LocationServiceEvent.stop); + } catch (e, s) { + TalkerManager.instance.error('👷 stopping location service FAILED', e, s); + } } - _backgroundService.invoke(ServiceEvent.stopService.name); + /// The event handler for the "position" event. + /// + /// Called when the service has updated the current location. + static Future _onPosition(PositionEvent event) async { + try { + TalkerManager.instance.info('👷 location updated by service, reloading preferences'); + + await Preference.reload(); + GlobalProviders.location.refresh(); + + final fcmToken = Preference.notifyToken; + if (fcmToken.isNotEmpty && event.coordinates != null) { + await ExpTech().updateDeviceLocation(token: fcmToken, coordinates: event.coordinates!); + } + + TalkerManager.instance.info('👷 preferences reloaded'); + } catch (e, s) { + TalkerManager.instance.error('👷 failed to update location', e, s); + } + } } -void _setupPositionListener() { - _backgroundService.on(ServiceEvent.sendPosition.name).listen((event) { - if (event == null) return; +/// The background location service. +/// +/// This service is used to get the current location of the device in the background and notify the main isolate to +/// update the UI with the new location. +/// +/// All property prefixed with `_$` are isolated from the main app. +@pragma('vm:entry-point') +class LocationService { + LocationService._(); - final result = GetLocationResult.fromJson(event); + /// The service instance + static late AndroidServiceInstance _$service; - final latitude = result.lat ?? 0; - final longitude = result.lng ?? 0; + /// The last known location coordinates + static LatLng? _$location; - final location = GeoJsonHelper.checkPointInPolygons(latitude, longitude); + /// Timer for scheduling periodic location updates + static Timer? _$locationUpdateTimer; - GlobalProviders.location.setCode(location?.code.toString()); - GlobalProviders.location.setLatLng(latitude: latitude, longitude: longitude); + /// Cached GeoJSON data for location lookups + static late GeoJSONFeatureCollection _$geoJsonData; - RadarMap.updatePosition(); - }); + /// Cached location data mapping + static late Map _$locationData; - _backgroundService.on(ServiceEvent.sendDebug.name).listen((event) { - if (event == null) return; + /// Entry point for the background service. + /// + /// Sets up notifications, initializes required data, and starts periodic location updates. Updates the notification + /// with current location information. Adjusts update frequency based on movement distance. + @pragma('vm:entry-point') + static Future _$onStart(ServiceInstance service) async { + if (service is! AndroidServiceInstance) return; + _$service = service; - final notificationBody = event['notifyBody']; - TalkerManager.instance.debug('自動定位: $notificationBody'); - }); -} + DartPluginRegistrant.ensureInitialized(); -Future _initializeAndroidForegroundService() async { - if (_isAndroidServiceInitialized) return; - - await AwesomeNotifications().initialize( - null, // 使用預設 launcher icon - [ - NotificationChannel( - channelKey: 'my_foreground', - channelName: '前景自動定位', - channelDescription: '背景定位服務通知', - importance: NotificationImportance.Low, - defaultColor: const Color(0xFF2196f3), - ledColor: Colors.white, - channelShowBadge: false, + await AwesomeNotifications().createNotification( + content: NotificationContent( + id: LocationServiceManager.kNotificationId, + channelKey: 'background', + title: 'DPIP', + body: '自動定位服務啟動中...', locked: true, - ) - ], - ); - - await _backgroundService.configure( - androidConfiguration: AndroidConfiguration( - onStart: _onServiceStart, - isForegroundMode: true, - foregroundServiceTypes: [AndroidForegroundType.location], - notificationChannelId: 'my_foreground', - initialNotificationTitle: 'DPIP', - initialNotificationContent: '前景服務啟動中...', - foregroundServiceNotificationId: 888, - ), - iosConfiguration: IosConfiguration(onForeground: _onServiceStart, onBackground: _onIosBackground), - ); - _isAndroidServiceInitialized = true; -} + autoDismissible: false, + icon: 'resource://drawable/ic_stat_name', + badge: 0, + ), + ); -@pragma('vm:entry-point') -Future _onIosBackground(ServiceInstance service) async { - WidgetsFlutterBinding.ensureInitialized(); - DartPluginRegistrant.ensureInitialized(); - return true; -} + await _$service.setAsForegroundService(); -@pragma('vm:entry-point') -Future _onServiceStart(ServiceInstance service) async { - WidgetsFlutterBinding.ensureInitialized(); - DartPluginRegistrant.ensureInitialized(); - if (service is AndroidServiceInstance) { - service.setAsForegroundService(); - await AwesomeNotifications().createNotification( - content: NotificationContent( - id: 888, - channelKey: 'my_foreground', - title: 'DPIP', - body: '前景服務啟動中...', - notificationLayout: NotificationLayout.Default, - locked: true, - autoDismissible: false, - icon: 'resource://drawable/ic_stat_name', - ), - ); -} - await Global.init(); - await Preference.init(); - GlobalProviders.init(); + await Preference.init(); + _$geoJsonData = await Global.loadTownGeojson(); + _$locationData = await Global.loadLocationData(); - final locationService = LocationService(); + _$service.setAutoStartOnBootMode(true); - // Setup service event listeners - service.on(ServiceEvent.stopService.name).listen((event) { - _locationUpdateTimer?.cancel(); - if (service is AndroidServiceInstance) { - service.setAutoStartOnBootMode(false); - } - service.stopSelf(); - TalkerManager.instance.info('背景服務已停止'); - }); - - // Only proceed with Android-specific setup if this is an Android service - if (service is AndroidServiceInstance) { - service.setAutoStartOnBootMode(true); - - // Setup service state change listeners - service.on(ServiceEvent.setAsForeground.name).listen((event) => service.setAsForegroundService()); - service.on(ServiceEvent.setAsBackground.name).listen((event) => service.setAsBackgroundService()); - service.on(ServiceEvent.removePosition.name).listen((event) { - GlobalProviders.location.setCode(null); - GlobalProviders.location.setLatLng(); - }); - - // Define the periodic location update task - Future updateLocation() async { - _locationUpdateTimer?.cancel(); - if (!await service.isForegroundService()) return; + _$service.on(LocationServiceEvent.stop).listen((_) => _$onStop()); + + // Start the periodic location update task + await _$task(); + } + /// Entry point for ios background service. + /// + /// iOS background service is handled in native code. + @pragma('vm:entry-point') + static Future _$onStartIOS(ServiceInstance service) async { + DartPluginRegistrant.ensureInitialized(); + return true; + } + + /// The main tick function of the service. + /// + /// This function is used to get the current location of the device and update the notification. It is called + /// periodically to check if the device has moved and update the notification accordingly. + @pragma('vm:entry-point') + static Future _$task() async { + if (!await _$service.isForegroundService()) return; + + final $perf = Stopwatch()..start(); + TalkerManager.instance.debug('⚙️::BackgroundLocationService task started'); + + try { // Get current position and location info - final position = await locationService.androidGetLocation(); - service.invoke(ServiceEvent.sendPosition.name, position.toJson()); + final coordinates = await _$getDeviceGeographicalLocation(); - final latitude = position.lat.toString(); - final longitude = position.lng.toString(); - final locationName = - position.code == null - ? '服務區域外' - : '${Global.location[position.code.toString()]?.city}${Global.location[position.code.toString()]?.town}'; + if (coordinates == null) { + _$updatePosition(_$service, null); + return; + } - // Handle FCM notification if position changed - final fcmToken = Preference.notifyToken; - if (position.change && fcmToken.isNotEmpty) { - final response = await ExpTech().updateDeviceLocation(token: fcmToken, lat: latitude, lng: longitude); - TalkerManager.instance.debug(response); + final previousLocation = _$location; + + final distanceInMeters = previousLocation != null ? coordinates.to(previousLocation) : null; + + if (distanceInMeters == null || distanceInMeters >= 250) { + TalkerManager.instance.debug('⚙️::BackgroundLocationService distance: $distanceInMeters, updating position'); + _$updatePosition(_$service, coordinates); + } else { + TalkerManager.instance.debug( + '⚙️::BackgroundLocationService distance: $distanceInMeters, not updating position', + ); } - // Update notification with current position - const notificationTitle = '自動定位中'; - final timestamp = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()); - final notificationBody = '$timestamp\n$latitude,$longitude $locationName'; - - service.invoke(ServiceEvent.sendDebug.name, {'notifyBody': notificationBody}); - await AwesomeNotifications().createNotification( - content: NotificationContent( - id: 888, - channelKey: 'my_foreground', - title: notificationTitle, - body: notificationBody, - notificationLayout: NotificationLayout.Default, - locked: true, - autoDismissible: false, - ), - ); - service.setForegroundNotificationInfo(title: notificationTitle, content: notificationBody); + // Determine the next update time based on the distance moved + int nextUpdateInterval = 15; - final double dist = position.latlng.to( - LatLng(GlobalProviders.location.oldLatitude ?? 0, GlobalProviders.location.oldLongitude ?? 0), + if (distanceInMeters != null) { + if (distanceInMeters > 30) { + nextUpdateInterval = 5; + } else if (distanceInMeters > 10) { + nextUpdateInterval = 10; + } + } + + _$locationUpdateTimer?.cancel(); + _$locationUpdateTimer = Timer.periodic(Duration(minutes: nextUpdateInterval), (timer) => _$task()); + } catch (e, s) { + $perf.stop(); + TalkerManager.instance.error( + '⚙️::BackgroundLocationService task FAILED after ${$perf.elapsedMilliseconds}ms', + e, + s, ); + } finally { + if ($perf.isRunning) { + $perf.stop(); + TalkerManager.instance.debug('⚙️::BackgroundLocationService task completed in ${$perf.elapsedMilliseconds}ms'); + } + } + } + + /// The event handler for the "stop" event. + /// + /// Called when the service manager sends a stop signal to terminate the location service. + @pragma('vm:entry-point') + static Future _$onStop() async { + try { + TalkerManager.instance.info('⚙️::BackgroundLocationService stopping location service'); + + // Cleanup timer + _$locationUpdateTimer?.cancel(); + + await _$service.setAutoStartOnBootMode(false); + await _$service.stopSelf(); + + TalkerManager.instance.info('⚙️::BackgroundLocationService location service stopped'); + } catch (e, s) { + TalkerManager.instance.error('⚙️::BackgroundLocationService stopping location service FAILED', e, s); + } + } + + /// Gets the current geographical location of the device. + /// + /// Returns null if location services are disabled. Uses medium accuracy for location detection. + @pragma('vm:entry-point') + static Future _$getDeviceGeographicalLocation() async { + final isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); + + if (!isLocationServiceEnabled) { + TalkerManager.instance.warning('位置服務未啟用'); + return null; + } + + final currentPosition = await Geolocator.getCurrentPosition( + locationSettings: const LocationSettings(accuracy: LocationAccuracy.medium), + ); - int time = 15; + return LatLng(currentPosition.latitude, currentPosition.longitude); + } + + /// Gets the location code for given coordinates by checking if they fall within polygon boundaries. + /// + /// Takes a target LatLng and checks if it falls within any polygon in the GeoJSON data. Returns the location code if + /// found, null otherwise. + static ({String code, Location location})? _$getLocationFromCoordinates(LatLng target) { + final features = _$geoJsonData.features; + + for (final feature in features) { + if (feature == null) continue; + + final geometry = feature.geometry; + if (geometry == null) continue; + + bool isInPolygon = false; + + if (geometry is GeoJSONPolygon) { + final polygon = geometry.coordinates[0]; + + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + final double xi = polygon[i][0]; + final double yi = polygon[i][1]; + final double xj = polygon[j][0]; + final double yj = polygon[j][1]; - if (dist > 30) { - time = 5; - } else if (dist > 10) { - time = 10; + final bool intersect = + ((yi > target.latitude) != (yj > target.latitude)) && + (target.longitude < (xj - xi) * (target.latitude - yi) / (yj - yi) + xi); + if (intersect) isInside = !isInside; + + j = i; + } + isInPolygon = isInside; + } + + if (geometry is GeoJSONMultiPolygon) { + final multiPolygon = geometry.coordinates; + + for (final polygonCoordinates in multiPolygon) { + final polygon = polygonCoordinates[0]; + + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + final double xi = polygon[i][0]; + final double yi = polygon[i][1]; + final double xj = polygon[j][0]; + final double yj = polygon[j][1]; + + final bool intersect = + ((yi > target.latitude) != (yj > target.latitude)) && + (target.longitude < (xj - xi) * (target.latitude - yi) / (yj - yi) + xi); + if (intersect) isInside = !isInside; + + j = i; + } + + if (isInside) { + isInPolygon = true; + break; + } + } } - GlobalProviders.location.setOldLongitude(position.lng); - GlobalProviders.location.setOldLatitude(position.lat); + if (isInPolygon) { + final code = feature.properties!['CODE']?.toString(); + if (code == null) return null; - _locationUpdateTimer = Timer.periodic(Duration(minutes: time), (timer) async => updateLocation()); + final location = _$locationData[code]; + if (location == null) return null; + + return (code: code, location: location); + } } - // Start the periodic task - updateLocation(); + return null; + } + + /// Updates the current position in the service. + /// + /// Invokes a position event with the new coordinates that can be listened to by the main app to update the UI. + @pragma('vm:entry-point') + static Future _$updatePosition(ServiceInstance service, LatLng? position) async { + _$location = position; + + final result = position != null ? _$getLocationFromCoordinates(position) : null; + + Preference.locationCode = result?.code; + Preference.locationLatitude = position?.latitude; + Preference.locationLongitude = position?.longitude; + + service.invoke(LocationServiceEvent.position, PositionEvent(position, result?.code).toJson()); + + // Update notification with current position + final timestamp = DateTime.now().toDateTimeString(); + String content = '服務區域外'; + + if (position == null) { + content = '服務區域外'; + } else { + final latitude = position.latitude.toStringAsFixed(6); + final longitude = position.longitude.toStringAsFixed(6); + + if (result == null) { + content = '服務區域外 ($latitude, $longitude)'; + } else { + content = '${result.location.city} ${result.location.town} ($latitude, $longitude)'; + } + } + + const notificationTitle = '自動定位中'; + final notificationBody = + '$timestamp\n' + '$content'; + + await AwesomeNotifications().createNotification( + content: NotificationContent( + id: LocationServiceManager.kNotificationId, + channelKey: 'background', + title: notificationTitle, + body: notificationBody, + locked: true, + autoDismissible: false, + badge: 0, + ), + ); + + _$service.setForegroundNotificationInfo(title: notificationTitle, content: notificationBody); } } diff --git a/lib/core/update.dart b/lib/core/update.dart index 93b73145e..d49a2e353 100644 --- a/lib/core/update.dart +++ b/lib/core/update.dart @@ -1,13 +1,19 @@ import 'dart:async'; import 'dart:math'; -import 'package:dpip/api/exptech.dart'; -import 'package:dpip/core/preference.dart'; import 'package:flutter_icmp_ping/flutter_icmp_ping.dart'; import 'package:ip_country_lookup/ip_country_lookup.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; + +import 'package:dpip/api/exptech.dart'; +import 'package:dpip/core/preference.dart'; Future updateInfoToServer() async { + final latitude = Preference.locationLatitude; + final longitude = Preference.locationLongitude; + try { + if (latitude == null || longitude == null) return; if (Preference.notifyToken != '' && DateTime.now().millisecondsSinceEpoch - (Preference.lastUpdateToServerTime ?? 0) > 86400 * 1 * 1000) { final random = Random(); @@ -15,14 +21,10 @@ Future updateInfoToServer() async { if (rand != 0) return; - ExpTech().updateDeviceLocation( - token: Preference.notifyToken, - lat: Preference.locationLatitude.toString(), - lng: Preference.locationLongitude.toString(), - ); + ExpTech().updateDeviceLocation(token: Preference.notifyToken, coordinates: LatLng(latitude, longitude)); } - unawaited(_performNetworkCheck()); + _performNetworkCheck(); } catch (e) { print('Network info update failed: $e'); } @@ -49,5 +51,3 @@ Future _performNetworkCheck() async { print('Network check failed: $e'); } } - -void unawaited(Future future) {} diff --git a/lib/global.dart b/lib/global.dart index ecd95657f..f2337f990 100644 --- a/lib/global.dart +++ b/lib/global.dart @@ -1,27 +1,29 @@ -import 'package:dpip/api/exptech.dart'; -import 'package:dpip/api/model/location/location.dart'; -import 'package:dpip/utils/extensions/asset_bundle.dart'; -import 'package:dpip/utils/location_to_code.dart'; import 'package:flutter/services.dart'; + +import 'package:geojson_vi/geojson_vi.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:dpip/api/exptech.dart'; +import 'package:dpip/api/model/location/location.dart'; +import 'package:dpip/utils/extensions/asset_bundle.dart'; + class Global { Global._(); static late PackageInfo packageInfo; static late SharedPreferences preference; static late Map location; - static late Map geojson; + static late GeoJSONFeatureCollection townGeojson; static late Map> timeTable; static late Map box; static late Map notifyTestContent; static ExpTech api = ExpTech(); - static Future loadLocationData() async { + static Future> loadLocationData() async { final data = await rootBundle.loadJson('assets/location.json'); - location = data.map((key, value) => MapEntry(key, Location.fromJson(value as Map))); + return data.map((key, value) => MapEntry(key, Location.fromJson(value as Map))); } static Future loadTimeTableData() async { @@ -50,15 +52,20 @@ class Global { }); } + static Future loadTownGeojson() async { + final data = await rootBundle.loadJson('assets/map/town.json'); + + return GeoJSONFeatureCollection.fromMap(data); + } + static Future init() async { packageInfo = await PackageInfo.fromPlatform(); preference = await SharedPreferences.getInstance(); box = await rootBundle.loadJson('assets/box.json'); + location = await loadLocationData(); + townGeojson = await loadTownGeojson(); - await loadLocationData(); await loadTimeTableData(); await loadNotifyTestContent(); - - await GeoJsonHelper.loadGeoJson('assets/map/town.json'); } } diff --git a/lib/main.dart b/lib/main.dart index 781d67001..bdae802e0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -50,7 +50,7 @@ void main() async { updateInfoToServer(), ]); - initBackgroundService(); + await LocationServiceManager.initalize(); runApp( I18n( diff --git a/lib/models/settings/location.dart b/lib/models/settings/location.dart index 02ef53eca..5402fde41 100644 --- a/lib/models/settings/location.dart +++ b/lib/models/settings/location.dart @@ -1,69 +1,188 @@ -import 'dart:developer'; +import 'dart:collection'; -import 'package:dpip/core/preference.dart'; import 'package:flutter/material.dart'; + import 'package:maplibre_gl/maplibre_gl.dart'; -class SettingsLocationModel extends ChangeNotifier { - void _log(String message) => log(message, name: 'SettingsLocationModel'); +import 'package:dpip/core/preference.dart'; +import 'package:dpip/global.dart'; - bool get _auto => Preference.locationAuto ?? false; - final ValueNotifier codeNotifier = ValueNotifier(Preference.locationCode); - final ValueNotifier coordinateNotifier = ValueNotifier( - LatLng(Preference.locationLatitude ?? 0, Preference.locationLongitude ?? 0), - ); - double? get _oldLongitude => Preference.locationOldLongitude; - double? get _oldLatitude => Preference.locationOldLatitude; +class _SettingsLocationModel extends ChangeNotifier { + /// The underlying [ValueNotifier] for the current location represented as a postal code. + /// + /// Returns the stored location code from preferences. Returns `null` if no location code has been set. + final $code = ValueNotifier(Preference.locationCode); - /// 自動定位 + /// The current location represented as a postal code. /// - /// 預設:不自動定位 - bool get auto => _auto; - void setAuto(bool value) { - Preference.locationAuto = value; - _log('Changed ${PreferenceKeys.locationAuto} to ${Preference.locationAuto}'); - notifyListeners(); - } + /// Returns the stored location code from preferences. Returns `null` if no location code has been set. + String? get code => $code.value; - /// 縣市代碼 - String? get code => Preference.locationCode; + /// Sets the current location using a postal code. + /// + /// [value] The postal code to set as the current location. + /// + /// Invoking this method will also update [$code] and notify all attached listeners. + /// + /// If [value] matches the current code, no changes are made. When [auto] is false, also updates the stored latitude + /// and longitude based on the location data associated with the postal code. void setCode(String? value) { + if (code == value) return; + + final location = Global.location[value]; + + // Check if the location is invalid + if (location == null) { + Preference.locationCode = null; + $code.value = null; + + if (!auto) { + Preference.locationLatitude = null; + Preference.locationLongitude = null; + + $coordinates.value = null; + } + + notifyListeners(); + return; + } + Preference.locationCode = value; - codeNotifier.value = value; - _log('Changed ${PreferenceKeys.locationCode} to ${Preference.locationCode}'); + $code.value = value; + + if (!auto) { + Preference.locationLatitude = location.lat; + Preference.locationLongitude = location.lng; + + $coordinates.value = LatLng(location.lat, location.lng); + } + notifyListeners(); } - /// 經度 - double? get longitude => Preference.locationLongitude; + /// The underlying [ValueNotifier] for the current location represented as a [LatLng] coordinate. + /// + /// Returns a [LatLng] object containing the stored coordinates for the current [code]. Returns `null` if either + /// latitude or longitude is not set. + /// + /// This is used to display the precise location of the user on the map. + /// + /// Depends on [code]. + final $coordinates = ValueNotifier( + Preference.locationLatitude != null && Preference.locationLongitude != null + ? LatLng(Preference.locationLatitude!, Preference.locationLongitude!) + : null, + ); - /// 緯度 - double? get latitude => Preference.locationLatitude; - void setLatLng({double? latitude, double? longitude}) { - Preference.locationLatitude = latitude; - _log('Changed ${PreferenceKeys.locationLatitude} to ${Preference.locationLatitude}'); + /// The current location represented as a LatLng coordinate. + /// + /// Returns a [LatLng] object containing the stored coordinates for the current [code]. Returns `null` if either + /// latitude or longitude is not set. + /// + /// This is used to display the precise location of the user on the map. + /// + /// Depends on [code]. + LatLng? get coordinates => $coordinates.value; - Preference.locationLongitude = longitude; - _log('Changed ${PreferenceKeys.locationLongitude} to ${Preference.locationLongitude}'); + /// Sets the current location using a LatLng coordinate. + /// + /// Takes a [LatLng] value containing latitude and longitude coordinates and updates the stored location preferences. + /// If value is `null`, both latitude and longitude will be set to `null`. + /// + /// Invoking this method will also update [$coordinates] and notify all attached listeners. + /// + /// This method should be called aside with [setCode] if automatic location update is enabled. + /// + /// Use [setCode] instead when automatic location update is disabled. + void setCoordinates(LatLng? value) { + Preference.locationLatitude = value?.latitude; + Preference.locationLongitude = value?.longitude; - coordinateNotifier.value = LatLng(latitude ?? 0, longitude ?? 0); + $coordinates.value = value; notifyListeners(); } - /// 經度 - double? get oldLongitude => _oldLongitude; - void setOldLongitude(double? value) { - Preference.locationOldLongitude = value; - _log('Changed ${PreferenceKeys.locationOldLongitude} to ${Preference.locationOldLongitude}'); + /// The underlying [ValueNotifier] for the current state of automatic location update. + /// + /// Returns a [bool] indicating if automatic location update is enabled. When enabled, the app will use GPS to + /// automatically update the current location. When disabled, the location must be set manually either by [setCode] or + /// [setCoordinates]. + /// + /// Defaults to `false` if no preference has been set. + final $auto = ValueNotifier(Preference.locationAuto ?? false); + + /// The current state of automatic location update. + /// + /// Returns a [bool] indicating if automatic location update is enabled. When enabled, the app will use GPS to + /// automatically update the current location. When disabled, the location must be set manually either by [setCode] or + /// [setCoordinates]. + /// + /// Defaults to `false` if no preference has been set. + bool get auto => $auto.value; + + /// Sets whether location should be automatically determined using GPS. + /// + /// Takes a [bool] value indicating if automatic location detection should be enabled. When enabled, the app will use + /// GPS to automatically determine and update the current location. When disabled, the location must be set manually. + void setAuto(bool value) { + Preference.locationAuto = value; + + $auto.value = value; + notifyListeners(); } - /// 緯度 - double? get oldLatitude => _oldLatitude; - void setOldLatitude(double? value) { - Preference.locationOldLatitude = value; - _log('Changed ${PreferenceKeys.locationOldLatitude} to ${Preference.locationOldLatitude}'); + /// The underlying [ValueNotifier] for the list of favorited locations. + /// + /// Returns a [List] of [String] containing the postal codes of the favorited locations. + /// + /// Defaults to an empty list if no favorited locations have been set. + final $favorited = ValueNotifier(Preference.locationFavorited); + + /// The list of favorited locations. + /// + /// Returns a [List] containing the postal codes of the favorited locations. + /// + /// Defaults to an empty list if no favorited locations have been set. + UnmodifiableListView get favorited => UnmodifiableListView($favorited.value); + + /// Adds a location to the list of favorited locations. + /// + /// Takes a [String] value representing the postal code of the location to add to the list. + /// + /// If the location is already favorited, this method will do nothing. + void favorite(String code) { + Preference.locationFavorited.add(code); + notifyListeners(); } + + /// Removes a location from the list of favorited locations. + /// + /// Takes a [String] value representing the postal code of the location to remove from the list. + /// + /// If the location is not favorited, this method will do nothing. + void unfavorite(String code) { + Preference.locationFavorited.remove(code); + + notifyListeners(); + } + + /// Refreshes the location settings from preferences. + /// + /// Updates the [code], [coordinates], and [auto] properties to reflect the current preferences. + /// + /// This method is used to refresh the location settings when the preferences are updated. + void refresh() { + $code.value = Preference.locationCode; + $coordinates.value = + Preference.locationLatitude != null && Preference.locationLongitude != null + ? LatLng(Preference.locationLatitude!, Preference.locationLongitude!) + : null; + $auto.value = Preference.locationAuto ?? false; + $favorited.value = Preference.locationFavorited; + } } + +class SettingsLocationModel extends _SettingsLocationModel {} diff --git a/lib/models/settings/map.dart b/lib/models/settings/map.dart index 7d8f72119..2bb0f7710 100644 --- a/lib/models/settings/map.dart +++ b/lib/models/settings/map.dart @@ -40,4 +40,16 @@ class SettingsMapModel extends ChangeNotifier { _log('Changed ${PreferenceKeys.mapLayers} to $value'); notifyListeners(); } + + /// Refreshes the map settings from preferences. + /// + /// Updates the [updateInterval], [baseMap], and [layers] properties to reflect the current preferences. + /// + /// This method is used to refresh the map settings when the preferences are updated. + void refresh() { + updateIntervalNotifier.value = Preference.mapUpdateFps ?? 10; + baseMapNotifier.value = BaseMapType.values.asNameMap()[Preference.mapBase] ?? BaseMapType.exptech; + layersNotifier.value = + Preference.mapLayers?.split(',').map((v) => MapLayer.values.byName(v)).toSet() ?? {MapLayer.monitor}; + } } diff --git a/lib/route/event_viewer/intensity.dart b/lib/route/event_viewer/intensity.dart index 24dce69d3..7abe1ddc9 100644 --- a/lib/route/event_viewer/intensity.dart +++ b/lib/route/event_viewer/intensity.dart @@ -15,9 +15,9 @@ import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/global.dart'; import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/intensity_color.dart'; import 'package:dpip/utils/list_icon.dart'; -import 'package:dpip/utils/need_location.dart'; import 'package:dpip/utils/parser.dart'; import 'package:dpip/widgets/chip/label_chip.dart'; import 'package:dpip/widgets/list/detail_field_tile.dart'; @@ -55,31 +55,6 @@ class _IntensityPageState extends State { _mapController = controller; } - Future _addUserLocationMarker() async { - if (isUserLocationValid) { - await _mapController.removeLayer('markers'); - await _mapController.addLayer( - 'markers-geojson', - 'markers', - const SymbolLayerProperties( - symbolZOrder: 'source', - iconSize: [ - Expressions.interpolate, - ['linear'], - [Expressions.zoom], - 5, - 0.5, - 10, - 1.5, - ], - iconImage: 'gps', - iconAllowOverlap: true, - iconIgnorePlacement: true, - ), - ); - } - } - Future _loadMap() async { radarList = await ExpTech().getRadarList(); @@ -96,37 +71,14 @@ class _IntensityPageState extends State { } Future start() async { - userLat = GlobalProviders.location.latitude ?? 0; - userLon = GlobalProviders.location.longitude ?? 0; - - isUserLocationValid = userLon != 0 && userLat != 0; - - if (isUserLocationValid) { - await _mapController.setGeoJsonSource('markers-geojson', { - 'type': 'FeatureCollection', - 'features': [ - { - 'type': 'Feature', - 'properties': {}, - 'geometry': { - 'coordinates': [userLon, userLat], - 'type': 'Point', - }, - }, - ], - }); - final cameraUpdate = CameraUpdate.newLatLngZoom(LatLng(userLat, userLon), 8); - await _mapController.animateCamera(cameraUpdate, duration: const Duration(milliseconds: 1000)); - } + final location = GlobalProviders.location.coordinates; - if (!isUserLocationValid && !GlobalProviders.location.auto) { - await showLocationDialog(context); + if (location != null && location.isValid) { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); + } else { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); } - await _addUserLocationMarker(); - - setState(() {}); - getEventInfo(); if (!widget.item.addition.isFinal) { diff --git a/lib/route/event_viewer/thunderstorm.dart b/lib/route/event_viewer/thunderstorm.dart index 8bbf20bb4..1983a1585 100644 --- a/lib/route/event_viewer/thunderstorm.dart +++ b/lib/route/event_viewer/thunderstorm.dart @@ -12,18 +12,16 @@ import 'package:timezone/timezone.dart'; import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/history/history.dart'; -import 'package:dpip/app_old/page/map/radar/radar.dart'; +import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/global.dart'; import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/list_icon.dart'; -import 'package:dpip/utils/need_location.dart'; import 'package:dpip/utils/parser.dart'; -import 'package:dpip/utils/radar_color.dart'; import 'package:dpip/widgets/chip/label_chip.dart'; import 'package:dpip/widgets/list/detail_field_tile.dart'; -import 'package:dpip/widgets/map/legend.dart'; import 'package:dpip/widgets/map/map.dart'; import 'package:dpip/widgets/sheet/bottom_sheet_drag_handle.dart'; @@ -39,8 +37,8 @@ class ThunderstormPage extends StatefulWidget { class _ThunderstormPageState extends State { late MapLibreMapController _mapController; List radarList = []; - double userLat = 0; - double userLon = 0; + double? userLat; + double? userLon; bool isUserLocationValid = false; bool _showLegend = false; Timer? _blinkTimer; @@ -122,34 +120,13 @@ class _ThunderstormPageState extends State { } Future start() async { - userLat = GlobalProviders.location.latitude ?? 0; - userLon = GlobalProviders.location.longitude ?? 0; - - isUserLocationValid = userLon != 0 && userLat != 0; - - if (isUserLocationValid) { - await _mapController.setGeoJsonSource('markers-geojson', { - 'type': 'FeatureCollection', - 'features': [ - { - 'type': 'Feature', - 'properties': {}, - 'geometry': { - 'coordinates': [userLon, userLat], - 'type': 'Point', - }, - }, - ], - }); - final cameraUpdate = CameraUpdate.newLatLngZoom(LatLng(userLat, userLon), 8); - await _mapController.animateCamera(cameraUpdate, duration: const Duration(milliseconds: 1000)); - } + final location = GlobalProviders.location.coordinates; - if (!isUserLocationValid && !GlobalProviders.location.auto) { - await showLocationDialog(context); + if (location != null && location.isValid) { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(location, 7.4)); + } else { + await _mapController.animateCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.4)); } - - setState(() {}); } void _toggleLegend() { @@ -159,32 +136,29 @@ class _ThunderstormPageState extends State { } Widget _buildLegend() { - return MapLegend( - children: [ - _buildColorBar(), - const SizedBox(height: 8), - _buildColorBarLabels(), - const SizedBox(height: 12), - Text('單位:dBZ', style: context.theme.textTheme.labelMedium), + return ColorLegend( + reverse: true, + unit: 'dBZ', + items: [ + ColorLegendItem(color: const Color(0xff00ffff), value: 0), + ColorLegendItem(color: const Color(0xff00a3ff), value: 5), + ColorLegendItem(color: const Color(0xff005bff), value: 10), + ColorLegendItem(color: const Color(0xff0000ff), value: 15, blendTail: false), + ColorLegendItem(color: const Color(0xff00ff00), value: 16, hidden: true), + ColorLegendItem(color: const Color(0xff00d300), value: 20), + ColorLegendItem(color: const Color(0xff00a000), value: 25), + ColorLegendItem(color: const Color(0xffccea00), value: 30), + ColorLegendItem(color: const Color(0xffffd300), value: 35), + ColorLegendItem(color: const Color(0xffff8800), value: 40), + ColorLegendItem(color: const Color(0xffff1800), value: 45), + ColorLegendItem(color: const Color(0xffd30000), value: 50), + ColorLegendItem(color: const Color(0xffa00000), value: 55), + ColorLegendItem(color: const Color(0xffea00cc), value: 60), + ColorLegendItem(color: const Color(0xff9600ff), value: 65), ], ); } - Widget _buildColorBar() { - return SizedBox(height: 20, width: 300, child: CustomPaint(painter: ColorBarPainter(dBZColors))); - } - - Widget _buildColorBarLabels() { - final labels = List.generate(14, (index) => (index * 5).toString()); - return SizedBox( - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: labels.map((label) => Text(label, style: const TextStyle(fontSize: 9))).toList(), - ), - ); - } - @override Widget build(BuildContext context) { final TZDateTime radarDateTime = TZDateTime.fromMillisecondsSinceEpoch( diff --git a/lib/utils/extensions/datetime.dart b/lib/utils/extensions/datetime.dart index c1b962781..a944d7724 100644 --- a/lib/utils/extensions/datetime.dart +++ b/lib/utils/extensions/datetime.dart @@ -4,9 +4,16 @@ import 'package:i18n_extension/i18n_extension.dart'; import 'package:intl/intl.dart'; import 'package:timezone/timezone.dart'; +extension DateTimeExtension on DateTime { + String toSimpleDateTimeString() => DateFormat('MM/dd HH:mm').format(this); + String toLocaleFullDateString(BuildContext context) => + DateFormat('yyyy/MM/dd (EEEE)', context.locale.toLanguageTag()).format(this); + String toDateTimeString() => DateFormat('yyyy/MM/dd HH:mm:ss').format(this); + String toLocaleTimeString() => DateFormat('HH:mm:ss').format(this); +} + extension TZDateTimeExtension on TZDateTime { - String toSimpleDateTimeString(BuildContext context) => - DateFormat('MM/dd HH:mm', context.locale.toLanguageTag()).format(this); + String toSimpleDateTimeString() => DateFormat('MM/dd HH:mm').format(this); String toLocaleFullDateString(BuildContext context) => DateFormat('yyyy/MM/dd (EEEE)', context.locale.toLanguageTag()).format(this); String toLocaleDateTimeString(BuildContext context) => diff --git a/lib/utils/extensions/int.dart b/lib/utils/extensions/int.dart index 8aa717177..362c7b055 100644 --- a/lib/utils/extensions/int.dart +++ b/lib/utils/extensions/int.dart @@ -25,7 +25,7 @@ extension CommonContext on int { TZDateTime get asTZDateTime => parseDateTime(this); int get asFahrenheit => (this * 9 / 5 + 32).round(); - String toSimpleDateTimeString(BuildContext context) => asTZDateTime.toSimpleDateTimeString(context); + String toSimpleDateTimeString(BuildContext context) => asTZDateTime.toSimpleDateTimeString(); String toLocaleFullDateString(BuildContext context) => asTZDateTime.toLocaleFullDateString(context); String toLocaleDateTimeString(BuildContext context) => asTZDateTime.toLocaleDateTimeString(context); String toLocaleTimeString(BuildContext context) => asTZDateTime.toLocaleTimeString(context); diff --git a/lib/utils/extensions/latlng.dart b/lib/utils/extensions/latlng.dart index e427a854d..5f4b61a31 100644 --- a/lib/utils/extensions/latlng.dart +++ b/lib/utils/extensions/latlng.dart @@ -1,5 +1,4 @@ -import 'dart:math'; - +import 'package:geolocator/geolocator.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:dpip/utils/geojson.dart'; @@ -11,17 +10,7 @@ extension GeoJsonLatLng on LatLng { return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(toGeoJsonCoordinates() as List); } - double to(LatLng other) { - final lat1 = latitude * pi / 180; - final lat2 = other.latitude * pi / 180; - final lon1 = longitude * pi / 180; - final lon2 = other.longitude * pi / 180; - - final dlon = lon2 - lon1; - final dlat = lat2 - lat1; - final a = sin(dlat / 2) * sin(dlat / 2) + cos(lat1) * cos(lat2) * sin(dlon / 2) * sin(dlon / 2); - final c = 2 * atan2(sqrt(a), sqrt(1 - a)); - - return 6371.0 * c; - } + /// Calculates the distance between the supplied coordinates in meters. The distance between the coordinates is + /// calculated using the Haversine formula (see https://en.wikipedia.org/wiki/Haversine_formula). + double to(LatLng other) => Geolocator.distanceBetween(latitude, longitude, other.latitude, other.longitude); } diff --git a/lib/utils/extensions/preference.dart b/lib/utils/extensions/preference.dart index c2ab5ceff..6ef63541f 100644 --- a/lib/utils/extensions/preference.dart +++ b/lib/utils/extensions/preference.dart @@ -1,5 +1,7 @@ import 'package:shared_preferences/shared_preferences.dart'; +import 'package:dpip/utils/log.dart'; + extension PreferenceExtension on SharedPreferencesWithCache { /// Sets a value of any supported type to SharedPreferences. /// @@ -16,23 +18,30 @@ extension PreferenceExtension on SharedPreferencesWithCache { /// /// If [value] is null or omitted, the key will be removed from SharedPreferences. Future set(String key, [T? value]) { - if (value == null) { - return remove(key); - } + try { + if (value == null) { + return remove(key); + } - switch (value) { - case String(): - return setString(key, value); - case int(): - return setInt(key, value); - case bool(): - return setBool(key, value); - case double(): - return setDouble(key, value); - case List(): - return setStringList(key, value); - default: - throw ArgumentError.value(value, 'value', 'Unsupported type: ${value.runtimeType}'); + switch (value) { + case String(): + return setString(key, value); + case int(): + return setInt(key, value); + case bool(): + return setBool(key, value); + case double(): + return setDouble(key, value); + case List(): + return setStringList(key, value); + default: + throw ArgumentError.value(value, 'value', 'Unsupported type: ${value.runtimeType}'); + } + } catch (e, s) { + TalkerManager.instance.error('💾 $key set to "$value" FAILED', e, s); + rethrow; + } finally { + TalkerManager.instance.info('💾 $key set to "$value"'); } } } diff --git a/lib/utils/extensions/string.dart b/lib/utils/extensions/string.dart index eaaba9b36..a0505f473 100644 --- a/lib/utils/extensions/string.dart +++ b/lib/utils/extensions/string.dart @@ -15,7 +15,7 @@ extension StringExtension on String { String toLocaleFullDateString(BuildContext context) => asInt.asTZDateTime.toLocaleFullDateString(context); String toLocaleTimeString(BuildContext context) => asInt.asTZDateTime.toLocaleTimeString(context); - String toSimpleDateTimeString(BuildContext context) => asInt.asTZDateTime.toSimpleDateTimeString(context); + String toSimpleDateTimeString(BuildContext context) => asInt.asTZDateTime.toSimpleDateTimeString(); Text get asText => Text(this); TextSpan get asTextSpan => TextSpan(text: this); diff --git a/lib/utils/geojson.dart b/lib/utils/geojson.dart index 260b7626d..7f5217355 100644 --- a/lib/utils/geojson.dart +++ b/lib/utils/geojson.dart @@ -62,7 +62,7 @@ class GeoJsonFeatureBuilder { } GeoJsonFeatureBuilder setProperty(String key, dynamic value) { - this.properties[key] = value; + properties[key] = value; return this; } diff --git a/lib/utils/location_to_code.dart b/lib/utils/location_to_code.dart deleted file mode 100644 index 0cb648846..000000000 --- a/lib/utils/location_to_code.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/services.dart' show rootBundle; - -class GeoJsonProperties { - final String town; - final String county; - final String name; - final int code; - - GeoJsonProperties({required this.town, required this.county, required this.name, required this.code}); - - factory GeoJsonProperties.fromJson(Map json) { - return GeoJsonProperties( - town: json['TOWN'] as String, - county: json['COUNTY'] as String, - name: json['NAME'] as String, - code: json['CODE'] as int, - ); - } - - @override - String toString() { - return 'GeoJsonProperties(town: $town, county: $county, name: $name, code: $code)'; - } -} - -class GeoJsonHelper { - static Map? _geoJsonData; - - static Future loadGeoJson(String geojsonAssetPath) async { - final String geojsonStr = await rootBundle.loadString(geojsonAssetPath); - _geoJsonData = json.decode(geojsonStr); - } - - static GeoJsonProperties? checkPointInPolygons(double lat, double lng) { - if (_geoJsonData == null) return null; - for (final feature in _geoJsonData!['features']) { - if (feature['geometry']['type'] == 'Polygon' || feature['geometry']['type'] == 'MultiPolygon') { - final List>> polygons = _getPolygons(feature['geometry']); - - for (final polygon in polygons) { - if (_isPointInPolygon(lat, lng, polygon)) { - return GeoJsonProperties.fromJson(feature['properties']); - } - } - } - } - return null; - } - - static List>> _getPolygons(Map geometry) { - final List>> polygons = []; - - if (geometry['type'] == 'Polygon') { - polygons.add(_convertToDoubleList(geometry['coordinates'][0])); - } else if (geometry['type'] == 'MultiPolygon') { - for (final polygon in geometry['coordinates']) { - polygons.add(_convertToDoubleList(polygon[0])); - } - } - - return polygons; - } - - static List> _convertToDoubleList(List coordinates) { - return coordinates.map>((coord) { - if (coord is List) { - return coord.map((e) => e is num ? e.toDouble() : 0.0).toList(); - } else { - return [0.0, 0.0]; - } - }).toList(); - } - - static bool _isPointInPolygon(double lat, double lng, List> polygon) { - bool isInside = false; - int j = polygon.length - 1; - for (int i = 0; i < polygon.length; i++) { - final double xi = polygon[i][0]; - final double yi = polygon[i][1]; - final double xj = polygon[j][0]; - final double yj = polygon[j][1]; - - final bool intersect = ((yi > lat) != (yj > lat)) && (lng < (xj - xi) * (lat - yi) / (yj - yi) + xi); - if (intersect) isInside = !isInside; - - j = i; - } - return isInside; - } -} diff --git a/lib/utils/map_utils.dart b/lib/utils/map_utils.dart index 8c05bb7ce..da3b93636 100644 --- a/lib/utils/map_utils.dart +++ b/lib/utils/map_utils.dart @@ -1,9 +1,12 @@ import 'dart:math'; +import 'package:geojson_vi/geojson_vi.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/api/model/eew.dart'; +import 'package:dpip/global.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; List expandBounds(List bounds, LatLng point) { // [南西,北東] @@ -184,3 +187,72 @@ bool checkBoxSkip(Map eewLastInfo, Map eewDist, Lis return passed; } + +String? getTownCodeFromCoordinates(LatLng target) { + final features = Global.townGeojson.features; + + for (final feature in features) { + if (feature == null) continue; + + final geometry = feature.geometry; + if (geometry == null) continue; + + bool isInPolygon = false; + + if (geometry is GeoJSONPolygon) { + final polygon = geometry.coordinates[0]; + + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + final double xi = polygon[i][0]; + final double yi = polygon[i][1]; + final double xj = polygon[j][0]; + final double yj = polygon[j][1]; + + final bool intersect = + ((yi > target.latitude) != (yj > target.latitude)) && + (target.longitude < (xj - xi) * (target.latitude - yi) / (yj - yi) + xi); + if (intersect) isInside = !isInside; + + j = i; + } + isInPolygon = isInside; + } + + if (geometry is GeoJSONMultiPolygon) { + final multiPolygon = geometry.coordinates; + + for (final polygonCoordinates in multiPolygon) { + final polygon = polygonCoordinates[0]; + + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + final double xi = polygon[i][0]; + final double yi = polygon[i][1]; + final double xj = polygon[j][0]; + final double yj = polygon[j][1]; + + final bool intersect = + ((yi > target.latitude) != (yj > target.latitude)) && + (target.longitude < (xj - xi) * (target.latitude - yi) / (yj - yi) + xi); + if (intersect) isInside = !isInside; + + j = i; + } + + if (isInside) { + isInPolygon = true; + break; + } + } + } + + if (isInPolygon) { + return feature.properties!['CODE']?.toString(); + } + } + + return null; +} diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 76b4ff074..6c66456cf 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -220,7 +220,7 @@ class DpipMapState extends State { await getSavedLocation(); } - final location = GlobalProviders.location.coordinateNotifier.value; + final location = GlobalProviders.location.coordinates; const sourceId = BaseMapSourceIds.userLocation; const layerId = BaseMapLayerIds.userLocation; @@ -228,7 +228,7 @@ class DpipMapState extends State { final isSourceExists = (await controller.getSourceIds()).contains(sourceId); final isLayerExists = (await controller.getLayerIds()).contains(layerId); - if (!location.isValid) { + if (location == null || !location.isValid) { if (isLayerExists) { await controller.removeLayer(layerId); TalkerManager.instance.info('Removed Layer "$layerId"'); @@ -285,7 +285,7 @@ class DpipMapState extends State { void initState() { super.initState(); - GlobalProviders.location.coordinateNotifier.addListener(_updateUserLocation); + GlobalProviders.location.$coordinates.addListener(_updateUserLocation); getApplicationDocumentsDirectory().then((dir) async { final documentDir = dir.path; @@ -355,7 +355,7 @@ class DpipMapState extends State { @override void dispose() { - GlobalProviders.location.coordinateNotifier.removeListener(_updateUserLocation); + GlobalProviders.location.$coordinates.removeListener(_updateUserLocation); super.dispose(); } } diff --git a/pubspec.lock b/pubspec.lock index d97c17bc5..4eb5919f5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -570,6 +570,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + geojson_vi: + dependency: "direct main" + description: + name: geojson_vi + sha256: a47e0efd17617aef8b239719ea2a3ef743563e873709531ee5498ccfd04069f2 + url: "https://pub.dev" + source: hosted + version: "2.2.5" geolocator: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 2dc1c66e6..6400a270f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -63,6 +63,7 @@ dependencies: url_launcher: ^6.3.1 ip_country_lookup: ^1.0.0 flutter_icmp_ping: ^3.1.3 + geojson_vi: ^2.2.5 dependency_overrides: intl: 0.19.0 From b37bdb49679953e1da302d1a1c0b585a8b60e02e Mon Sep 17 00:00:00 2001 From: Kamiya Date: Fri, 8 Aug 2025 23:04:49 +0800 Subject: [PATCH 07/59] fix: label layer visibility when switching time (#351) --- lib/app/map/_lib/managers/precipitation.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index 9d19fbdfd..8a5b8f963 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -82,8 +82,10 @@ class PrecipitationMapLayerManager extends MapLayerManager { final hideLayerId = '$layerId-${currentPrecipitationInterval.value}'; await controller.setLayerVisibility(showLayerId, true); + await controller.setLayerVisibility('$showLayerId-label', true); await controller.setLayerVisibility(hideLayerId, false); + await controller.setLayerVisibility('$hideLayerId-label', false); currentPrecipitationInterval.value = interval; } catch (e, s) { From ee97bdbfa2a43fea7def2487b1597a71503c17cd Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sat, 9 Aug 2025 07:25:46 +0800 Subject: [PATCH 08/59] feat: favorite locations (#352) * feat: favorite locations * fix: enable logic * feat: i18n --- lib/app/settings/location/page.dart | 134 +++++++++++------- .../settings/location/select/[city]/page.dart | 53 +++---- lib/models/settings/location.dart | 22 ++- lib/widgets/list/list_tile.dart | 1 + 4 files changed, 118 insertions(+), 92 deletions(-) diff --git a/lib/app/settings/location/page.dart b/lib/app/settings/location/page.dart index f74a21f5d..b705ff44b 100644 --- a/lib/app/settings/location/page.dart +++ b/lib/app/settings/location/page.dart @@ -1,16 +1,20 @@ import 'dart:io'; +import 'package:dpip/api/exptech.dart'; +import 'package:dpip/core/preference.dart'; +import 'package:dpip/utils/toast.dart'; +import 'package:dpip/widgets/ui/loading_icon.dart'; import 'package:flutter/material.dart'; import 'package:autostarter/autostarter.dart'; import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:go_router/go_router.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; -import 'package:dpip/app/settings/location/select/%5Bcity%5D/page.dart'; import 'package:dpip/app/settings/location/select/page.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/providers.dart'; @@ -156,8 +160,8 @@ class _SettingsLocationPageState extends State with Widget } await DisableBatteryOptimization.showEnableAutoStartSettings( - '自動啟動', - '為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。', + '自動啟動'.i18n, + '為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。'.i18n, ); } @@ -178,8 +182,8 @@ class _SettingsLocationPageState extends State with Widget if (status == null || status) break manufacturerBatteryOptimization; await DisableBatteryOptimization.showEnableAutoStartSettings( - '省電策略', - '為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。', + '省電策略'.i18n, + '為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。'.i18n, ); } @@ -213,7 +217,7 @@ class _SettingsLocationPageState extends State with Widget @override Widget build(BuildContext context) { - final permissionType = Platform.isAndroid ? '一律允許' : '永遠'; + final permissionType = Platform.isAndroid ? '一律允許'.i18n : '永遠'.i18n; return ListView( padding: EdgeInsets.only(top: 8, bottom: 16 + context.padding.bottom), @@ -260,11 +264,11 @@ class _SettingsLocationPageState extends State with Widget const SizedBox(width: 8), Expanded( child: Text( - '自動定位功能需要將位置權限提升至「$permissionType」以在背景使用。', + '自動定位功能需要將位置權限提升至「$permissionType」以在背景使用。'.i18n, style: TextStyle(color: context.colors.error), ), ), - TextButton(child: const Text('設定'), onPressed: () => openAppSettings()), + TextButton(child: Text('設定'.i18n), onPressed: () => openAppSettings()), ], ), ), @@ -293,8 +297,10 @@ class _SettingsLocationPageState extends State with Widget child: Icon(Symbols.warning_rounded, color: context.colors.error), ), const SizedBox(width: 8), - Expanded(child: Text('通知功能已被拒絕,請移至設定允許權限。', style: TextStyle(color: context.colors.error))), - TextButton(child: const Text('設定'), onPressed: () => openAppSettings()), + Expanded( + child: Text('通知功能已被拒絕,請移至設定允許權限。'.i18n, style: TextStyle(color: context.colors.error)), + ), + TextButton(child: Text('設定'.i18n), onPressed: () => openAppSettings()), ], ), ), @@ -317,10 +323,10 @@ class _SettingsLocationPageState extends State with Widget child: SettingsListTextSection( icon: Symbols.warning_rounded, iconColor: context.colors.error, - content: '自啟動權限已被拒絕,請移至設定允許權限。', + content: '自啟動權限已被拒絕,請移至設定允許權限。'.i18n, contentColor: context.colors.error, trailing: TextButton( - child: const Text('設定'), + child: Text('設定'.i18n), onPressed: () => Autostarter.getAutoStartPermission(newTask: true), ), ), @@ -343,10 +349,10 @@ class _SettingsLocationPageState extends State with Widget child: SettingsListTextSection( icon: Symbols.warning_rounded, iconColor: context.colors.error, - content: '省電策略已被拒絕,請移至設定允許權限。', + content: '省電策略已被拒絕,請移至設定允許權限。'.i18n, contentColor: context.colors.error, trailing: TextButton( - child: const Text('設定'), + child: Text('設定'.i18n), onPressed: () { DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); }, @@ -356,44 +362,72 @@ class _SettingsLocationPageState extends State with Widget ); }, ), - ListSection( - title: '所在地'.i18n, - children: [ - Selector( - selector: (context, model) => (auto: model.auto, code: model.code), - builder: (context, data, child) { - final (:auto, :code) = data; - final city = Global.location[code]?.city; - - return ListSectionTile( - title: '直轄市/縣市'.i18n, - subtitle: Text(city ?? '尚未設定'.i18n), - icon: Symbols.location_city_rounded, - trailing: const Icon(Symbols.chevron_right_rounded), - enabled: !auto, - onTap: () => context.push(SettingsLocationSelectPage.route), - ); - }, - ), - Selector( - selector: (context, model) => (auto: model.auto, code: model.code), - builder: (context, data, child) { - final (:auto, :code) = data; - - final city = Global.location[code]?.city; - final town = Global.location[code]?.town; - - return ListSectionTile( - title: '鄉鎮市區'.i18n, - subtitle: Text(town ?? '尚未設定'.i18n), - icon: Symbols.forest_rounded, - trailing: const Icon(Symbols.chevron_right_rounded), - enabled: !auto && city != null, - onTap: city == null ? null : () => context.push(SettingsLocationSelectCityPage.route(city)), + Consumer( + builder: (context, model, child) { + String? loadingCode; + + return StatefulBuilder( + builder: (context, setState) { + return ListSection( + title: '所在地'.i18n, + children: [ + ...model.favorited.map((code) { + final location = Global.location[code]!; + + final isCurrentLoading = loadingCode == code; + final isSelected = code == model.code; + + return ListSectionTile( + title: '${location.city} ${location.town}', + subtitle: Text( + '$code・${location.lng.toStringAsFixed(2)}°E・${location.lat.toStringAsFixed(2)}°N', + ), + leading: + isCurrentLoading + ? const LoadingIcon() + : Icon(isSelected ? Symbols.check_rounded : null, color: context.colors.primary), + trailing: IconButton( + icon: const Icon(Symbols.delete_rounded), + color: context.colors.error, + onPressed: isCurrentLoading ? null : () => model.unfavorite(code), + ), + enabled: !model.auto && loadingCode == null, + onTap: + isSelected + ? null + : () async { + setState(() => loadingCode = code); + + try { + await ExpTech().updateDeviceLocation( + token: Preference.notifyToken, + coordinates: LatLng(location.lat, location.lng), + ); + + if (!context.mounted) return; + + model.setCode(code); + } catch (e, s) { + if (!context.mounted) return; + TalkerManager.instance.error('Failed to set location code', e, s); + showToast(context, ToastWidget.text('設定所在地時發生錯誤,請稍候再試一次。'.i18n)); + } + + setState(() => loadingCode = null); + }, + ); + }), + ListSectionTile( + title: '新增地點'.i18n, + icon: Symbols.add_circle_rounded, + enabled: loadingCode == null, + onTap: () => context.push(SettingsLocationSelectPage.route), + ), + ], ); }, - ), - ], + ); + }, ), ], ); diff --git a/lib/app/settings/location/select/[city]/page.dart b/lib/app/settings/location/select/[city]/page.dart index 26c85a14c..49dd39a2a 100644 --- a/lib/app/settings/location/select/[city]/page.dart +++ b/lib/app/settings/location/select/[city]/page.dart @@ -1,18 +1,16 @@ +import 'dart:collection'; + import 'package:flutter/material.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:provider/provider.dart'; -import 'package:dpip/api/exptech.dart'; import 'package:dpip/app/settings/location/page.dart'; -import 'package:dpip/core/preference.dart'; import 'package:dpip/global.dart'; import 'package:dpip/models/settings/location.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/widgets/list/list_section.dart'; import 'package:dpip/widgets/list/list_tile.dart'; -import 'package:dpip/widgets/ui/loading_icon.dart'; class SettingsLocationSelectCityPage extends StatefulWidget { final String city; @@ -26,8 +24,6 @@ class SettingsLocationSelectCityPage extends StatefulWidget { } class _SettingsLocationSelectCityPageState extends State { - String? loadingTown; - @override Widget build(BuildContext context) { final towns = Global.location.entries.where((e) => e.value.city == widget.city).toList(); @@ -38,36 +34,23 @@ class _SettingsLocationSelectCityPageState extends State( - selector: (context, model) => model.code, - builder: (context, code, child) { - return ListSectionTile( - title: '${town.value.city} ${town.value.town}', - subtitle: Text( - '${town.key}・${town.value.lng.toStringAsFixed(2)}°E・${town.value.lat.toStringAsFixed(2)}°N', - ), - trailing: - loadingTown == town.key - ? const LoadingIcon() - : Icon(code == town.key ? Symbols.check_rounded : null), - enabled: loadingTown == null, - onTap: () async { - if (loadingTown != null) return; + for (final MapEntry(key: code, value: town) in towns) + Selector>( + selector: (context, model) => model.favorited, + builder: (context, favorited, child) { + final isFavorited = favorited.contains(code); - setState(() => loadingTown = town.key); - await ExpTech().updateDeviceLocation( - token: Preference.notifyToken, - coordinates: LatLng(town.value.lat, town.value.lng), - ); - - if (!context.mounted) return; - setState(() => loadingTown = null); - - context.read().setCode(town.key); - context.read().setCoordinates(LatLng(town.value.lat, town.value.lng)); - context.popUntil(SettingsLocationPage.route); - }, + return ListSectionTile( + title: '${town.city} ${town.town}', + subtitle: Text('$code・${town.lng.toStringAsFixed(2)}°E・${town.lat.toStringAsFixed(2)}°N'), + trailing: isFavorited ? const Icon(Symbols.star_rounded, fill: 1) : null, + onTap: + isFavorited + ? null + : () { + context.read().favorite(code); + context.popUntil(SettingsLocationPage.route); + }, ); }, ), diff --git a/lib/models/settings/location.dart b/lib/models/settings/location.dart index 5402fde41..90958a072 100644 --- a/lib/models/settings/location.dart +++ b/lib/models/settings/location.dart @@ -138,14 +138,14 @@ class _SettingsLocationModel extends ChangeNotifier { /// Returns a [List] of [String] containing the postal codes of the favorited locations. /// /// Defaults to an empty list if no favorited locations have been set. - final $favorited = ValueNotifier(Preference.locationFavorited); + final $favorited = ValueNotifier(Preference.locationFavorited.toSet()); /// The list of favorited locations. /// - /// Returns a [List] containing the postal codes of the favorited locations. + /// Returns a [UnmodifiableSetView] containing the postal codes of the favorited locations. /// - /// Defaults to an empty list if no favorited locations have been set. - UnmodifiableListView get favorited => UnmodifiableListView($favorited.value); + /// Defaults to an empty [Set] if no favorited locations have been set. + UnmodifiableSetView get favorited => UnmodifiableSetView($favorited.value); /// Adds a location to the list of favorited locations. /// @@ -153,7 +153,11 @@ class _SettingsLocationModel extends ChangeNotifier { /// /// If the location is already favorited, this method will do nothing. void favorite(String code) { - Preference.locationFavorited.add(code); + final list = {...Preference.locationFavorited}..add(code); + + Preference.locationFavorited = list.toList(); + + $favorited.value = list; notifyListeners(); } @@ -164,7 +168,11 @@ class _SettingsLocationModel extends ChangeNotifier { /// /// If the location is not favorited, this method will do nothing. void unfavorite(String code) { - Preference.locationFavorited.remove(code); + final list = {...Preference.locationFavorited}..remove(code); + + Preference.locationFavorited = list.toList(); + + $favorited.value = list; notifyListeners(); } @@ -181,7 +189,7 @@ class _SettingsLocationModel extends ChangeNotifier { ? LatLng(Preference.locationLatitude!, Preference.locationLongitude!) : null; $auto.value = Preference.locationAuto ?? false; - $favorited.value = Preference.locationFavorited; + $favorited.value = Preference.locationFavorited.toSet(); } } diff --git a/lib/widgets/list/list_tile.dart b/lib/widgets/list/list_tile.dart index 073a0c789..2704c0281 100644 --- a/lib/widgets/list/list_tile.dart +++ b/lib/widgets/list/list_tile.dart @@ -32,6 +32,7 @@ class ListSectionTile extends StatelessWidget { title: Text(title, style: titleStyle ?? const TextStyle(fontWeight: FontWeight.bold)), subtitle: subtitle, trailing: trailing, + contentPadding: const EdgeInsets.symmetric(horizontal: 16), enabled: enabled, visualDensity: VisualDensity.comfortable, onTap: onTap, From abac695ac4bf43c090c61a07f29175c6a3660369 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sat, 9 Aug 2025 14:58:27 +0800 Subject: [PATCH 09/59] feat: rts map values (#353) --- lib/app/map/_lib/managers/monitor.dart | 94 ++++++++++++++++++++++++++ lib/models/data.dart | 8 +++ lib/widgets/map/map.dart | 2 +- 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 8e4c6eb5a..c9d29d2c1 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -127,6 +127,8 @@ class MonitorMapLayerManager extends MapLayerManager { Future setup() async { if (didSetup) return; + final colors = context.colors; + try { final sources = await controller.getSourceIds(); final layers = await controller.getLayerIds(); @@ -213,9 +215,96 @@ class MonitorMapLayerManager extends MapLayerManager { ], visibility: visible ? 'visible' : 'none', ); + final properties2 = SymbolLayerProperties( + textField: [ + Expressions.format, + [Expressions.get, 'id'], + { + 'text-font': [ + Expressions.literal, + ['Noto Sans TC Bold'], + ], + }, + '\n', + {}, + [ + Expressions.caseExpression, + [ + Expressions.all, + [Expressions.has, 'city'], + [Expressions.has, 'town'], + ], + [ + Expressions.concat, + [Expressions.get, 'city'], + ' ', + [Expressions.get, 'town'], + ], + '海外測站'.i18n, + ], + { + 'text-font': [ + Expressions.literal, + ['Noto Sans TC Bold'], + ], + }, + '\n', + {}, + [ + Expressions.caseExpression, + [ + Expressions.all, + [Expressions.has, 'i'], + [Expressions.has, 'pga'], + [Expressions.has, 'pgv'], + ], + [ + Expressions.concat, + [ + Expressions.concat, + '即時震度:'.i18n, + [Expressions.get, 'i'], + ], + '\n', + [ + Expressions.concat, + '地動加速度:'.i18n, + [Expressions.get, 'pga'], + 'gal', + ], + '\n', + [ + Expressions.concat, + '地動速度:'.i18n, + [Expressions.get, 'pgv'], + 'cm/s', + ], + ], + '無資料'.i18n, + ], + {}, + ], + textSize: 10, + textColor: colors.onSurfaceVariant.toHexStringRGB(), + textHaloColor: colors.outlineVariant.toHexStringRGB(), + textHaloWidth: 1, + textFont: ['Noto Sans TC Regular'], + textOffset: [0, 1], + textAnchor: 'top', + visibility: visible ? 'visible' : 'none', + ); await controller.addLayer(rtsSourceId, rtsLayerId, properties, belowLayerId: BaseMapLayerIds.userLocation); TalkerManager.instance.info('Added Layer "$rtsLayerId"'); + + await controller.addLayer( + rtsSourceId, + '$rtsLayerId-label', + properties2, + belowLayerId: BaseMapLayerIds.userLocation, + minzoom: 10, + ); + TalkerManager.instance.info('Added Layer "$rtsLayerId-label"'); } // 2. Intensity0 图层 @@ -448,6 +537,7 @@ class MonitorMapLayerManager extends MapLayerManager { final hasBox = GlobalProviders.data.rts?.box.isNotEmpty ?? false; await controller.setLayerVisibility(rtsLayerId, !hasBox); + await controller.setLayerVisibility('$rtsLayerId-label', !hasBox); await controller.setLayerVisibility(intensityLayerId, hasBox); await controller.setLayerVisibility(intensity0LayerId, hasBox); await controller.setLayerVisibility(boxLayerId, hasBox); @@ -533,6 +623,7 @@ class MonitorMapLayerManager extends MapLayerManager { // rts await controller.setLayerVisibility(rtsLayerId, false); + await controller.setLayerVisibility('$rtsLayerId-label', false); // intensity await controller.setLayerVisibility(intensityLayerId, false); @@ -569,6 +660,7 @@ class MonitorMapLayerManager extends MapLayerManager { final hasBox = GlobalProviders.data.rts?.box.isNotEmpty ?? false; await controller.setLayerVisibility(rtsLayerId, !hasBox); + await controller.setLayerVisibility('$rtsLayerId-label', !hasBox); await controller.setLayerVisibility(intensityLayerId, hasBox); await controller.setLayerVisibility(intensity0LayerId, hasBox); @@ -606,6 +698,8 @@ class MonitorMapLayerManager extends MapLayerManager { // rts await controller.removeLayer(rtsLayerId); TalkerManager.instance.info('Removed Layer "$rtsLayerId"'); + await controller.removeLayer('$rtsLayerId-label'); + TalkerManager.instance.info('Removed Layer "$rtsLayerId-label"'); await controller.removeSource(rtsSourceId); TalkerManager.instance.info('Removed Source "$rtsSourceId"'); diff --git a/lib/models/data.dart b/lib/models/data.dart index e043d11f4..faa52a188 100644 --- a/lib/models/data.dart +++ b/lib/models/data.dart @@ -287,6 +287,7 @@ class DpipDataModel extends _DpipDataModel { GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) ..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List) ..setId(int.parse(id)) + ..setProperty('id', id) ..setProperty('net', s.net) ..setProperty('code', s.info.last.code); @@ -302,6 +303,13 @@ class DpipDataModel extends _DpipDataModel { } } + final location = Global.location['${s.info.last.code}']; + if (location != null) { + feature + ..setProperty('city', location.city) + ..setProperty('town', location.town); + } + builder.addFeature(feature); } diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 6c66456cf..2690b8dae 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -328,7 +328,7 @@ class DpipMapState extends State { final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom); return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12), + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 15), trackCameraPosition: true, initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), styleString: styleAbsoluteFilePath!, From 9ca1ae2427d7bfafb0b7876edda0f6f79f20f00f Mon Sep 17 00:00:00 2001 From: Lingling Date: Sat, 9 Aug 2025 18:07:58 +0800 Subject: [PATCH 10/59] chore: improved startup time (#354) * pubspec * Revert "pubspec" * Podfile * chore(global): Improved startup time * fix: CI Xcode 16.2 --- .github/workflows/ios.yml | 3 + ios/Podfile.lock | 159 ++++++++++++-------------------------- lib/global.dart | 37 ++++++--- lib/models/data.dart | 19 +++-- pubspec.lock | 44 +++++------ pubspec.yaml | 4 +- 6 files changed, 110 insertions(+), 156 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index e0df4aeae..74cd3e5ab 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -31,6 +31,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Switch Xcode to 16.2 + run: sudo xcode-select -s /Applications/Xcode_16.2.app + - name: Cache Flutter SDK uses: actions/cache@v3 with: diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5d793b88b..ba7d51999 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -13,81 +13,46 @@ PODS: - IosAwnFcmCore (~> 0.10.1) - device_info_plus (0.0.1): - Flutter - - Firebase/CoreOnly (11.10.0): - - FirebaseCore (~> 11.10.0) - - Firebase/Crashlytics (11.10.0): + - Firebase/CoreOnly (11.15.0): + - FirebaseCore (~> 11.15.0) + - Firebase/Messaging (11.15.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 11.10.0) - - Firebase/Messaging (11.10.0): - - Firebase/CoreOnly - - FirebaseMessaging (~> 11.10.0) - - firebase_core (3.13.0): - - Firebase/CoreOnly (= 11.10.0) - - Flutter - - firebase_crashlytics (4.3.5): - - Firebase/Crashlytics (= 11.10.0) - - firebase_core + - FirebaseMessaging (~> 11.15.0) + - firebase_core (3.15.2): + - Firebase/CoreOnly (= 11.15.0) - Flutter - - firebase_messaging (15.2.5): - - Firebase/Messaging (= 11.10.0) + - firebase_messaging (15.2.10): + - Firebase/Messaging (= 11.15.0) - firebase_core - Flutter - - FirebaseCore (11.10.0): - - FirebaseCoreInternal (~> 11.10.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreExtension (11.10.0): - - FirebaseCore (~> 11.10.0) - - FirebaseCoreInternal (11.10.0): - - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseCrashlytics (11.10.0): - - FirebaseCore (~> 11.10.0) - - FirebaseInstallations (~> 11.0) - - FirebaseRemoteConfigInterop (~> 11.0) - - FirebaseSessions (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/Environment (~> 8.0) - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - FirebaseInstallations (11.10.0): - - FirebaseCore (~> 11.10.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) + - FirebaseCore (11.15.0): + - FirebaseCoreInternal (~> 11.15.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - FirebaseCoreInternal (11.15.0): + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseInstallations (11.15.0): + - FirebaseCore (~> 11.15.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.10.0): - - FirebaseCore (~> 11.10.0) + - FirebaseMessaging (11.15.0): + - FirebaseCore (~> 11.15.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/Reachability (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Reachability (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) - nanopb (~> 3.30910.0) - - FirebaseRemoteConfigInterop (11.15.0) - - FirebaseSessions (11.10.0): - - FirebaseCore (~> 11.10.0) - - FirebaseCoreExtension (~> 11.10.0) - - FirebaseInstallations (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - nanopb (~> 3.30910.0) - - PromisesSwift (~> 2.1) - Flutter (1.0.0) - - flutter_background_service_ios (0.0.3): - - Flutter - flutter_icmp_ping (0.0.1): - Flutter - - flutter_local_notifications (0.0.1): - - Flutter - fluttertoast (0.0.2): - Flutter - gal (1.0.0): - Flutter - FlutterMacOS - - geolocator_apple (1.2.0): - - Flutter - - FlutterMacOS - GoogleDataTransport (10.1.0): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) @@ -157,8 +122,6 @@ PODS: - permission_handler_apple (9.3.0): - Flutter - PromisesObjC (2.4.0) - - PromisesSwift (2.4.0): - - PromisesObjC (= 2.4.0) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -176,15 +139,11 @@ DEPENDENCIES: - awesome_notifications_fcm (from `.symlinks/plugins/awesome_notifications_fcm/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - Flutter (from `Flutter`) - - flutter_background_service_ios (from `.symlinks/plugins/flutter_background_service_ios/ios`) - flutter_icmp_ping (from `.symlinks/plugins/flutter_icmp_ping/ios`) - - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - gal (from `.symlinks/plugins/gal/darwin`) - - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`) - maplibre_gl (from `.symlinks/plugins/maplibre_gl/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) @@ -199,13 +158,9 @@ SPEC REPOS: trunk: - Firebase - FirebaseCore - - FirebaseCoreExtension - FirebaseCoreInternal - - FirebaseCrashlytics - FirebaseInstallations - FirebaseMessaging - - FirebaseRemoteConfigInterop - - FirebaseSessions - GoogleDataTransport - GoogleUtilities - IosAwnCore @@ -213,7 +168,6 @@ SPEC REPOS: - MapLibre - nanopb - PromisesObjC - - PromisesSwift EXTERNAL SOURCES: awesome_notifications: @@ -226,24 +180,16 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/device_info_plus/ios" firebase_core: :path: ".symlinks/plugins/firebase_core/ios" - firebase_crashlytics: - :path: ".symlinks/plugins/firebase_crashlytics/ios" firebase_messaging: :path: ".symlinks/plugins/firebase_messaging/ios" Flutter: :path: Flutter - flutter_background_service_ios: - :path: ".symlinks/plugins/flutter_background_service_ios/ios" flutter_icmp_ping: :path: ".symlinks/plugins/flutter_icmp_ping/ios" - flutter_local_notifications: - :path: ".symlinks/plugins/flutter_local_notifications/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" gal: :path: ".symlinks/plugins/gal/darwin" - geolocator_apple: - :path: ".symlinks/plugins/geolocator_apple/darwin" in_app_purchase_storekit: :path: ".symlinks/plugins/in_app_purchase_storekit/darwin" maplibre_gl: @@ -264,46 +210,37 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - awesome_notifications: 0f432b28098d193920b11a44cfa9d2d9313a3888 - awesome_notifications_core: 429c28df8746780a474de177e5acde33af87da63 - awesome_notifications_fcm: ad14f584c81e2488ae4310ab96331327dcbb5368 - device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe - Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2 - firebase_core: 2d4534e7b489907dcede540c835b48981d890943 - firebase_crashlytics: 961a0812ba79ed8f89a8d5d1e3763daa6267a87a - firebase_messaging: 75bc93a4df25faccad67f6662ae872ac9ae69b64 - FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7 - FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac - FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679 - FirebaseCrashlytics: 84b073c997235740e6a951b7ee49608932877e5c - FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3 - FirebaseMessaging: 2b9f56aa4ed286e1f0ce2ee1d413aabb8f9f5cb9 - FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa - FirebaseSessions: 9b3b30947b97a15370e0902ee7a90f50ef60ead6 - Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_background_service_ios: 00d31bdff7b4bfe06d32375df358abe0329cf87e - flutter_icmp_ping: 47c1df3440c18ddd39fc457e607bb3b42d4a339f - flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb - fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 - gal: baecd024ebfd13c441269ca7404792a7152fde89 - geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e + awesome_notifications: dd5518ff1c80be03d4f1c40f04da9d9cc2a37af5 + awesome_notifications_core: d02eed89738fa362d56cbd372850e9adcd2c6bef + awesome_notifications_fcm: 707931990883faf918db11438bdddded93b2b3a6 + device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 + Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e + firebase_core: 99a37263b3c27536063a7b601d9e2a49400a433c + firebase_messaging: bf6697c61f31c7cc0f654131212ff04c0115c2c7 + FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e + FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 + FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 + FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09 + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + flutter_icmp_ping: 2b159955eee0c487c766ad83fec224ae35e7c935 + fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f + gal: 6a522c75909f1244732d4596d11d6a2f86ff37a5 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - in_app_purchase_storekit: d1a48cb0f8b29dbf5f85f782f5dd79b21b90a5e6 + in_app_purchase_storekit: a1ce04056e23eecc666b086040239da7619cd783 IosAwnCore: 653786a911089012092ce831f2945cd339855a89 IosAwnFcmCore: 1bdb9054b2e00187d00f1ffcfbb1855949a7b82f MapLibre: 69e572367f4ef6287e18246cfafc39c80cdcabcd - maplibre_gl: 3c924e44725147b03dda33430ad216005b40555f + maplibre_gl: 753f55d763a81cbdba087d02af02d12206e6f94e nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d + package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a - shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 - sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 - url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe PODFILE CHECKSUM: 3d88bce62bfe048ac33ca00d3fb1bc02caeda4d3 diff --git a/lib/global.dart b/lib/global.dart index f2337f990..16076d933 100644 --- a/lib/global.dart +++ b/lib/global.dart @@ -8,15 +8,17 @@ import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/location/location.dart'; import 'package:dpip/utils/extensions/asset_bundle.dart'; +typedef TimeTable = Map>; + class Global { Global._(); static late PackageInfo packageInfo; static late SharedPreferences preference; static late Map location; + static late GeoJSONFeatureCollection boxGeojson; static late GeoJSONFeatureCollection townGeojson; - static late Map> timeTable; - static late Map box; + static late TimeTable timeTable; static late Map notifyTestContent; static ExpTech api = ExpTech(); @@ -26,10 +28,10 @@ class Global { return data.map((key, value) => MapEntry(key, Location.fromJson(value as Map))); } - static Future loadTimeTableData() async { + static Future loadTimeTableData() async { final data = await rootBundle.loadJson('assets/time.json'); - timeTable = data.map((key, value) { + return data.map((key, value) { final list = (value as List).map((item) { final map = item as Map; @@ -52,6 +54,12 @@ class Global { }); } + static Future loadBoxGeojson() async { + final data = await rootBundle.loadJson('assets/box.json'); + + return GeoJSONFeatureCollection.fromMap(data); + } + static Future loadTownGeojson() async { final data = await rootBundle.loadJson('assets/map/town.json'); @@ -59,13 +67,22 @@ class Global { } static Future init() async { - packageInfo = await PackageInfo.fromPlatform(); - preference = await SharedPreferences.getInstance(); - box = await rootBundle.loadJson('assets/box.json'); - location = await loadLocationData(); - townGeojson = await loadTownGeojson(); + final results = await Future.wait([ + PackageInfo.fromPlatform(), + SharedPreferences.getInstance(), + loadBoxGeojson(), + loadLocationData(), + loadTownGeojson(), + loadTimeTableData(), + ]); + + packageInfo = (results[0] as PackageInfo?)!; + preference = (results[1] as SharedPreferences?)!; + boxGeojson = (results[2] as GeoJSONFeatureCollection?)!; + location = (results[3] as Map?)!; + townGeojson = (results[4] as GeoJSONFeatureCollection?)!; + timeTable = (results[5] as TimeTable?)!; - await loadTimeTableData(); await loadNotifyTestContent(); } } diff --git a/lib/models/data.dart b/lib/models/data.dart index faa52a188..9d0c792e4 100644 --- a/lib/models/data.dart +++ b/lib/models/data.dart @@ -1,7 +1,11 @@ import 'dart:async'; import 'dart:collection'; +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; +import 'package:geojson_vi/geojson_vi.dart'; + import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/eew.dart'; import 'package:dpip/api/model/report/earthquake_report.dart'; @@ -15,7 +19,6 @@ import 'package:dpip/global.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; import 'package:dpip/utils/map_utils.dart'; -import 'package:flutter/material.dart'; class _DpipDataModel extends ChangeNotifier { Map _station = {}; @@ -337,6 +340,7 @@ class DpipDataModel extends _DpipDataModel { GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) ..setGeometry(e.info.latlng.toGeoJsonCoordinates() as List) ..setProperty('type', 'x'); + builder.addFeature(epicenter); } @@ -376,14 +380,15 @@ class DpipDataModel extends _DpipDataModel { final builder = GeoJsonBuilder(); if (rts != null && rts.box.isNotEmpty) { - for (final area in Global.box['features']) { - final id = area['properties']['ID'].toString(); + for (final area in Global.boxGeojson.features) { + if (area == null) continue; + + final id = area.properties!['ID'].toString(); if (!rts.box.containsKey(id)) continue; - final coordinates = - (area['geometry']['coordinates'][0] as List) - .map((e) => (e as List).map((n) => n as double).toList()) - .toList(); + final geometry = area.geometry! as GeoJSONPolygon; + + final coordinates = geometry.coordinates[0]; if (eew.isNotEmpty == true) { final eewMap = {for (final e in eew) e.id: e}; diff --git a/pubspec.lock b/pubspec.lock index 4eb5919f5..a0a351cb2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422 + sha256: ff0a84a2734d9e1089f8aedd5c0af0061b82fb94e95260d943404e0ef2134b11 url: "https://pub.dev" source: hosted - version: "1.3.54" + version: "1.3.59" analyzer: dependency: transitive description: @@ -358,66 +358,66 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe" + sha256: "7be63a3f841fc9663342f7f3a011a42aef6a61066943c90b1c434d79d5c995c5" url: "https://pub.dev" source: hosted - version: "3.13.0" + version: "3.15.2" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf + sha256: "5dbc900677dcbe5873d22ad7fbd64b047750124f1f9b7ebe2a33b9ddccc838eb" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23" + sha256: "0ed0dc292e8f9ac50992e2394e9d336a0275b6ae400d64163fdf0a8a8b556c37" url: "https://pub.dev" source: hosted - version: "2.22.0" + version: "2.24.1" firebase_crashlytics: dependency: transitive description: name: firebase_crashlytics - sha256: f3fa4a17c2f061b16b2e3ac7aaed889ae954b8952d0fd3e0009a9870cde7bbd2 + sha256: "662ae6443da91bca1fb0be8aeeac026fa2975e8b7ddfca36e4d90ebafa35dde1" url: "https://pub.dev" source: hosted - version: "4.3.5" + version: "4.3.10" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: cedfbe39927711c0e56fc38bfecbd89e17816b21698a3d88d63298c530ed375c + sha256: "7222a8a40077c79f6b8b3f3439241c9f2b34e9ddfde8381ffc512f7b2e61f7eb" url: "https://pub.dev" source: hosted - version: "3.8.5" + version: "3.8.10" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "5f8918848ee0c8eb172fc7698619b2bcd7dda9ade8b93522c6297dd8f9178356" + sha256: "60be38574f8b5658e2f22b7e311ff2064bea835c248424a383783464e8e02fcc" url: "https://pub.dev" source: hosted - version: "15.2.5" + version: "15.2.10" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: "0bbea00680249595fc896e7313a2bd90bd55be6e0abbe8b9a39d81b6b306acb6" + sha256: "685e1771b3d1f9c8502771ccc9f91485b376ffe16d553533f335b9183ea99754" url: "https://pub.dev" source: hosted - version: "4.6.5" + version: "4.6.10" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: ffb392ce2a7e8439cd0a9a80e3c702194e73c927e5c7b4f0adf6faa00b245b17 + sha256: "0d1be17bc89ed3ff5001789c92df678b2e963a51b6fa2bdb467532cc9dbed390" url: "https://pub.dev" source: hosted - version: "3.10.5" + version: "3.10.10" fixnum: dependency: transitive description: @@ -1607,14 +1607,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" - source: hosted - version: "1.1.0" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6400a270f..e389dd4ca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,8 +20,8 @@ dependencies: url: https://github.com/pvsvamsi/Disable-Battery-Optimizations.git ref: 414b781 dynamic_system_colors: ^1.8.0 - firebase_core: ^3.13.0 - firebase_messaging: 15.2.5 + firebase_core: 3.15.2 #4.0.0 升級最低支援iOS 15 + firebase_messaging: 15.2.10 fl_chart: ^0.71.0 flex_color_picker: ^3.7.0 flutter: From b5538caadcb58b2883d52c4b5f728a520be7ce50 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sun, 10 Aug 2025 09:23:40 +0800 Subject: [PATCH 11/59] fix: map value placement & typing (#356) * fix: map value placements * fix: typing --- lib/api/model/report/earthquake_report.dart | 10 ++++--- .../report/partial_earthquake_report.dart | 9 ++++-- lib/api/model/rts/rts.dart | 6 ++-- lib/api/model/station_intensity.dart | 10 ++++--- lib/api/model/weather/rain.dart | 8 ++++-- lib/api/model/weather/weather.dart | 6 ++-- lib/app/map/_lib/managers/monitor.dart | 13 ++++++++- lib/core/rts.dart | 28 ++----------------- lib/models/data.dart | 17 +++++++++-- lib/route/report/report.dart | 3 +- lib/utils/extensions/latlng.dart | 4 ++- lib/utils/map_utils.dart | 8 +++--- lib/widgets/map/map.dart | 2 +- 13 files changed, 69 insertions(+), 55 deletions(-) diff --git a/lib/api/model/report/earthquake_report.dart b/lib/api/model/report/earthquake_report.dart index 3c295ee36..b30e93a08 100644 --- a/lib/api/model/report/earthquake_report.dart +++ b/lib/api/model/report/earthquake_report.dart @@ -1,11 +1,13 @@ import 'package:collection/collection.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:timezone/timezone.dart'; + import 'package:dpip/api/model/report/area_intensity.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/map_utils.dart'; import 'package:dpip/utils/parser.dart'; -import 'package:json_annotation/json_annotation.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:timezone/timezone.dart'; part 'earthquake_report.g.dart'; @@ -203,7 +205,7 @@ class EarthquakeReport { .toList(); final cross = GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(latlng.toGeoJsonCoordinates()) + ..setGeometry(latlng.asGeoJsonCooridnate) ..setProperty('icon', 'cross-7') ..setProperty('magnitude', magnitude); diff --git a/lib/api/model/report/partial_earthquake_report.dart b/lib/api/model/report/partial_earthquake_report.dart index 3a1f7ae15..fcd469f94 100644 --- a/lib/api/model/report/partial_earthquake_report.dart +++ b/lib/api/model/report/partial_earthquake_report.dart @@ -1,10 +1,13 @@ -import 'package:dpip/utils/geojson.dart'; -import 'package:dpip/utils/parser.dart'; import 'package:flutter/material.dart'; + import 'package:json_annotation/json_annotation.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:timezone/timezone.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/utils/geojson.dart'; +import 'package:dpip/utils/parser.dart'; + part 'partial_earthquake_report.g.dart'; @JsonSerializable() @@ -163,7 +166,7 @@ class PartialEarthquakeReport { GeoJsonFeatureBuilder toGeoJsonFeature() { return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) .setId(time.millisecondsSinceEpoch) - .setGeometry(latlng.toGeoJsonCoordinates()) + .setGeometry(latlng.asGeoJsonCooridnate) .setProperty('icon', 'cross-$intensity') .setProperty('magnitude', magnitude) .setProperty('intensity', intensity) diff --git a/lib/api/model/rts/rts.dart b/lib/api/model/rts/rts.dart index 04433c24b..112977a51 100644 --- a/lib/api/model/rts/rts.dart +++ b/lib/api/model/rts/rts.dart @@ -1,8 +1,10 @@ +import 'package:json_annotation/json_annotation.dart'; + import 'package:dpip/api/model/rts/rts_intensity.dart'; import 'package:dpip/api/model/rts/rts_station.dart'; import 'package:dpip/core/providers.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; -import 'package:json_annotation/json_annotation.dart'; part 'rts.g.dart'; @@ -38,7 +40,7 @@ class Rts { } return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(latlng.toGeoJsonCoordinates()) + ..setGeometry(latlng.asGeoJsonCooridnate) ..setProperty('id', id) ..setProperty('I', s.I) ..setProperty('i', s.i) diff --git a/lib/api/model/station_intensity.dart b/lib/api/model/station_intensity.dart index d46c0435a..918c96544 100644 --- a/lib/api/model/station_intensity.dart +++ b/lib/api/model/station_intensity.dart @@ -1,7 +1,9 @@ -import 'package:dpip/utils/geojson.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/utils/geojson.dart'; + part 'station_intensity.g.dart'; @JsonSerializable() @@ -25,8 +27,8 @@ class StationIntensity { Map toJson() => _$StationIntensityToJson(this); GeoJsonFeatureBuilder toGeoJsonFeature() { - return GeoJsonFeatureBuilder( - GeoJsonFeatureType.Point, - ).setGeometry(latlng.toGeoJsonCoordinates()).setProperty('icon', 'intensity-$intensity'); + return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) + ..setGeometry(latlng.asGeoJsonCooridnate) + ..setProperty('icon', 'intensity-$intensity'); } } diff --git a/lib/api/model/weather/rain.dart b/lib/api/model/weather/rain.dart index d4af0e2f9..c17cd37a2 100644 --- a/lib/api/model/weather/rain.dart +++ b/lib/api/model/weather/rain.dart @@ -1,8 +1,10 @@ -import 'package:dpip/utils/geojson.dart'; -import 'package:dpip/widgets/map/latlng_altitude.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/utils/geojson.dart'; +import 'package:dpip/widgets/map/latlng_altitude.dart'; + part 'rain.g.dart'; @JsonSerializable() @@ -21,7 +23,7 @@ class RainStation { GeoJsonFeatureBuilder toFeatureBuilder() => GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(station.latlng.toGeoJsonCoordinates()) + ..setGeometry(station.latlng.asGeoJsonCooridnate) ..setProperty('id', id) ..setProperty('name', station.name) ..setProperty('county', station.county) diff --git a/lib/api/model/weather/weather.dart b/lib/api/model/weather/weather.dart index bb1bfcec1..49e745784 100644 --- a/lib/api/model/weather/weather.dart +++ b/lib/api/model/weather/weather.dart @@ -1,7 +1,9 @@ -import 'package:dpip/utils/geojson.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/utils/geojson.dart'; + part 'weather.g.dart'; @JsonSerializable() @@ -25,7 +27,7 @@ class WeatherStation { GeoJsonFeatureBuilder toFeatureBuilder() { final direction = (data.wind.direction + 180) % 360; return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - .setGeometry(station.latlng.toGeoJsonCoordinates()) + .setGeometry(station.latlng.asGeoJsonCooridnate) .setProperty('id', id) .setProperty('name', station.name) .setProperty('county', station.county) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index c9d29d2c1..12735e68d 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -289,8 +289,19 @@ class MonitorMapLayerManager extends MapLayerManager { textHaloColor: colors.outlineVariant.toHexStringRGB(), textHaloWidth: 1, textFont: ['Noto Sans TC Regular'], - textOffset: [0, 1], + textRadialOffset: 1.5, textAnchor: 'top', + textJustify: 'auto', + textVariableAnchor: [ + 'top', + 'bottom', + 'left', + 'right', + 'top-left', + 'bottom-left', + 'top-right', + 'bottom-right', + ], visibility: visible ? 'visible' : 'none', ); diff --git a/lib/core/rts.dart b/lib/core/rts.dart index ee4920035..dc51161d9 100644 --- a/lib/core/rts.dart +++ b/lib/core/rts.dart @@ -1,8 +1,6 @@ -import 'package:dpip/api/model/eew.dart'; -import 'package:dpip/api/model/station_info.dart'; -import 'package:dpip/utils/extensions/latlng.dart'; import 'package:intl/intl.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; + +import 'package:dpip/api/model/station_info.dart'; StationInfo findAppropriateItem(List infos, int date) { final DateTime targetDate = (date == 0) ? DateTime.now() : DateTime.fromMillisecondsSinceEpoch(date); @@ -16,25 +14,3 @@ StationInfo findAppropriateItem(List infos, int date) { return sortedItems.last; } - -bool checkBoxSkip(Map eewLastInfo, Map eewDist, List box) { - bool passed = false; - - for (final eew in eewLastInfo.keys) { - int skip = 0; - for (int i = 0; i < 4; i++) { - final dist = LatLng( - eewLastInfo[eew]!.info.latitude, - eewLastInfo[eew]!.info.longitude, - ).to(LatLng(box[i][1], box[i][0])); - - if (eewDist[eew]! > dist) skip++; - } - if (skip >= 4) { - passed = true; - break; - } - } - - return passed; -} diff --git a/lib/models/data.dart b/lib/models/data.dart index 9d0c792e4..add02d777 100644 --- a/lib/models/data.dart +++ b/lib/models/data.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:collection'; +import 'dart:math'; import 'package:flutter/material.dart'; @@ -16,6 +17,7 @@ import 'package:dpip/api/model/weather/rain.dart'; import 'package:dpip/api/model/weather/weather.dart'; import 'package:dpip/core/eew.dart'; import 'package:dpip/global.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; import 'package:dpip/utils/map_utils.dart'; @@ -286,9 +288,18 @@ class DpipDataModel extends _DpipDataModel { for (final MapEntry(key: id, value: s) in station.entries) { if (s.work == false) continue; + + final coordinates = s.info.last.latlng.asGeoJsonCooridnate; + + // Create displaced coordinates with ~5 meter random offset + final random = Random(); + final offsetLng = (random.nextDouble() - 0.5) * 0.00009; // ~5m longitude offset + final offsetLat = (random.nextDouble() - 0.5) * 0.00009; // ~5m latitude offset + final displacedCoordinates = [coordinates[0] + offsetLng, coordinates[1] + offsetLat]; + final feature = GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List) + ..setGeometry(displacedCoordinates) ..setId(int.parse(id)) ..setProperty('id', id) ..setProperty('net', s.net) @@ -338,7 +349,7 @@ class DpipDataModel extends _DpipDataModel { final epicenter = GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(e.info.latlng.toGeoJsonCoordinates() as List) + ..setGeometry(e.info.latlng.asGeoJsonCooridnate) ..setProperty('type', 'x'); builder.addFeature(epicenter); @@ -355,7 +366,7 @@ class DpipDataModel extends _DpipDataModel { if (s.work == false) continue; final feature = GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) - ..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List) + ..setGeometry(s.info.last.latlng.asGeoJsonCooridnate) ..setId(int.parse(id)) ..setProperty('net', s.net) ..setProperty('code', s.info.last.code); diff --git a/lib/route/report/report.dart b/lib/route/report/report.dart index 496ff04ed..0e7f9334e 100644 --- a/lib/route/report/report.dart +++ b/lib/route/report/report.dart @@ -11,6 +11,7 @@ import 'package:dpip/core/eew.dart'; import 'package:dpip/route/report/report_sheet_content.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/color_scheme.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/intensity_color.dart'; import 'package:dpip/utils/log.dart'; @@ -96,7 +97,7 @@ class _ReportRouteState extends State with TickerProviderStateMixin 'properties': { 'intensity': 10, // 10 is for classifying epicenter cross }, - 'geometry': {'coordinates': data.latlng.toGeoJsonCoordinates(), 'type': 'Point'}, + 'geometry': {'coordinates': data.latlng.asGeoJsonCooridnate, 'type': 'Point'}, }); expandBounds(bounds, data.latlng); diff --git a/lib/utils/extensions/latlng.dart b/lib/utils/extensions/latlng.dart index 5f4b61a31..d6565e383 100644 --- a/lib/utils/extensions/latlng.dart +++ b/lib/utils/extensions/latlng.dart @@ -6,8 +6,10 @@ import 'package:dpip/utils/geojson.dart'; extension GeoJsonLatLng on LatLng { bool get isValid => latitude != 0 && longitude != 0; + List get asGeoJsonCooridnate => [longitude, latitude]; + GeoJsonFeatureBuilder toFeatureBuilder() { - return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(toGeoJsonCoordinates() as List); + return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(asGeoJsonCooridnate); } /// Calculates the distance between the supplied coordinates in meters. The distance between the coordinates is diff --git a/lib/utils/map_utils.dart b/lib/utils/map_utils.dart index da3b93636..0df0da4dd 100644 --- a/lib/utils/map_utils.dart +++ b/lib/utils/map_utils.dart @@ -129,7 +129,7 @@ Map circle(LatLng center, double radius, {int steps = 64, Units for (var i = 0; i < steps; i++) { final point = destination(center, radius, (i * -360) / steps, units: units); - coordinates.add(point.toGeoJsonCoordinates()); + coordinates.add(point.asGeoJsonCooridnate); } coordinates.add(coordinates[0]); @@ -154,11 +154,11 @@ GeoJsonFeatureBuilder circleFeature({ }) { // main final polygon = GeoJsonFeatureBuilder(GeoJsonFeatureType.Polygon); - final List coordinates = []; + final List> coordinates = []; for (var i = 0; i < steps; i++) { final point = destination(center, radius, (i * -360) / steps, units: units); - coordinates.add(point.toGeoJsonCoordinates()); + coordinates.add(point.asGeoJsonCooridnate); } coordinates.add(coordinates[0]); @@ -166,7 +166,7 @@ GeoJsonFeatureBuilder circleFeature({ return polygon.setGeometry(coordinates); } -bool checkBoxSkip(Map eewLastInfo, Map eewDist, List box) { +bool checkBoxSkip(Map eewLastInfo, Map eewDist, List> box) { bool passed = false; for (final eew in eewLastInfo.keys) { diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 2690b8dae..3ac70774f 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -328,7 +328,7 @@ class DpipMapState extends State { final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom); return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 15), + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5), trackCameraPosition: true, initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), styleString: styleAbsoluteFilePath!, From 630e1590b2efd5d5498a37bffc7413caae8a4d62 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sun, 10 Aug 2025 09:27:15 +0800 Subject: [PATCH 12/59] Create CODEOWNERS (#357) --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..55e29f081 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +/.github/ @dpip-developers + +/lib/app/ @kamiya10 +/lib/models/ @kamiya10 +/lib/core/service.dart @kamiya10 +/tools/update_translations.sh @kamiya10 From 2cc4f38c41b190d8aa25c84eaf5d33ae79417e34 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sun, 10 Aug 2025 09:29:00 +0800 Subject: [PATCH 13/59] docs: fix CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 55e29f081..fb725e606 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ -/.github/ @dpip-developers +/.github/ @exptechtw/dpip-developers /lib/app/ @kamiya10 /lib/models/ @kamiya10 From 9b9fab6dee4ac1bbeddbb6f70591395fcc7be509 Mon Sep 17 00:00:00 2001 From: Lingling Date: Sun, 10 Aug 2025 09:49:11 +0800 Subject: [PATCH 14/59] build: 3.0.200 (#358) --- android/app/build.gradle | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 71d19e43b..6ebe2f450 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 35 - versionCode 300010000 + versionCode 300010200 versionName flutterVersionName multiDexEnabled true } diff --git a/pubspec.yaml b/pubspec.yaml index e389dd4ca..14645052e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: dpip description: "Disaster Prevention Information Platform" publish_to: 'none' -version: 3.0.0 +version: 3.0.200 environment: sdk: '>=3.7.0 <4.0.0' From 25b1feecafa8a83245449f2a383385165641fa26 Mon Sep 17 00:00:00 2001 From: Lingling Date: Sun, 10 Aug 2025 13:49:11 +0800 Subject: [PATCH 15/59] feat(notify): click notifications (#355) Co-authored-by: YuYu1015 <44525760+whes1015@users.noreply.github.com> --- lib/core/notify.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/core/notify.dart b/lib/core/notify.dart index 8fa5e511a..864a28408 100644 --- a/lib/core/notify.dart +++ b/lib/core/notify.dart @@ -55,6 +55,16 @@ void _navigateBasedOnChannelKey(BuildContext context, String? channelKey) { return; } + if (channelKey.startsWith('report')) { + context.push(MapPage.route(options: MapPageOptions(initialLayers: {MapLayer.report}))); + return; + } + + if (channelKey.startsWith('announcement')) { + context.push('/announcement'); + return; + } + context.go('/home'); } From d5c6cde76023ad70ba6f0d3771191fcdac5351be Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sun, 10 Aug 2025 23:47:51 +0800 Subject: [PATCH 16/59] feat: map style (#363) --- assets/sprites.json | 1 - assets/sprites.png | Bin 101784 -> 0 bytes lib/app/map/page.dart | 28 +- lib/utils/extensions/maplibre.dart | 34 + lib/widgets/map/map.dart | 214 ++---- lib/widgets/map/style.dart | 1123 ++++++++++++++++++++++++++++ pubspec.lock | 10 +- pubspec.yaml | 3 +- 8 files changed, 1217 insertions(+), 196 deletions(-) delete mode 100644 assets/sprites.json delete mode 100644 assets/sprites.png create mode 100644 lib/utils/extensions/maplibre.dart create mode 100644 lib/widgets/map/style.dart diff --git a/assets/sprites.json b/assets/sprites.json deleted file mode 100644 index 8236e73b8..000000000 --- a/assets/sprites.json +++ /dev/null @@ -1 +0,0 @@ -{"intensity-7-dark":{"x":288,"y":72,"width":64,"height":64,"pixelRatio":1},"intensity-6-dark":{"x":288,"y":136,"width":64,"height":64,"pixelRatio":1},"lightning-1-10":{"x":288,"y":200,"width":64,"height":64,"pixelRatio":1},"gps":{"x":288,"y":0,"width":72,"height":72,"pixelRatio":1},"lightning-1-5":{"x":0,"y":288,"width":64,"height":64,"pixelRatio":1},"wind-high":{"x":64,"y":288,"width":64,"height":64,"pixelRatio":1},"intensity-5":{"x":128,"y":288,"width":64,"height":64,"pixelRatio":1},"intensity-4":{"x":192,"y":288,"width":64,"height":64,"pixelRatio":1},"intensity-6":{"x":256,"y":288,"width":64,"height":64,"pixelRatio":1},"lightning-0-30":{"x":360,"y":0,"width":64,"height":64,"pixelRatio":1},"intensity-7":{"x":360,"y":64,"width":64,"height":64,"pixelRatio":1},"intensity-1-dark":{"x":360,"y":128,"width":64,"height":64,"pixelRatio":1},"cross-8":{"x":0,"y":0,"width":96,"height":96,"pixelRatio":1},"intensity-3":{"x":360,"y":192,"width":64,"height":64,"pixelRatio":1},"intensity-2":{"x":360,"y":256,"width":64,"height":64,"pixelRatio":1},"cross-9":{"x":96,"y":0,"width":96,"height":96,"pixelRatio":1},"lightning-1-60":{"x":0,"y":352,"width":64,"height":64,"pixelRatio":1},"lightning-0-5":{"x":64,"y":352,"width":64,"height":64,"pixelRatio":1},"wind-low":{"x":128,"y":352,"width":64,"height":64,"pixelRatio":1},"intensity-1":{"x":192,"y":352,"width":64,"height":64,"pixelRatio":1},"cross-7":{"x":0,"y":96,"width":96,"height":96,"pixelRatio":1},"cross-6":{"x":96,"y":96,"width":96,"height":96,"pixelRatio":1},"wind-5":{"x":256,"y":352,"width":64,"height":64,"pixelRatio":1},"cross-4":{"x":192,"y":0,"width":96,"height":96,"pixelRatio":1},"lightning-0-10":{"x":320,"y":352,"width":64,"height":64,"pixelRatio":1},"cross-5":{"x":192,"y":96,"width":96,"height":96,"pixelRatio":1},"wind-middle":{"x":424,"y":0,"width":64,"height":64,"pixelRatio":1},"wind-4":{"x":424,"y":64,"width":64,"height":64,"pixelRatio":1},"cross-1":{"x":0,"y":192,"width":96,"height":96,"pixelRatio":1},"wind-1":{"x":424,"y":128,"width":64,"height":64,"pixelRatio":1},"intensity-4-dark":{"x":424,"y":192,"width":64,"height":64,"pixelRatio":1},"intensity-5-dark":{"x":424,"y":256,"width":64,"height":64,"pixelRatio":1},"wind-3":{"x":424,"y":320,"width":64,"height":64,"pixelRatio":1},"cross-2":{"x":96,"y":192,"width":96,"height":96,"pixelRatio":1},"intensity-9":{"x":0,"y":416,"width":64,"height":64,"pixelRatio":1},"intensity-8":{"x":64,"y":416,"width":64,"height":64,"pixelRatio":1},"cross-3":{"x":192,"y":192,"width":96,"height":96,"pixelRatio":1},"wind-2":{"x":128,"y":416,"width":64,"height":64,"pixelRatio":1},"intensity-9-dark":{"x":192,"y":416,"width":64,"height":64,"pixelRatio":1},"intensity-8-dark":{"x":256,"y":416,"width":64,"height":64,"pixelRatio":1},"lightning-1-30":{"x":320,"y":416,"width":64,"height":64,"pixelRatio":1},"intensity-3-dark":{"x":384,"y":416,"width":64,"height":64,"pixelRatio":1},"intensity-2-dark":{"x":488,"y":0,"width":64,"height":64,"pixelRatio":1},"lightning-0-60":{"x":488,"y":64,"width":64,"height":64,"pixelRatio":1}} \ No newline at end of file diff --git a/assets/sprites.png b/assets/sprites.png deleted file mode 100644 index cf82708f0150a205e4c99e2f735e0c237b3f2e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101784 zcmb4r2Rzm98}>QJmc94Pip&xb%FZ6g2qCLMcE~zpXKxY8>=cE}WM+#>vcj=5;zag( zpQG_>{Chv|+wSXozMT8H?(4qp>wX^L+M3G5gbaib2!vQwML`z=f$>5hP!v8cxDsw7|%8jtyyy5C11_HL@*z9(M!;QsTdAaUzUg8UcSFBIC_Q7~N6%RPO8 zHoy#<%H!?%^NJ}lyH7H*iuo@KZ%MOH9vJI>NaD3M#1ZGHYUqYsVkKtNR(qZ3LVzRs zoa;e~q-xLRp-a?L=1|GLe2x5+(M^+781fRSDNF#525Y8)3@zZq>QouFG>QKZSr%{? z(cd5ya2<8h0^*5ZrKXTMC!CF3Z{TWhu@KQFA%gb8HlZGO+XbW9kY^dI@QsLTDGPDO zV7Q1-#0!OKFA}W(pGUJjIuUv=%m>>DR{P!UV_no!$!H4W*8R&GEzLA|{(*gC}*cCtc@FwzPKeITly^QJGSb zJ~#olvgxlv77%Qqq4ygMP^u_$lyZaS#vLaz{eIX@STU9@%8_jAN!Z60ayhsVv<~)u z(vhkPr|P_dGzk=5jz~u=BIvgmv1Rx~_)I5(j;$;e~m<=`h#+^Dk_ zxCgiay%FtZOi=xG3KYNG$pfVT69l8et0@S0ZxLaMuu5o3!Z=ogGTi-GXjqtV|8S3k zqfYH+xT4fWW<2@9h)&K=TlY5)zt$;B1eQO4j;Ch#iB!&{U5#}}>g?))GK-frPiV|p z)Fl)lTYH?l`CHv=xw-2&A!nAo$uwTuu+BB$8TF@gyQ2Ees&i11=ICgZSgtwmE04Fj|RH#UTw~ zq)=7}jLLw(^pk{Up2#ee#0t4{8fBXu-vn#Og046-&F!|P65%yCGm%hRsSBZ@d%*!p zZO%243Xvk}!O6)RC{>;er{?$_N`J(sehvYgK&D!@H;8uXyR=!JEtBYQDOw@P?biVT z8d8!?8PBI*IR;itsV!WDZ3G6KO!t5FfEN2E>^34#j!!um7j>2m-yX6NuZ+OTMkdKI zNhEZ5RZdCtx2DRF$RmddOuMGv!yYrW&5N{J^TOao*pm%u>OC)*+a8Ixes!kP?bk$I z;x3>unvu|q5#g36FTBo0hSy{5GWJAA>&G~ku2t9WPcwac= z+eBz*ZlBxR*O&KDr$0Vh-B0YzQ1!9kq@093bI5;#_--duyQ;4Vnqeh($ZBAzDW zJ`d*)kaz>(Wn-!`QJiJ~89z+$O2UZ{AAS6d07tVr7G@pfu(AM85s4A&ms5mc5hGwt0WaVR#S?&E?#o4D6(As5u-6=--F~|82n~e`4Plm$ z>6O+&6M?ZEvr@jL?nn~W!*z)j`xu75Kp}Ta`{yNt{l|TT>m^as|HAX zMynl(APib2l&KX4@t{(8dmfZy$Nx_qXZm`aOmi(Xr~IE~tA7|(K>)( z4JrcvJWZz4ugMld>TdR`f?kz7{O&Vw&lfI^!V_;Gui)kJd=Gytlh3QeNxr&k4yY*N zkrMl3z3aSen8f42fEhhe&64aOlBm9>aRcj1y(gi0U^efc57?7-=d&jptb;1ZCBZOx z$^H=Fm`E1M25S~->^*^+uYU-EQeA~iA}@7J+(;y_8k6wbh^(<5YPP)DA91>}P$l$2 ztaNLq5`C3DrR@HB*7~i5DWYPZ@RCvylJ`bKba(j8Cuz;SBeyD9t(|7>Zjs|hs3?zg zt}&BHeVCc{Jm*GZ#bpzjoG4OdAz6*>P*BB`9c@Z|8hzj&()zfe7!~%$liG9-tFVwA z)DI>J6L z^bp@znu$i?`Va&@{6=0RKUhx=UG{)*V*{P#_k!x3Dj5_`820Eok0Mx+9}#V8RkV1C z^Wso;P+JiS`@R~SgH>~JHW|%EASwg=rgvkCRAc`q(%(L=kkHgR=F6vF|5G2Cs= z$S4tCssK=}M0`ApLv2imxca_|7qp9K1{6r)O74eTTBX2NB>!IzwUeh7?q(f&OPp7v zU4j1#ZGeLL8T-nX4i5R?7b5$!k88`^e&N-$7nsuH z5AEGZy=gULRqMC$7yvwOJ7z%GYJg}=lc8yXazxK0bC)J`aB@m(3Bu4`THwZ#PGjD} zy2N+CE#rQ#@Qsy4>oT{!exMGf)ayyI159as7&~uBTp6O)9w18JwfM*tlZB0b@H4Tc z4d5+4M_I)1 z24SzypF-Xl@S0#F*?z9II_HnY@tm?lkBG^&b7I|L)_y_43ggwrdg8)_c@R5kn{%or z$Ev1PcUzQ*2bLk$Nx3kBMq?YFhcnWv)r%=HqQYNKP)1`72WZh*eW0_FZgbvAvu&j# zyk_EcaQpmlyVc^Zp7eTU{gnad7rYfEt0I?;w<(|l997pysJeXX$IY5yh*!l-7E2A@7st>bk!Y!p6A_r{K>D(>OEDpi_eOi#%?};H#SQZ9BGG|k3O$i{~);*`@Bv`ZYyK| zTKC-jKb{Lni7r2zc~pCt(B`fjwZhL5eGQ{oj<|mQcy6+e5iYJ&_AO=^Z0&5^A7YaP ztPKgrJL^c1hRD5EiBSEd_U<`-oa{SSo2V9;C3Ls7{1JX|BI$m&;g zluk@`SbeYP?qpRY-C)u$=86gE5--_qPDk6v$hVZ8duK-y(3D{w>M3;%Ur0tI_2Rir zN|FG0(Oe~`%V|mRlXVd#@uH=l@0oQq87{Z2Ds5v0ylYuko5V5^ceL3tC3>Dv^bps; zCpf3|BNsZIwW&%iS=T}j!Sqd7=u?w7wpqd9k;J5BvK8(gVwL4dY3u8SiyQ%vpGXfr zLb|*eZHa?Yyy{Ml&PM3(+(v*+6S*?HetE4$Xv_w5Ac$`jTag@_)dTxXEWK^Ly=ncO znwh-BffP__Dad}NCgHc#oV#sQ(V{J?;piH%FY+71aj_j!^6*;O-=lqP2GSGfNYFDt zaIj?=kqFC;uIQV*4#B00*@PTF7oQ4r0c;_xaIye53SFHIt^cu9G+?Q&bF31hZe_;_ z@Vu5y=1;s#7bt=4LWjWpx+YkBh^vzw$4zPEB4H7Fy z$%1>y3+u9fGLsaRwNC#$S`~vmdD5|_MWL7gC9m;fBaxz`(Yrb_%1f=zYu)G z|94R|AET5;B$QzJEay(};)l4Duxwz^4{cWO{9o&J^vECU#m)0K?O6s+NvKnk z8{drFW`7nUFqh#(I9q$S>hom%F91Jjou6) zC~q)lu)4_HwoRHJD-vSr;P4qEeeSqno!gkU0P<7E;~z<;2gP>>#W_2U z@4w~6YwEJ5Tl!=%QR6-hL@Y8fQ9#c9d;4Jgt%&eOux(XwRt0nm<5^GbFuy-3lvi6v z)Vm&wK;?8eXI!^ZXT>{zBu1nMnoCcH#9zCeuE!Mig-Ci-q<#L(`}h<#-s?&2F!=Yb zAy)B6SF$yvjYH%rcgs!w8h_$R7@Vx}hq@sN#0ZhS!a)4ogxCld3sK=gX!#`kKV{$6x z`JLwpHd^!2fcgk!y)Vw`Y_7fpO~%m0C-mNU7533$=WfC-c6{)p?tX$Qq(~*`^^0N3 zgF=AA6B-}}QB*)1HXYe)CEVfqE5DDmeg_5sdE4Mnba=^1dST50RFVa zvJ9#1Y-KWY`3>n$01aq4R-4qnS$>M`l<>&sd$??Fqw zUzw2eesc3BEP2&CFy@<@wmkvF7?5N?yE*IlKTA!16Hsmu&)q(1XSh}WguZ%kw=j@$2%+=8J>W=)>2Xj8yHWh;=Z+s0qnHz6 za%Tx1@#}zF=UzT|Q?LaDaRhtKmR8kb#Et6hz^;x` zx~+<^=VHOb!^4YY)p1N1PC?!2bWP*8!FIXVB9R~Hp^KY6PBo5!$!q()d5YQh}E;?>`= zMu{fXs)sa2lh72Kw8;S7yT;t+9N6H2fZ%*nv3%vu`y>m=DY}=U!zCS5*(Q=4J zzT?!(*L?Z!JaIFZ>88IjULOhtjY!>;geKV*30Zb5M!M=VgXi9v@cqslprzLNNj_|eu&AA z;Ur0xC+8cvM{}`{znsXwK*PIPq&;sZC3S2As#|nTR6L>kl^bsv?biECI%y%;U zwP z>bL6Xvpink<~~=O;$tv=i<0!_?TCq&-V&b&&u+{_23y*Whz;%Sh*zxm9Rurfs`cyH z=(12Oi^vHN47e56)8+V#aSiL*QJpE0@0N_8rPDhmk$pTBYJcLL)5oTJjt-+W?m~Up zMMW=3`q!uF3SR`ptxgTG0;+ahdQAF7IS8liaa0>IO8))XZU@7?(@#?IDX5=ax=hG`XL1n`pe8kif2twYib0N_D|6c}l8J$K|l z$o#z;okY#x=A~vA3&~*nLKt|_Bi`HuHW>1VaD0Ble%}p18YQG%k`RtkSXCSWYt)lz z|4Os=y03eyI%BSj<6>(yYFoRzhe@I0vdt!GFSkIb`F(b231q$snF$zqP-pE=R1T#) zPAQtMaUJV=LN88vKvi}B&S{ykhh)dw8f*ZiFaS!ivdOWg#7|C6H1BewXLV$6%Y5fW zBxuxgFw7zyjOhpnuwdS16%zv^K4p_Oi-lBvfG*Jca!5Zh_~zp%qng z>$+5-$>ob)zVw-k?9iVwqV!w8_lw%U0-(P9+ELqM0=B9P!*@lTSoK=arQ4-eEXiTK zX!5|G9B7UojYym#hTHvsqw!8vMUgL>sJ4Wj#xyJj;&d#*I&%Ar1+*cUSgm?WNLGnm zc5DlK;1HFyy?RG>a{J6>W%%};mpM6m<6ALaHgmUFhWCg__htvAtL6uM_I3{yPV6)I zKl6S+W7q3AyGS}33X4N`Y)M*Krb^n(d_A{|O{po~x^#R+t9@Y#|Y&y5AJekHlW zQR<_p&@&5pet%>vP**uRpeu7qWwQy#q@9b*UTSlXCV$Y2f0&VqpxV=1Ee%n-ygXB_2s`PHywN0eS3nk8+H>@iWXg^Y-zhI$Fr-dU;r~y-`WXIS(_`U zXOuPHjq%=kUq9OMX-mSmj%4q&6QwY=0BkmHTpaZnc{@&I7AKp;2!ei(GFTqpIxcqc zB8IJ3!vzm0{k}9ou;ibLKInGN@VB9e6agO2x2jl>=QXk4>zcb}A0w$1oVq@252hXJ z4nupC`PvdblPL(?QhU>X0wFdkEprP)6zSHzlTKUZ1bcA zj$I1bxODf2Go~b$j_B8}L*6VULM5nGA@Is#j1n;5$w!pTQeZMTK7_xh6J7hLaO@eo z`@uDWGMPA;T%^70h0#GqjHG(@zw+-E6`Jo?vy-=?{EM(_?>#Uq+47|EO!m=drwVWi ze5j_#ejl4$I}f1+&1(9IQ(Dc2j50ZD)?QIbR_mtWz7&`B(xk2J1+A5d5LVw%0WF9Q zY6Vf=a6^s_V`@3G0tEIz4+04cg-pV;Mp%3i?wdZL0Z7NjCSAePU4+&SCE(Z{p)#*U?W<4MllsBf&ci@gw722-a!R>kO|izTPIDfAUMfR$Ad6>}bS6a2JUeTEtQ z{15DHr2JZxOaL;O365q$6INtZjF?a9qaa6pfgGQQw?_Zlz+xl)d!wL8t0~6|!&tfC zvuuoer=jcgdUI_$q&nt!>b>H7M>o%veub`J9ne%!;)_kZ@>)TKP=B_*IX{skbimo` zyL^bQoxd_?xH4VLUp(_pELrEQ6|V6ISPUdRpx(Ag%Wv(t|5~$u<2PVFRmctBKb~Vn zJU!@l=^ij}qiJ$xa_nW-iCw%zKQtwl2=cT6aMJPfP02<592L#sJ9TN9w}2>)8y{|w z75GokPo^ukuSXqvCds!@#EmxCePOSNsu84)!w0$A@&U9I@#-LQHG;bj|Fb7rKBTH> zlZR(xuHg6>DBKEfzlkc_`e#&IesRZ3ilRavMF$=6C@-pvqf|}d7FJeE41VDSUf2Y- zV#>D~)G71mo6Dfaf5Q26DFyvKflErs@pxuZI3-1kRH%0 z@*sbeuI`;5eeb~v$${TG*R-q7)X?4|pOSaF!`0;uo%pgE=nn_8(H2NkAXq1KEl5@dQVftxK|q{MU!%mOv=jTZB>$2pjfO1uL-qMST+rDtSX`$13p6-&3)6P{5Ht8pJxrfl0rsX zUU(Un@#=uAh_lUTn^zfQIXZIcw&|0BVj?%nrJgh(Zx^T5QWKr?D(XgbUTneT;bu32 z*cQ6JIf))=l=^C{9K_uWn7kNw{(s0El*fDbAJf~sK~Q2qp}}0qM+lNvS4zHl^qqIb+aa?hmOGOi31jI1#2Tml9?w5B#WhE)MtBRIb)koYqtZloE;# z;cw*2SKe4Xy)&P0zP28^Y}J(Bpp3YI*o0(AtT2D|UGjGp?lGd9O)Yi7C>~0VhL;V; z8mb{99xIcbd2_M7`2)CKlQVN^=o?nu>8+`ft*KtEsr1oPwTjXH+Z!H^kU(oNW*4)X z$zjrX@)qJQTga2%Fcttzfjf7eA=meADHL;Kyj>9k-B$g<(=U>PpMH#)iCV>j<=tIO zc?F!rvCc;4_I^+5mPw$|Urx~NJ@K~>lk!itz4&!pQ}8Ym2L)CQ`X8kEpEGl$eE_Rs zuIPbyyc)zK4~LrllQVxYZK+0vJyRD{@Q>gOt5G=KDifwc^r`7j$|U>?xo+VqkuU}8 z`(d^C(xiK^EowA>HVcXw-sWU5O0l}VX}8<)4yTsLCzXKJ(YQswihH>Ap2z+3$}17$*8%Klf7{^%xHpa1{9`9FWB&ZS-X0j@^CTp zh3B}eUs@Ls=w}j0wcC#r;&qfMcVu+TT9GpA@vN8(U%_O2906#ZAjeA%-PeZ_yqH#H3{iPTlC6d*f?!F8JeWpW$|^e{H85<;HoqBaY0^JwU*n*j~y0 zPfQbj0>J_!k)wNlDGi6r08&2{2_{5L*zlLsTR$C!ZAbPDgf_PR`5;X4DOqMg>zaau zitB>vjov5o4(CIxO{Y`WO{zmoH)TCzoDjnX#a=9V(E?cR zv|^zB?X&#yfrZ9#UvP-(*1>e6cl1O9Uv=@0WMAGy)sVE$eg`mhP`Fy%ugNxyKe;+*VY*u2uT)`Wn^LkDq}M*z#+b#XMqz~IbC2Mq)?S8rT`EV`J)~88 zzu$FAyeZem2TW^Yq_H;i&ytwRE~f)N`EaAG!-^lT@bkwFn#8j%M1ogsYHGD#gqXq_ zD_naWC-C1meY9t(JFo_BAiC_}3w!a>*o6|KrEg41hG{v!HK951U&IxLL-ND^2s)At;Dr!CBYIbzHKlj_hZeH@hY`iY@kf|?}{-o>vjE*N$MCY^f9 z+jvnRjo4Ets*;;co1M$NwssPL0ovHR(-vA)>V2%mx+F{CIIi2oFHK{#I8f!kR*}>z zN970bAn}Ab2 zQU6}p(pHsVJJOq_y7gSlozpi$G?I-A?YWd^1&|0?P(LSm^hwNpF zF{S5ud3jvzmdO8s$17#2*hj(rb&VANT%+*6*XYm8RHyuXjmUppBbRvfD$o%~8Z8gf z4c%HATR$wrJA>9?c6+$#e<(I_oGe}`^??vRk=O%7uy~Y1#ACbo_`2NTD+{)pG@~!` zUM!n^u1bb)8XNku^lUHHEH2k1*IXMe?$5nlZeXmIr^Kt$p5ExWX!+U7z!NT_tqz@7J)Un0GZ1OUg}n+8_X)f9uvjhFMkifGc&s0^yGArX zW?a*iOAmV`*`{!u6f#8YnK-`o25$RYF#pR(~$V-k|Kq(6U)BB{f7JN1VWbc7xI-QW z1(tr4LhA5f`@zPo)|_F5K*FvIX0#$2M{h!L@|Rl!=WeSSXxDM0RG!*2>;y;)d+uI+8GckB3vA+m- z1X)J0-JKIWKEOp=duR2X?(H3tw;pbY37H|ZU!7-{?%v)^Gby?i#U{T2O&YR#y7u~{ zne^f6T>)cH>T1zY@9H97uJOeKdQ#anJr=*&0-ws=f<22xngfR^hGGAWN^jeo{9tJ&O0}fUyF3$6Cl?)EbxGE&nQkt&Qn+&yYZ!8`Q7vx!>uh%(AVq4h@_Q zv`|d&=gkb`d&dlK4?S~bCCBND@tDDdxm>q@Z<4pwY&kxmfV%)M@(COtL2T+5qW#IF4G z;pYx(?i7z=WjNs4$tg_AG0MC;1f!0YIX<-R@4hpP+O}oT!6{f4rp_UAu#meo3@7__{Jh?F+K~WkAT2M=dBTiCE`;D*Ge&wqk z4){I~{60Z9?ilfV$ms?l=#IH;XUP4L_JZxzvmw>Qp0a3-5TA)Jp9wS&7}uqsu2?($@+`gV&WkSHw@+Q{h@)tI9FE5=;=4~Y*3>*pb^7$_(DRJ#pyWqI zCf{jPtW7#)>hJ4HTz`fG*Y2;{Zt(v1+D@PIS8X?V{zq-MO8hNX#D0Ya*z))RYJcBUoEe^*9kd*4x*;)aKP-nQ&Puu$@L5aF-*QH3 zE)cpf@u#cWd0wu-Y)X5DpL4sou@xH4mn^!9Ta4uG#8aton_Fnp0fkz zo{W|xv4aDT5Py=7c&QK&9_g*GT2=F<{9fj6ET{XLO}*z~V_!$@{5oBQYzC{mrFv@z z<)f7mHXK*5vMk%{PaX0_xzfh>T8$i#z94zo9eWw&o$;_g-M}ur*rb%A(KZ#GLr(J2 zLpD^%KlqFFWPqx=x$K=v?axL>^@M8}u_~oIk(Uu2-IAN_l9R*;?i1flbWP~ zc$A)d)pe*|=?J}MixG)LB!%5;HHjOSuK z(s#AAm+|TIz6Zz;%`la{sHKjllRv~^+K6fARq)5fcEZVOmXK?xIirSsUQHN zrzlJZarOLsQRKaMChSK_slgBwmro0j9q6s4@wS)YyEiSad*R5>VvS>qHq11{ z&`)MEO_w+vhSqz1H8CCE*-Z3b&`SL}z&fGDvUB3FW+GI2?Fy;n!DYB3mJIO|i}u4O zkLUF6I=1%iYn^KpK74@m%?SC1D@mGz#iSzw=9Lr;sHxw^T5WGfg?mdVo;f}CF_MBC zqboCzd_!|yD?-U)H^v$KZtMg^y?5A`?jyCI*8l7~M}e!>Nw1lWoUch|+PvPLH~>*Fd2{xf+}dZ|49gRKOdqUt`AklFK8E1N#LN0>#|I;S%FK}h(^ z7Q2gvv|m`T)QaUqk9Vr)9vP?m!`zGk?%vsx3I=Fz$1W6;cE2}I&;|cs%=xEN^eWtv zTc2_Op~T2^%87=jaxc_u5$GF$^K~mW8JJr`xc8`Kj`aWS1mC4g`?xta0}E$9X>0)L zmAN?4_Jqji$GrhsnDb@XLIjS|orPXgI-k^lNv_*apuc`uXdfHwLI&He1{1 zXIa7dSUXf3-4wX>U(0FZ0?ZDlpMtfRR zSFf~pZOmN2?nB+_+WYf(;<}aVYw8_0?Q%iJ015>^^uKJBPBRSldf8dXdRb#-*dT`q zUwr{PY*V?hI*yN)(B(MzdrRptGJ=i*C{u7s#MEKrR=abCW~(sV0cUax%%_@9frykK zWnNz$dHYt&)0sYja|VbIY;0D;kqTyT#2`UL9c~gJf!T?&6CWEbvamDq;0bxB9q1uY zQ`bi-Qx)N`j;sY1gwH zFK0oo-72hCfg^cqVv$I}+)Ciy!7HNK@p^vSW{YHYMuVeP0T;qon}5TR*8? zINO@~cAUf}N?Qh~T5MML3Wre8#Z3#8IHc=Yj%#-l#vMw4sRb=$-)p|qB|14GaKAhlxt{Lm6vw6agW zGeNMAyB?2!{e~?4Yyz?-SZ^9cS~pGqmge-kGi28|+Jd#ryGxFl+p+C1Sap2mv3-W_ zGK`Oz^u0CO+T)%PvasM41A`NlZQieRs=Ce|tllBh3m;($49#juS>O)RU^_jnvpy^+ zD3fSy;SvNAp7#~n6m$z~QVLCvGR-!%2RX7sCb%^MJnBN%E^gj&+QM;pLhO`WcoaD> zF}z1~Ji)E)O5|xEAk&5iRjy&?h!ps!oSur$u|R1?vLC@6Os+$&y-8oPg8SYpu~k-< z1v(P6#bCSxj$XVU`i^0R-!MG;wNl=gGqLw*+xLBk5q6+3C6C#U%<4-v~dz|^$>F={8|!8|gWZsAgXLiFUq3hOoZ%|{-G-oWlwzqf$z15}%MCD@=^BP+D>xdIB>U7ebU$Gdy`X-RU zTlA?+?5mUh@j1w|q6Pf@Wm0$QJs_`%Qhdp0#|Z;;dl=IV1HFTo_^~o@{v;Bse&9yr zi;L?rVCLcA@I_&ngA_Oe%wvT>R=}Jw8(AzFzH;vx!Lw|i4F5qS-%)H$q}^}87L7Uk zP>?AH7(vZ^KpeFHmU4gp?(db%&KdcOdwMIJoK{s_Uuv{e&TzG zvMxH(Ou4B}Ey-I_VL19%(mVwbcb-#p>KDN)W`pI5Byt=h!G| z(-^kbM{*R=H`4e8`tJXNKF445ZB&_)lZBoX`U%yV0GkiW;-;)n3!7kzP*)`!~9)3v#ca%Gn*&cgl znN?1Fi760$Bp?aMNxZ*o@quKVnmKixq8z;>HxUb0ts}AHS<~`Z)3#1QYoLRO3dk}= z)+X^p)4H8krASP%1+G*XUPiR9YhP-t5`V@jzIW2g4HAPb0Z#V+UM;6u{sHnFIShOJ z)DlmST4I+$tIAVb7186zYr4mnH*cQO-Apb!|ebyu5 z1zi=N?U>qhK#OX=S>H5!PDr@pR5c*$D?2Y({nCY=YzsEqAAVl7N;cT4fL`D2`%ewLUUv~owRdbP1OBGPexGo(jVLP_$j~wa8Vq8 zfVlp&k#0|S%D@#*o~@GsrE=L{8>31nU_uPh()qnbi&*4y(h&n};Jlw-6 zgsIK)IACK#L*?1PH*zdV=VRvKotZ=jHo6YxPTtj~J_`IIP zp@Da|iqLheE;Aec58uCzkC8L@BJ<*A^AxKVkS9vKNvbx0pjir|yKx=_NdF4oGhQL# z6V(`f_uUz2GN&no(THStWB-V6G0{P(x6YPn=oW1%^y}9^Ds091&iTbk747DM5PEGX#)41twS1J=<+tG2-AB?V;jZrz6 zgZ{p%Ds6O?zsS8Gl{bT9q(V}!!a)|CqUmd3h3G*ty-Gqq6qhqeP3X$biS|^y_P(_i z+*aQu`($71vfsLJvk&9eGvxA|04REK7uS~-?on2Mg_9d&C&poX^B~qJVVe>CF}I~A zE6@D4c}(MT_l$ErN=2^HYQ|K3J4$U(umC=cSaTuiDSqdSE=?dOM$&20Gh9+ zLJLO^V!A!OnEj|KT$)~flPLKhX^I!p%2+wbuHquwtpE>W8YFEe@;h8J2;uz(r4YT` z6QgB|S$y`#oEWuRoR-PAW;pj!?%tqZ8>2%wj0e7wZ74AWhm!?xqOq_g6#qi>=syrW z7yDOPto>78{}6XfzZ10g{~&1106@^h6%Lyc(Q9mEurXq%r64uK>v*Ix`;;UkwVm#3 zf^+IcV;inAYoE?+f4mnuw6S_Q#5v%F{`!jj$Sp}VrnU)vU{^U7XG-pp!vbux30X0H zSyO=!_i8&+zJ2;d#T{5AC2rn+9s)zv%^JXK569yn-)T9OFDsJJ&gohO7Q%I+k5=pp z>Nuh9=qprs`Ui(4(>7yW=KD7itX8B_&^=hP4{X~~`26>|d>+|79eHMZ?LNZ zaIBgd{3PBG*Wae1IE3tqH>;*di#C)uKtu2gzR~i3_@DC8{l#b9jA-YP!21jMa|yqi zC%@eEgR|$7uEGLoj`l?Hb7WZr=_i$GC>+o_(V_)I(j*#lEqiQC&#bsC*uvK`hf+i- z4y)b8(l=`xrber%!N*b)f z!L?$jVn1?9f)s)!cN$HCIKOiI(HNHWm&bEg$M=qJ%9dwFzt(cGTT)uBe!qR(+;h*e zZtZTtV8+nviGi5dDSxcPr^tgGhmogFBofih^A~?errcL@v0ifYifplpFNK&{nT&Q4 zqO{zcN%WOx4cJeC_gv#L8gja_?#)^gv?orVJ4s`GsixqpC~Xj~(z4oorkM#{8digq zoS1gYHanK-v8Ch62=XJD`NJfbk8Y7L|NOt(G#8q0&BiZnT92XB*&PBQK`WPBrfUU+`*f64)ik_;h49V=kfG0CP#%cn`0TWBV6U!?%p;( zDlQi!`P2#OKAL5veP}PKM#N%X>2ZiK9d2UmVwlmmI4EJ%5S%+4?(wWz9GJ^dlgL zG(SvNr>9{)fiV4~E97y<0yd#EPP7fwea+Hqm51swhJN#oo(D6u^sDr2kC3tjVG2QI zpYs8TmUNbIA5r?=N6Yg~C+p4Y#; z|0pUdQ3^yO>>N}9oi+&f&@wT6VI(%+(QTw`qlGn)Q1#_G2yS(y4~{R1AWq8l1Bu#*@g~!#Zsh2O`)v z8F|!_54U(8-*@X>b_bHqo39jrst5o|1g4b42B9Ue))^IODlKRHARXIb9W53CBu@>n zSNy^dI$SDryjY@zm8)B*24+Ta2Z@HX4pHfP_KiVC?akhaKGV_1sB>GCBoJ< z!rK^nROB#ItqwU+RSyBBl5hUC2`eYv`{LCJ4k2`W1)-_uxlLFxFOcS zoS~>OFkVU&IdYzHOQ?n*F1lQ656!OG{OzOQ<5I@iSf5Z-r%s;=O>-(e4=;uga5B(5 zAmr+Hx}cOKaDx7PpM2_!bf(8o2SQHC7@KMc;?R!3jM7 z4fi9i{bA1i=nuXV*sm}&Q8P@8rGDjl?rW~7q^>5g=>Sdf<^RJ{QffH32fA|15%#ZK z?94fzj#9JJpDzo?ChE;NaLN9*KRN(+waiNNsH21+wzXC#SoiNJt!}sWW?CQK*eBYq z0W&W>>*y)%Fl30s$YrP-q!N0%0rX&2%Jfd;+E}NsvdSH#>_;|Sqo=ItIT;x4J)V7? zwrgb}Nj7^JFZ{-o`Q`J8`(i>~0tp>Vc1$;FimTZfs=pRX_PegMX*1>;2PtxNQ&!;@ zP8K1t1t~09F5C(G7_zXsuu$EFKcir&cZi|A#|Dm3V ztd1fbP4E%N0{7yUb@Oh=oZ6z{+Cs?y{i;@lgB_nJ*hH)he{4T;K!Fy1hR`Kbqi(=T?# zgoWp=josHj+VsDz9$JuGGuOzwWh;3MMwIh^3F2NdHVlka7{Z0iOX7gYpz8aF%=P-K zenu4K@&A~tpiTZC;|RWs&Mz&;&o~~Yfa4O|0=zeZ4sJyt>zO+l9{6B%*-ySE8>!$E zAE_vdp7Nn8>}K)4|7QAF)op{siQ)Lgt^Y&HTL(n7e&55!Rcu71%L@XM64GT5($Wpm z-Q5;lA|JKwb6FbTdQ_+Z{;=REY)Jw)>HEigC?YBO6}DWf21b`l|ZLid>R>Odb=fq zwCrgR2Xt8Ej!WWvVEr%Hkr%6$$`@Mylhl8vAD#?=JPqW-_d3d;H|+j7_&m(G!)JL` zQDDO(k>EBc>@OwH0RC=NiElwXN(`tbQ%g?FLYr4iMzhHd6c=ij4{;(6kLl5-Wj&A* zWUjN^{>td^^%IeJwv+JqFAJ(SZnocyMq?NBrP+)==OU;%zCq@Ud{59|%(7A+iy1K3 zjQ;S7_z~r*p6&m#K5QDxxskq>Dq4ACx*MUn|pe(Otm){SFLadGoDpA)W`F9thZWRR_Uh|nq6S8DTZ~Ep zGUlo(SLYw^jr}Z&Cag$Ew<*;c%(*z~KA`oa$QLqI5V9uJVmuIyUMuf4uK8?}AfG)zIHDSNh!x5cNI8FzDAly77g88(mOo51Q3DQ%ys` zn18t>x7hONx!;G*Q)#zsrU&#lyzxxVA9q7o!{n*aUr2*8{{_Y>>_tri2=6!mD?8>np%UL%N zRPaP~FN_xXeE&F_j{`biph1%k>Zr<>OW0poNIpGDy8;&Qx24diz$DVTG^k@AEnU=l z>%adIDU;xG)f;dI10w+w4AP^wD3Q^wbYBCVUI#F!5+DrPEe4=!%J=GVJ~g^!i_K_y z?dYyijbjRhW#aKiHjEqZYqSSH;UkoKS9b_q4l?Y>n0HJ)}1~0kz4O|UZ;J9_FGxE?i%_B z(zM%__v(y6uL!O8Z3_R*lwuTW^qLq$v~b%;6`%x9j)&fy9veGNNmR@_Y1#9lT>CTa^*Y_GRvGlJT(rg~s7I;S z!RVS~4wgD-PhBMXU19Ik*`LFnf93;8dDD{`x`gQ#x`}#~^4=XHYI?srcarec+ zqnUdT0!&h{nb|yN9IQ~~>r;&udta{ms?jTyPD*o?U3s%>sosWnu5n=lkk20OW>G0s z#C^Otw);n zbCG*lF18q&mC&1mT0d)oyQFKMKmA%t@_`@?LF$1RRSDVk?JE}7#X||jldlE%Kyv=| zRT_k-ewgB2mx@gg57mKA@M%~R=f`3dILVRJ7;{N?+^4s=)%lHEedUpTffa%C0qT3* zS}&oAxhB%SgK_dn{P!KEN90RI_pdX2_I3}Xi23oy4PeuY_h6HWh!;Zt+;|Kh@#rnX ze{ff1WVopQ9!P%s_gs?*KlFW9xj*9X63g-mpOP_bObdSUv$01`@f^QvUf&eaEK%~@ z*9;f|BTsL>^d3h_j-KR6H0-p5rQD5tY!5+(%2VxSVlW8z~N&pP3 z|H1F&P+Aq2=RiHazd}RvkVEt62gazWst=5%{aeB!b1{=d5d9*h`k^Nut`OVG?T4+r z7m?!-5{yy18_LC5Ka)D`Kv#}5U zp7VV2R*Rt1;o#1lcUOrI<<_u&evfpyFs2Oum~-SuJxbYqa3k6>5d%c@#y$LdEVn^! zH(#Hv^?1f#7lnzbF6xsB&$V1%{LOV`UT-0M$@&kB$j+!hCXu4upqICR82celt{rX{ zzS|nCk@5k44@LH#OU7XhG&p%b`hcH?hPz_7C2ntBe&b%rHpUF^1uX-{cCm2(a|+lb zCOYH$PRTxrfeLEgTLozIGan-n)?jK1e*QZd3Q4x!S}Oy z9@Z!y%59M7=3lY&G$DjDqeA1g)J8kR-KwJkvOET6b6(QY zrYaPgn>k_KT%|Ppd~Nt(KG9E1!kFSOtXN^5PsN_F+ZbZ1?7YTx+23pO@Wu`eWfat- zf5joV*xFi6=1VsEbI>aNenIS1HMwwCG%jVEIb>T(`6tO8Z3{au^A+*|d6gOMA1Qtk zJZvBH3)|(deRUEc2xlw|G&PI47l?`;9O(L~EEqYQ@uk3YM9`kR|Kw*AmYH4}93kDn z8DcqFhS}+Q9@ICA`HS6s(i&^m*uF$rzDBiZUd$?4{G6w!TuA;UgdD})nwPZz&D$k7 z)5Qg&#;jFzK3$5epE|Ek@9}{Atp&&+V`hhR(Z`n2=L)S&&C-7I4+n_)Sl$sLT{!5` zYr+tOKDN1v=b0wm&^Pbq-@$n;9&%^i@(yMAB6b{Ew$2@3K!nDleF)Zk&&}~7O%On`#AUD7}2~?%I+j+ z2*+XEeCe~BqoWP^FCx6~DkKe~g~g;2<38;IE8}+YFJCgAbHqoxuetnYA&MTqb?i` zY=h#?DSMN?5SXhgtE4fEhWWzb>N8{w5?$Lobco-1zEafSM^0mLa@?O_a((LC^hGx! ztDs>q)a-#5N0q33idO=iIE&Ml-+3>wsziUwh#(_`6}p)Vu`gxNukumKnGib8aUX&{#t9YG1}RTE*wxx_WzVfe7OslF z;Kd$fVopqz%fZkO4>j!?{YiF5m}E|w1y4JG7*89m=d~Yi#`9A|B>qa3GY3YaXm`h{ zmbYJ~uDM_zGT3V7&GUH0v%-T@GYPwC zz!;ws_=J$Xe`@nY{oZ$!tQxjh#Pmt%*R@jj&di^#vdO+nVl%R~jD*@dTzrs#_dt7N z&_tH?c+#LyjODm$DcnXsk%j{c3mrY4LEyzp49}#Vg%k9ZibS7Ve3nDC?8^tvh_ay} znId543$zX2qc}eIH>JWsq9yIrd|4uv+LJq;9PqHXIOBQJNKVs>rM?M-onf7r{RXw% zX0TAC9~I#)mcx7)o?P7vTPGeCV_omQ5)7L5WS7|Q9-vGo^#cC@_Rvk2>J*)CtG49m zOnM*HwkuMsFyfXg^JdejTDi@CfG%NqcvN;LEJFn5NusE(Wly#_sx}nbHD6{Zq@HLL z-A(1fBb(~?-Z-lKk*R#qw~)18Vkjo`EXb}&@Bu`5_M|Hz#w}+X!wh-4z8377k96L@ z=G(=~*#^C5$mbxCJcVuUQ+2G#IftV zA(^Vvqxlj;qVN8I0gKDkIN}paXGw>h;^tV5^k}m!`bK%9_Bj!uDOaM>BZq>I3Jyo9 zo#~PxCkJi#ZpyxV)#J+bLiQO=I*J=<9XBxdt-D!Ic6~>JR=?xCaCJd(qH=sSKMI%! zIGumq-_9xYKhEh2oH#i%v*6u7v6NUy#^|c zGd~?-hFyDuUms(lJI9ARl}K&tCdi9Dv0e#a_yRX4`slYMfrrOx9eyZNwGaN{NK4t3 zE)svYhy=0U66ok-O$O%qy@eKv{)4Ga0UFy3l09rjg)|&q9v&WIa!+k`mJ`RX_uB&A z3b(OOD6cK4$KFZrFis-_#QV0 z9|BTa1!e5RcVUa6oP8O(5vm)Ynseb`-&@puEOpyF5K;A+q|<{Skfn}Tw=Wd9QNJ19 z-dM>DAVJ2l`pS)?q*}$!d-pDWf0BcKA~}2SlAJ$`*W2bkH|(2DA?CeDLE-xDM(53L zRLIvgAvCCOZy(ih!ym@_eAZcinZ(3sV=_ANCW4xIpUwWR{+L` zG9JYRw>9L*3gtZAcsQ*shW;qGT=eX6t=vJ?qiusHv)$WollDyul;^DDdOIGEaO&rm$l%Ha? z&)V-eIP=Dp;dj$cMBh^WOm2Z#F=c7nX2(h!MU+M-pEcRPcrs`;Pp-v(0l{j^A5xJ2 zm-pnq`r81V0`Mp=|LmG5nwLv}$rB{wLPf!8v}aj2-M1ob-n65|t4bv99SgB7KW^oBcnmKil;> zs_jQ&&jR-vMG=N;+SeYt!-*1y-L&d_#-+c597P&e)LP7!lX=A>T_ z137y!tTuqLY{7I2EQklN{T`%Zgt_R_Opsd`UMLzitLAWcTJiN|A%K# zr2wtBmphoP21XGLYu|3e1kq7af8ck4%@>0q3*N#@sQK&EA}L1(|P(h2oU6hOPU|;*iVath?_eBZDB!3yF$ZltW0w%4RP6NQ#dom`Ia@$r!piH$izR@gIZr^XLj z7P~3%wqJV#ef=jWrj{I;pNs;1E_we!L*&Dl?@;xqe&6$347u!a^`J%R0V)%qI}}Gi zd`FqwxLb${b_YxPVPRdI@XKWsI%Owps6c1WxBKGoztGj0-Ps5zQic>btXYhZAHVtI z?nm8{iYvH>z612o_#7gLXrV{tEL*reXq|4Zr$d~d_~C){3X4(!*jizSMY*e8hm zl2KFrN?+QiHfOieAza+NndNYAdwEEbfIF*iy%A?-Vcs{FLDZvYBkbU2(r1rwdYz8_ z`Yj52_PzS8eznP05o#_j66z0Bu3dlkbqW)ty6zktoz#!*N7f18;qvY?JeeRykK6a2 zA_W)#!9?*0Nf^SvYX=Fu#jnJGCj;W0rrI~I7sS=P|=D*|MAg3AIAy$pRyW1;e2ZxUr#e53du4E!V~kPZ~onAmIH{IzQaY16D+lgiU;0T`<_x_DWaT4Nb@A^&Mg803>n1JnGy zdZ82xCl_sRWGJ1j{hnfcf`lL!jW>RUP0Omp4NAoL&^6;^vpD08e{>h)z$zmmZ;_+| znjY{l5H?W(Gw(UD41L^OuJ1-q?U4Z0Fy#-FQXRfnqWu_w{~dof0s$eDUCQg%o99Pg zb8*Wj3}?>_9YiP4O^Grm1vIrRw$YbD#pJL>kxi8qFG)Yk&Y(nK2nVcX7`(x!PRUaW8;JNP-HS)q)`h?|4Oz>^lkGvB({{)K{L?k`D= zkxH;;UkYOoo>S+y_D9B1{LHqmvAHtija%s?!FkALjil&)G1CDK+Y_V+Qy<`N4&tdj zCn&i;lQL0Pc?OY?T4eJJ=*%FdyOj9&61v)M2so=W5eHZf>qH)2)JzSt&!eI)KPkI{ z$TF&n5zyJnS*!p}$`}&qi#{RR)qPLNcaqgNYTjO+`h>7MhA96Y9?ZvBitGWfERf6_3@~#&eT~Ddkr=^DQ6W5qHDHZIUk?{Uf3$yZhg|~>W7_XJ;KS<%nNG!2k{bNnc7{PaUyNPG0J@paMgP#0>2mA z?1-Bv8AZ^^hWDvt7Xt+u*1u1$K*0t6BdPVm4q3ZP+OA>twfWjuyYIWO7z)nlU8kmq=Sz*%kjgG&B_GAf@@*kqmO0 z^>}OvS>U>M8<`=QQ_i{(U=Ze|M0+Ji15Ri*Wf-ken$a@VLg z%nylEwu~hw%z8b)1X=xK!C4h4`AU6z^f6jB(+dk){VId;5!LBhym15R^0%aj|iGqX=eZ zLuM4nHY4c<90}T)Q$eg0ema6hl7&Cv`Gavszg+rQG^7bxGBoS!92@DkAT|CEW$U&t zX?nP;uA=^G#CqGbKKR+S5esBRwEsU|&CW82@FFBU6f16C1%7R>uI(02jB!6UE=&o) zuqX&!9-Ddko~UR+f`mLZ9{W#$y;|lZ2m8dkF$VTg05CEkC1a-XJCzLTH$De#8rv;| zPgw=}lhPd`E`1Nef%rk!eMM_eJBV=_&o@Zrw{%I>6+-IF#cPm8Y7lp_Y_l7&OnmAa zsXECNm9IPwk~aUOrjGs??UhW4jJj8To$552cEAg&kFJemvV7OC2fU=MZoCJmzWj@a zhh@;GtJ^Cx@o~R<9cSnFuM^f;IK?POhD-MeaDRel}Ol69WI z5Hq_Lrnl3k-fDHQC2&XuK|kpo^phkAzoC_Js0YYD4U(?;=jOLtq@s{UDpX+Rw@nTI zJi7j)t})~8GaAT`vMZ02)L<9o1HGuASFp9`ppYPwAoB%>Pp>N7ycyaB7U@;6$S<^z zAY$ai%P9%G?e@h2!W)||p_Cpt=|d|BQm)~l-O~w);l}y-`|}2xsLBboj1BNrGK567 za+1^37FAH2+@lS9;%M@a`Y~)l;sA`m$gYNT8;%svH6aIpHO;A(7(RHT4qsOTbtX&& zG^_u*coMQF&9A??UgcL+?{kz$p4U|UdUOz$S?P?9W+)vLq+~6_eXz|~S?7`x8z+C~ zjjdD&*zoQ*KPqJOJ*v-T#*`ePIka}(^ z40bH_8`v=cqPsVW2?Ss6f!B7KncSbk&2=~ajA+gK@>kffJw4v19t3IoS2~+*WvAx% z9`!Tt+<$hxU+$o4shfANGbEH4RIDe4@B zMJ}=F6tWvz3e{|vRfcbLQu+l$SQ+*T+3h^v5i>=3O?Z>iCrAyIH)cGvsgWV^(^V4W zKz{_BR)ATSttZ|r6)N7s01?`5b6Ti{oO?=oAiY*P+K^552N-CGGuI3pw+op2<;+I! zsikLc1&N|SmCa?-zTJU{ZKGMhje52>n>!uaRzbi14Hn=faD!hE7aYJhVjeXSzJ03@ z+Z9==_-9uEGoKlQre~en*@lOgT(Y@x zCBc_-1FBf`y+kOo~XQyRtLSX-$xR7Gf zw^zpvguX&-T>gnYYGLt;ZHs;U{7aw`^!D2Xb@Vo9Y&M$=ObdQy*vs!-4WXVCj{|#hK#G%-CLOW=^E)t4zwsSPT4z4eE}qB< zL=)Z{_4zsU)rz~mATW5H8I-ZLMUGGM5;F2%UG|ccX&J299w@`K(R>(ltZyV^=01bu zpr}$wOyVVQoE}d0WHW%FZL(ZRz9}~^E;92LHD}AmYE(j+OkLWh#@YE^Dvck(?c&+< zptsdza0o<)geo*$mBX-R``Hxh%e>WOkk!3EP2Ydms1M~we#E1#8Lt~O{bGtcR)GbW zIoR1>=SmM7Pzir>hrobN{rH#fvAqoWjH;%Ky03^UoaB=-VB5s`I-Vo5zV(|)yLKC# zFuId%GBqOf)Ybc>RiR<>ThOgAtXYkesZcD8aZBHlNAM7!?hgZ4(2H48qoVp>|IVnU zRDZI^=KR{&S-9LZ9scJ8Pr>IyaT4l#$sp2dFi$)878B}`@o=|hyt>ZJK3t7Y49%gh0*=lBGYvo=r&)H3$fplKyTq zVk8B@K}LN*1?(>XsmEx}FInqFMO^{2%`>ve*JpiU(ya+{hY4= zsP$8hm{?Fwyj<81H>=!kDG(b;=0!54$4%5k)R{>FFp3N!#xphk8Id1=%=ofujqp6&S~UP6W=gHtDha^!_N~Ov zjJVfVu6(@0!|__|4}@|roeT61KmNofoYmWVLRsddH4}gFbjh&=NZ#j_moOc z1C14y8iXDjX9n~qjfcmqHt3wMlpOSCy9PsXeqSrpqJBzR(X3$ zrj<16idKH9APU&d~p= z1zvVM_|b6X0s^+xS(tJ|D|;K%H(@(u5#hzf^}FYYKf7V9vS7cz=P(LXJF5QK8EHA% zF*!Nn2gQ#Gk&P7Am0>U#4C~GSk-ofOfV)-MV^@B%0tH;|@H)5sX0S7P4=vGfB9QW+ zPgT5Px#MyQzNn@U^TA}Om%0J5Q@lj(pnAK5>ZD>wuw#NVqKsVO2|TQkT;g!*%jk2H za6g8U4r(!W#HtDWD41_1FkC_%{IGN1OjJH4tBc3w$5q%u5-bgWJQlF#BZDhSH5ghm z-nYt*a{&5EcH2XNYMU`mgIc1{)c+PUrG~fNh7q9=e5jkfv@1V&#io1H(_vZGU{A#a zQ&5{ecPyG{*fJOT586SH1Yxdto~VcUZPjbYX1+>9h)-YZwA+26p|qn+3gpxg`%Yv` zL8i*c{kOF^!REokjYT*ST&eo|2U^)l2{tQgEjT%PQO{?Wy2=MY=_LR(bU=CWBD_?^ zo0^PvDREEoGA(66A;%QdN=7?oyP7`PPs>PjNv=#uZl{@HZrorkW`e$91hm*oCb2H_ zS)#U*S1D6ts@F2ZLMv?Vj zDkZwcu|%EsG%Oh1b3tWVh#tceQAgCm%YOIm&6}2$n5JU!?~^l>zNCP@d#YWNV`o~l z69u@a=X4B1b~{we3mGEG)JzFY{GhR9Q2^~9i%&ar#_lgU=mX^#=H4Bf%6!~{q3$q8 zrLnOi$vV~9U7Ef|Gyu&fP129^6}O{$SQe)ut(O)Q>~=OcH#Y*t)`&_sX73M-P<~G6 z5Zf;mSe+0xFs3S0IuIU6I0+=+XW#6JIQdD(nso zE2Au z2AfbxApw1a{=W^hYjT(kr>3@~SsQ|^5-%F$7?GQIi2^ec7~a@5XW z|9a8Sky0tb!YxzXr8q$G8>%tGs`VGU;U@Tf$pmvSJlDT@ZQ%M?00+zbHB>!~lbJIs zc61!p7*NuvaK^^cn(%O1ss3Y-lFWzpFU^^CC1JEtCe_M-Oo*_j(f zNIfV@EwvNV>7Wm7q7^EwMUT`dMYf#necM5e8L%2lKfDAL4%O4p#}MGEF=R4H?52yq zwD@Mr?=$63Jdh#RQNF0CvY;gfQ;{crye~uU-IsoxjAAkPE2>TrB-cw8(1MmW=2U06My-)*U3c5^2GQ5<&DBQUF3ojO}XGs-ze>xsM zjU`voujCoAhT!fEZ$}kC2a3pl6~LO#*BthG6d4}*aFdM*7!(cMAMh@a8caL-O<%mG z&(~1BA6U9xU1-+&h1AS=^EbFT^N+lWSpVL5_~cJQk`y1sZT7^7Af>Zjg*!R^?OQB^ zc1h(DXz74`iXdo@_<~00?o>H@uZ6da=ta?V=ohFu9S73)Gi2n%me`1C7{zo^vo>w@ zY?LD!FaAgYHBr^C(3X$6&jFTtXo|>KC9Zkj@1A%G^0BK!9QLn5*1avHP7WpbwDk51 z04h2W6?bl6tKmRU-9kzZ{a*|(5g@W2Ivy0gU&Qm88?_l=TSzY-p|z;y;hPH?`3-s! zG#o1kNv(>~y?G4&7c+S#>O$83T;Uee&ugkJX`DQ3zJD0WoL0+&V> zFHG{7KA<&&Lqb&zzk#wvdo@wS% zi)q?6uL>SSHA#4?v+c*|?Y!;RsGn5p5CZ|PD$k$z7~ z_8caZd5jBG)t4Q+x1e?A^fxQkGd8$LkpEL z&qNiE8)giQQCN3lW1igj@`Ybe#^hX?vblNBpJjF#(}YBQ`M!~@<@9R;d_gZPE1x=0 zYBgb>r!UYqtAY#x=u&5=qqx6i{0kaO-b@%6p;0QwWt z?#?dVwpLFE#J0R!@2~-<#5$FBtIKB3pH+9L#`d*Ps@l1z(pg3%w5ogxRi)U6Hnx}t zSqpP&zdm%(*;~;&*hJ87Uhx%bbJ?S8OD&Aqp`2i_67 zs{OnAE`{HTYOR;dV(2^fD*@_bq`t&Z9ul?R#sNRJkyZT@pZOO=l@=Gc`DR}mM()pE z$ayI@#3Yzt9!Aw&)%#D>@qFX{JW5Sr3G-EzBoALlhB2~QhVm8D4F$);L8;$1$I)E) z3s#}N=FbpA$)wSGOq@~C6WYBdUn86pJ$KuYjZxAeNs2eT$tj!!CL`?!M@^4_-Zk2M zPD)BaQdwy`$9E4=w(>|i;3%9TrFdFzN2ym!;bdlIeV@Iwe8k3nHZ#2cBt&pYDm}o% ze{xFEX4j|1ZntXP6c&f0>=%26{la(vq%YGrD4s$}+s z;t6dWBsz>J+;0Ch>S$G_&`EhVev~R<(%AaY2qnwrx1Qo<*^+~C7YUufEwOmpmb$K! z=3_hDjeXLRSYN;PBSiM~R_Cx7wnMh#Dw#J=xe~;K1z05$g#*66@@SUv`1(p(BylcZ z9rVJ{Zofuwa2u&znGi~fd8El%lfX~EHOTK7^PTr6a#*%R^dl*fp!m7`IYJe286V!( z@`&-BwS(QqI`!9=>fZZTx?Afjh58a${lpH-{$G1S&+H~1pvMa7&Kh4tmdfd0r5xG4 z>FMPD#(~}QrVv~GY8owBlp&W^1qu81*1)0XO6juf@ruQv(^Q*7lyB9VDM`uE*bDpR ziRO+O+&$efu_6oz)2^?NkWI$Ed&xl}s;=&quWw_^Lj0Z;ArU(Izg+8bl2nhbsqrMo&IAi2h$}z) zN8XkJl0oDa$75XKg6rX#?His zc!+CplDtO6ZO&M9jeIT$TB$Q@-pMg9;;{3Tzk>3p35O7?33wt$^@h1Ua3KM^{yGsK zO3l{b7^hQ07QR($wR0w!%{APzkWlq&DmeiYmaU0oV~?BP2tRoNP8Rj!O=%Y)VcwBB z=v{!Tb@N9KsaU0a{CLoch}+9>_93%{OeOVjm|EXP^Ju>g7p6r1e8|cMD*HOO;NroL z(&4Q*Cf*nHIQEmj1_a3>q>Mg69~svcMR7~bRs9;j(q@s4Y#g?}Rh2tlidY3t1OwAI z0928?%Uv}hjuCqv$RF9P+uk{1vK(3{Q8OGRFs$^02t<|Vn98jNgAd1Q78@?`UReElHs_of^Q2B>ui`iktM#hSIdiCyC(prK`@A5u-?B^9~d-TC)# z3U6&Ee0Bj4C2SbM?1|NDE-(j_6FEeactJLa!eEZnhN&ZpESEZS!Mu!04+e_VjzrL&# z%ZCrSE2Vz&@DD5=wA^)%ILO=ZJ7DG%w*A$nDd%b-!x#P-j7aedQnRPVP0s{{s;YiP zt2bePdf6C1-4Qa#3TsI&9H%HqN=;c2&Vv)tBkJ9fsqy_2l8jHuAfhHG$)}j_LBZi6 z`qUCJ$npQkvwTzQW0fFw8@~%W`MgCPGW*8;KBQb|EOj*8o1HY=;0ZE*7QS6RZmZYi zCtrfQ6V}VCcyGn~eOPA4KaoL}*G>wri3)B!vA@l%hh6G{oNCNoGLQ9ybImrYjlqq0 za{wb?ZJ7)b5E=tW@IZ|)H0G4Dl3Q2~8aL?bT&EtB0`i-m=<)LS9%Q)9w!ftjvF~PP zK8`5_;5R!TB^@I~h*>Gf`Yj!=_^>TdW~6w@8|SDZ^6ocg0pTaLz1${DXzI&uCBIW# zMoxZ5kS0bg+F{ZmP?L~_=l|0^pA5nl`6cqX7x1{NSZToT%_rTEZX&KXBC&2Yf+xn+ zx0axXF1^EHkj|h?nR)PnS}X>;{tLx)2HAlNZkC5)g`mR>!D7|d zwWbzMEs7m(J%$iT=zfGg3fdmcIj3S5?C;DTB$Vi~@9TZ^K%SfOF6rD~*7IiBcXSR6 z3{*7!M6L6VnDt|!DKN(SfKF}el)h*g0%UUhA2{epTae-JWEsRGrchos?W1%dSWrBQbgI*0SLz5#Gu?)Z9YLq|sY!;c9&u8=D>ULQ4*Pkcjd$+GxM! z6Z?h2Y87wRoN-#?+1Q;S(vGwowYc#@_LJV3z^zuHA=?GZ_JT0oYn2p@#=LWg`_vAr z&Wg60ZA=i;Zz9%LEaon9$UO2TN^ew?maupr!izXc5eD|UOr)M)phbWlJ<+=Q{3&3S zQ@bF*?E+lDFhf;It_52`_4hpTUxY0epk@|!e*#kiy(W-yaXibzLZvS_r6$AdyU2X) zlbUqg%Gq4Tqz~w|YiM5T(mBf5SiuZ07r*l@H>n;xKA@2h;jPW&pFk|#ZH*KdZLRvH z6ewqGKp4WisUmH?SI3u(%6{Cd;+<@H9~&GuD49Q55U6%Q(`PS@A-Jj1izw49<&!ZL zSX>mkrB-_&<6rB=3WRp=%?4ASOU4*X&b6-AV2e7BZZK2e{AG%z;x5vXZS-?OE%*V+ zNLprz_QNTYXVT(6+vF}kNtPXiKLi1FwgQ?$#2qO$G{uTEcL?>crw%0W66$j|t0r-08}`Or{$)25~E2qHm|Z^RCapk2tB&z|BgIqt>{zfrsxk>Eb0^ zeICNWbmJ6xrxefrXXaP73U!pxMo!kL+Cqgb;paupIMWISeCHetGx;Z=D7rOY-ZU(` zNWr>VXL1#Gs<7ff!zZG%xea(YRg!Hh23rGI0c&W-w993cmi55_Yx*oJ69)Ju95{p9h3Vw#D?0qYqjmIKH%KKfM-5HeK)SRI~7Z1jd!f z?h8?{;Ql3Jx!v6Xo(dU4=5a0`+Ln-~7#}|D5`_f`AT^e1@9k1~T%R8jU-GYl*fU$2! z)E@0pdMQ`$?>&DYO}?nUXt!DFSTe||v?E@mgh=YZ&ny#z%e==Y=$T<*t09bl(>G` z7pe5}2iU%x245ettXFd%{nXu^*BLh7?9&Jg&(*7(qtNxah_DD)%Q8 zu*wnAa1AO1Luv(!ZXZxNDppdKxFMr1vn}TK57;{y2DwY%%;HWv#_{OsSoYp5+@5bc zNE^|*iGVP;H-@+e?n=Q}jVRrxb=cMzF)k?Sv_A$(&5QmVC1cdz=Lot$N%6E7C~2AY zKOIO<`w~?usQiJe9pe&E)Aw*DgYfAtI}n{9JDb}`_5I$t@eJIZpSX(Ue9c1aYWCw^U^)sXf}v?>sJZj1{#YgMf2B~@30UNgZk zIc{;C?PHXb(K6dd;<&qo`P1sMH8BRGFOG3V2DHqTZ!2cMw%1-~70p--OfsHvW}nP} zm@^KAj2x+c74WPTP!RG~Ds(e`)|~ zL8Zhr(=X{qj9Z&>`DMtze$bjDc35v>-?~m+2`lFe&~d1T!2<-4E6_Y7uIzSXE|eMO$Y*jeHQ(^Z}{(1?MtZ?RgQOKpUFpxCmiA5yVyA#Lx2 z-;%bA1sUn8hw3ej6`n4#jS{WS)s*iOXR{?6R~H+qZfIB*hI{-? z@aD+NQN-h;w@`?g`j_x2Fs&_ixaTAnvSB_2GS%PT;g|127awhZS%ag7+{JlBL#+XlIHb2T2vPJqrh0dg;Lzj-amTNr^7nh3R#s2FLGmTYYRdC4h=Xp}5PAYma>Oq+Lh?$MR&_0{S zqc;~wK05Ve0hDBIa*`7VnfQpCB2!@38!fRB91@{n{M`ph`B{sZA-I)FP8wW5h!n3D zirHCG*rc<(X0^>vP5Fitl<7uaMYZK+0BVH#G1>fiB9xl1;RSF_%B9J@Z;XuvZXB0H z;WPqe>e{&E_Pp@;+`QQ>1O@HP-O#R@)!RkUg-%^51;bp0Cz5QV^e2T8RBK+sk5|xW zFa2+;eJ3i)y*4>5Zw1to3`QmLlMj-PgKuUvXO!nU@#3R6`Kh;%(89!X!TOnVo!Wi`|2~X@e>DFk ztH;uas>DZwg0+07C~qcR&?Re!G*>VX@vXmNo{tO{3C^~!Nv1aPCy!xYEobefR(gzn z>_cz8ZgIl>n4M8Ou|d^BRt?}HEHPeoL?@d+I73foWpSyKC(e zZC8_XLR}M+)Jg@Ewa1sj4?9mj>?Y9nCfM&!#~-;KN$l+@<~8LPtd&{^N2>|bAi9hPiU#DBbf0R%RyKly3O83uIwiI4;u^=%$Zyj;m!PgR)Uqg1fZUGmo|!1CALNcN{|J=Z$zQ9nU{s_Zq1FOl)h8I(Ryy$=!mc?`P#5M5 z!{KRUM@|0IGC)|-h5I}|Vl>S6PP1satPA~t2g7}uFH^|e#(&_zF?L#WwrI1SzI8^B zJ>|@po;ChJ0GTXfNNCBeG!7R{kU6XHU&za7QfhN zOad|Om8f`SBd9R!w2;AqJvrmL31?X54r=Pq>S&Hf5C$KC|0~i_m&ldc8N{~YaMpHb%~{e(;8Y%D)hP`P$z|ple^tB zWN^fvMw^U_(FT-0p>%nscGa3XrAXrck%5!b>5HdzI(^6`E~RV7bk-|0EM?iS!8!02 zl0JUnFt(I?MB{$4rX^c1Bv7KkORei~*RzzZ0M$0&D>XwYqE1=`R)W%&K5sH!-Zq5` z+hzvp&VbvZ&$g}T;#^D!<{JnrL zV3U#pAru49P*cnsFr+hZW3Gb}<{zikw(!C&3H@U6maYp?@08rm>+Rda4a2hM{aF~v zF$rDrAM51=;*{WalgkUs%TnZiLAFsr{T~k*dJZ~!rH79GE64uH)2+Ya$NXZ569-Kp z(OYz83kO9qbW~JSZ3Y8YiL*~HP^~}3!)fAFRfIExq`r$38m$)M9gWV46%Xc#38Vw;s;mpZ zwPfb56V--g(yz=k9TYcUIvstae_%4Pq%ajHivHr z{h-U_jJh>=NfG)SYdh8#=G%oAvQ?(qx(>_)6@}2>8`yq}$A_EMP_nR%frXVO46QuE zMbApkQqko9Bkeojsczr6?Y)z|Bgv-hnO!2vmXX!4M`mUj*&`#Oln7;&9mifFiIjD0 zA`X&czxO$|dfw0f{k;EAkLURxzw`Uu_cgxX?{!^w=WMH8zJukuFM9Up&QPtT6e??Z3M)ZqgS-l10;g`tUgs9IKMc2SOY4L$Hkt^19E@rMu-zwv zQ;%t_aG+9V($7@|25QlKo1G7@3)_iV7I>ewbzS0Pv$50yw%4+Vv3C@&baMjZcpLH3 z1h)IK_fX}qG+bJ$ec-Lvnrzi3)9wZMZRH%P`SF)r33G0`d<^de@^*D|;HsGDG5OWe z^+BiF<*{`uq9v)iv+CM^yMm{GqHjuS;p?00+eVEY62ps|h=v|#@w3>fxGy}L#cI3a zcNdX?H9O8>+gH zW*pB|j$gHQvwzvjUJ;!2q0V-6)9B<5b1Gyde*cokTRg-0&9cLtYW$@}Q}2l@m8N~g zZ`or9Z4mt1gP(A-xb5rPg%A2?uYSMZu?{POYuwwD$ooThk$cP}XL`=JzfRpNZ0I+s zyeXtZ89&6IJc4B33v`NkZmaY4&V99jEghKF&^fB~7EIQUpOUff1y!KHjR{zKs=;0* zhPZR@TIu^?%!>DE;*&Q0`bR6Tt9f%3^X!20Kw|_nLGG)q!x;WrtkucIR#Gk${JqeQ zzZbgD;FKExt~A;jZKf7K~kET7+!Rom3jt>*k;`)Gp|#V zku|><++nly!?>UH8s5<(9_K!8ife+aL8)Y()jFaeS;E)R5+gAUZF&~T9=UW+N6-g* zSfXRc`=R=99s2dnWn6~D(IP@4-TR83jW+$43NM&GNw!V>dQW%&&XX5oQKGJ@`Wt*J z`?`IGnr*2pQdR7Z_?EoHD#l}c9*aH$$JTD-TuAnKr`_G~q*Rl=`a!_qd6iEV57wOH zjhEEg0@=e1KPM4+6(q9ga_knq-vDCAbo5(9AK1UE}iB@J!Q8cL0g+ZdL|Ux-3oh|NeSxWbMP=Rwy><466EF zviq8B*WC~*^u_qC{W#IhkM7li9!tb-S0-3tBCa{7zg1z09rD>A+`Wo zGPe=Ek6*bfBM;T2RycU74b_j0HJ=Z~E+2 z-HF!*XFqChcZCbPeXt&#OwRn%e_wkYmStPDOwUt25P0{<%p7 zbOcvf!Ok)Cw9mQrIg}9|Gx)oJ-5nyExk$O@ z>-E*!!VKVCx!3HP9d(&yy+y(=$9LOvYj$g$J2Ur=47$W$f^)of;4c;pZcG1xVoS8v zs{P(t6<)4F=j00yml3 zw)!izd+hst47;E?(mwpuk56qXT%R<)3T9yY-VZ*eLri{9{I>t~$2&i$*lRQ_hg>IJ z(-_`om=392x`dP1i7jOCN91j(RC> zbX87@7@q=?t(9+vJ$9Drp&zOu)SGmzz@~peH~u0%oNL0cg7lBI|D_0r?g7k;F3`yu zoNJ1q!SYnh{l(&3ZBNl3o@XY0;4})y6ESdEe4;OIVqk!qP z>J_8LBtK6y8_50jaLwgfbAYrAH8%^H=|k)O`FyT>L?r3tX^eR8rS_JnREj5<+CeS4?y(#NH>w}lmTgUbRwvAGmhB_sZS!&HTP>%j-#_h5c7O!NDe16(X z^5iA1!0dAW@Xjxy+R$1iBI`?5pD~B?yu{g&rfo}~h5klDzkzFLC^}Qq8 zsNh8T^{Zbp_L-w^Y{2nN4tgqfd;XT8D*h#FUxBz&shC1AgWV^Vaic3nITRG1n*1iq zOuUVP_`;Bf8f4KppZzI)Q1ILnjj`{EQ&TFE*tT5@bgV6cU^R}W--XX{!@{kgey-5G zv>-bPbXO_7VK*!WH|(lK0>f*vdY#gZaZV}l>Q5v-o9y5CT<7T&&u`eqV;dAZbqepG z+kITQ66i7e*4S}pl@YqVAPF(B+m4BTD(ZxVPifT3AwO@?n(u|eqKTo6t|Eid&;~)l z2nbWrq5Rq-D@E+LyU1=<7SiXKynZO-%hz5J= zl-HQlv6DPmZ_tH_6@3Nt$4pU=xe`I9If_5rIh$&kS-gUQ!?gUS7R zWXMQl799<+!kEkokDF-k>DwseOMKNtz4ryq?wSYL$}S*sn(1fV=L&=Zm&aq( zfu*VyTvtQGzNQU(p=ZWC;naDTYjRmnN{WdkKn6Vu1LImH0f7u(^PQQW{^erLQ_LjK z!zf5Y_!L>lQ1xMCI5JYiE-s&Y8t&j?nVR?tkdrXsUI=bxk^}#IMqx!oCFdq9jwtpk>YpFI zJH*ReIhfn+@g6-P;0GZR&$UKg*HV={Q4{}bV7Yw<1jSZNG%`#&g{v9@d{$S@huZ~G z*se%7gi#Ap-7V)|=6M}AF~-UwfO7%mFiaOTt_LW zz+RP8IZRWpVw6fkwIWJxDuXn$*Y7fgG*YjulQLJSI%i&^c$#nI2qOhILSh? zJWcs0kXi5$R2PE07$~@WwQ@|FhyqXVVhV`<+a%Glfu{ZUI|_5PO$e`Ho@0u0{H54e zgo`H{*mE4At%_}20f=McXguyDwq=;)@@>d5872z6$c0uippiF^x~_*r>ofym${Y6j>tFIM=viI)yXL0OHN39G_j5^^bHlPUCX$k#3V+#o ziMf*`*)PCNcdN{WQ}&yn{Ic-Et;tW+aWM~s+aiALg!d6|bAGpu*TfLG>`-?~UD8_# zAhIiWw$Y}OmnQxVK6# za?DzV4ri=?V3g6N9yfgo^P#ndiPt2!bWw7&Ya-~~@Q$VD8S`T|+c&+$#ba680lxI> zU*wqj8k1Q_=D=8_g*M_=dfJ@%SXpS~B$xL{vab7w8o>2O5^!{6${)K~&?N>QLlmbx zKb`xdEjYC{)CYcyv*ds1f;qwFTEk0Ji+S2!7BjJ%WA-Bfoj1h~u0D6p$}Oi3tPRo2 z1suGD14OD*a{4G~jFwssMs8c8RB%zY0X({JXx!YU@`S+>810 z;s$eC5GKA!&-uQBfa@3me0+!Y(>QLwvioP|zGFP1%e;LIB2r8dp7jCu3+6=xZ>f7? z5eh|~{{wN6hU4IQx!7iktL-jkFN&5g+9i%QAsNS0sut(DzP_$5-8({M1o&91B;61Mw++`NN&`=cy{!$=T*Gyn};! za=vN3ERSX0-khY>Ern?Yu2*jxaIPxt5Ep*u%D^#?8x3Sn_1KI^byg2#_V^;1lv)?W zus-hJfX?E`#`laFTooz#qcM+LZ~ac-Q*l=wb;-30?ANoZ%)NU8W}MeWuB(k?67&~4 z#anzpyXSje2K7Z;IIU^-+2#p&_&c7goB%Hdv|TzmRlnZhDt7yBc_KcKt|EuG^!ReV z32LrBrucmrZ4DCv!2uADU-*6u0QXhp@Nr+MlFY6wINM+CZooj?@Tjxk;m45uKLo?L0 zDdw3Mmz+sJXfZzJcfz8NTxfKllVar?TuA$4xiBKPk>rRcUH4ZO z8F^D1d66E+GgT(q{OZ+@LbII4We+1C%;6nmQaepw6}@dK>Zrp3c7#RS^ozC?>ib=k zIsM%CTI&bek?A(rWa#H(gpw%p$H@fzHNy{jI~zJYBdb#PF*D$s&`Hw{v{Em^O>1$l zNvu*~wF7wLKc1cd-iAD=v5X&ncm^~Xo;wU1S&gVNRnX7v{01wf1uKO#y?ef23fy=b zn6SgZQ-*3Qa+vcYNH4j!ct>bj2PUAN_vIATVs4(3Za$P24z%Oam9Ov-_X1jK8KGW+r@;>JZBXS5Gl=UHm)2PCL=v&brXvd~8f z>fgUO3aTqUw0$mhc$F>t{8SdE7Ky3IAseu`6#4`?)ckVe7_VV8!PwW0XO@Ys)uo2k5Hc<)Xd;oY}g# z#(^klQ!M@rd;RNjM`JXp8Wn9Lf{Uk9bYiw(pE(JhpfQ-6N1#{uy2xP4ecZsR+!Cl< z6@q6jN>g7;%`(lHbK@?*#jfp+N*gXjD3SX|WwQLkppR*r`n znmtUPalZmrzx)RD?^#lXD^$*p1*dvgR{iBRxXe4s~S{WF_XfLJZo|@2J0PmOc>;+^mc8I%*B__qkfMK z{a7?tiV-wfY3=Dr^t1B4t0>F7Rv#<9MgZ8rD(=AO*;F67S-#Y>n)Tlgvd}B?I~^8* zqJkhhQNY@Jj`{z(hWaByC5~UivaP0jy&-Dn^-HgLocgYyeN>nGsXokH^z$Opul#cS z$j`jLU1M zR^uo^Yoh*003+d}FO6~Pw}fIruPTmQU*?sbUSGK)gE^6bd9!5WO)+*7lVlLF3(r%Z z89DgYtS?^cmC)GXJ`i1eAivaNkqL7jg%X7mMS3U#tt7O0OVzR1W}$#<_B8Y|Q?M|0 zDPyUIe1u>Pa>F0cOHp)D;fwdlOK-~0Tg4RFct%?2<)P@H$ySO&wjkjwjw!g7NLfn{ z!Gz#JB1>LEez7=8$EMiydvdjTV3v~MjJBiBW80EPkEK+NLD&K4w$zl2T)}^Si)QNm zZ~oG4j?3S1H>0{;>DjV$Cw4U3*@1PNtb_{jIPR^J1LtzNXW@xHKoh?nE?rhT!gTgoP}{h*`5=^ zqk}7(MCG-tP<*fqu{W9dXx%8MQB$$>6~_5ueY1`525=0~xzH@ps?m(le)uwmG<&AV z-EhHzSwUPNjA%uEu6_*AJI}S`i3D-~pKd<(lE&=`bGB8j;Jp_f6jQIjmdokCENHf7 z$UI%Vj+%>3pHFgf_}e`(-)Lo>ZqB-^i7}h0UhE=( zn`=~7PSahf6Xk+;T84&uUShs#12Xi{Q&4r$oKFhF4h?6D0h8RWb)4Dll#Iygx#w=z z&l1-pqtuoup*AE7cz=Odnn<#%RO9QE)a|Y(?qEHZOzk3?S{-aGwQhYMU0rEPPiLX@ zq7uq*!>F#+u;zO%%o9XmF`)lJtMDbb9>^Bvm%Z-0;k)7+Qu58WLSdY=12x+N9aaL7 z0HI-N5)e!-ihrXAdjLBZTeb2d)&Mt4q&?BK9$MdO%*l~FFrg7rmpkrjMNA|YCZUk+8-hQg~P z6;-Wj;tPU~ooH#4(XwZwva$RI5lOto^5qlj>+E6dr_^OupwR=eRaq+lVhcU5IPXn* z$CB)N&jNaT*gz3vO2Is;AO|ZIHJjsw$JyLme_r0epGnswLsgg`5X5Zdue!KRpKcys z1W<|fB`i8y8->E2a;mu97kq1{VkTO?Z-q#S4VE=iUEFn?Oj)e}8TM;!(>A2hXU{Tg zg`<)x@*O2nzH-1Z6Hx1zoVe z7-iYI0292NO@krkr!RwQ>Z}cF{eA#wfJ_i8Q1?4;5)SHmP}7J6?8**bwA$%h&~7aT z1&k_7HVrxppcE|#4N!hI{T&WiZ|;&zW86i>eAuN2N_}g9e2MZmE@H`3Nn&REUIgX9 zkK$)$)*J28yZk{RqrnWh0HmMlcz%I3{N!vEkwGGb>)-WoE}m{V7?ip;C`> zIrCz;q5GoaWP5h498Iad{FgXwLZEK0UuxijFMY^g!ppiz(4(b_HzUlng*9g#)G-DA zZS)1wBlDDFCxGwL{&G#JBF1h##j>ylp6_5mELuV&BJ>Uofs&S%{9aE@<3t0 zkGu>+SU~R;uz){y6Zb6|slb^eIEIt49~ zy>6dWwx6e;fe66bXApFmrw-4vPeYbvF3KUczB(8Q^QrpWYBEn1JGee!T1Bybp5Y6` zN}jcDAsZzXI~%k~C~|jL238cZ5*uDw*?~?n*r64`1(+b({swF6e$ndRuC(I(X6zzL zX)Hn8l@d1O1@Vvf5qW%iL)fis6_EY2ChGDR#y!;Io0BO=eC9+(%SJB2FSI*~9_(W)8kSb_J9V81?1wlT(8;S^qxrnJ4 z-?J8G^jE%v5KAbL31yUNif+6MWBya-2=G1bE<0ZMo?o7gg$RC;> z?&8VH)!$Z5Uel0X%Xr?L8V5tw?&rvG!O%pmf2=g|wX8%m3wgxSi^$Hz#{Qf9m06(n z*wtXv==-t}`l9fT^p>din9TB}_-}>}$0+y-8Ihp`!1AbdaTGk)J~w67^cVOk$-?rsE^KuzFR%OhEDTN5w8z%#?b zwwtXDO+UZ4BvE|rokhwxhr*4PG#o2{qv&}8AQkhL8*Z8cBL+BiA=0sK$DMQ8QcI&Y zgC%D2;a#W}!e&X|5BNuB$0m%W@>3-H{sgihHqJ6p@oi+~^hVN^5s0ye4v4 zBD(ehAzf2OSa5b@A`=4H-0bNnyDtQ@Yd);iQ0q-=*U%e&NJ&bnrS+U*`bG~^rV0|7 z0U)_$S^rS?i5Mn*{D(|^#gs;hu0)v{Kq$ZLZfKV(sMaY-^eCPC(blr=bnW|lMqZZS z^LSs;o@LXFU)YCC4B{&#J+Tf&DY*rbs;ki$fy4FOB5|Y|JyfUUwajENh(SEUlARe< zKKC(9no|q60kgW1%9HOc=X&E$qs#EocYI2bA8X2fP8WPz1OF$W%q-5Hvf720O`;pE zM=PZ$I|rIXk(H>x;mVIG&9D#Z{z0wlXV;5FFMsbXj+~9>os4mJ0=uss4hlLA#(c## z6#;_E$VDK*YEk|%uo%aJIHorY#xP&DqJNo`R72}@boMQcZ+*o*cl+;0XdD18!};Vt z-Dxjh*=!7rls9yjnRgI?%p7JvgaAM;2naZ|(-n>dN+`Cc(OBxeDUHWC>5m^@)4Flf z%m4`khfLt6TmCjREIA{tSLcWBMORTR%8oj25xAGP#6Cx*$nJU)pD1wn)rPWv;~%~Z zI$p6kRjE((ZMGTYvho_IUu9=CTr9RIK~NJKx4v6agUAdhvL?ASdhno()VI3*u)oL7 zj~fanN;h8c@y+q}5taL@8^7}0roY?I#~f#t7i8vC15zBWsrVy*hX5;Q(e1tN6!*bqSlqD0O)TM4lHUnD+`Ic89)gVJnA$?y zH0iuI;PguZ35jXSPp*HyS8Zkx3C0X&7>9w8(f_lhRIl~UgN$%3r-bV+BN7At0i9D# zb$D%smi@(pHPi?q_QyVw#Me6()9X6M>jnzuv@atfG!33TknZ`*b#6i876=X8!rLPj z6pZkh)HM6<_Mp<4Nx1>%WoFy*HE^cSD>&I!s{X1l7p zyCL+eDHO!_Q*XVe?WcDXv;qj^kg$@Ih2|f$YkS4?lYlU$dJ+&USp{t4!R3oA!RN9A zJ9XDnm$$34?nZIE?17MM7+tZKqW(lb))e&PoGII92nlB%v{I8Fzsid{BX|5vN0Z8~ zzq7MhSlqI5?b4-_%`Sl5F3RI|U$Cc35CBTgECr#Mph!YtN>wJsQ=$&vwvGU}Q5hVZ zmE8gVc;||vd&w280Jq)D&rWCAH^z;>j1lseF~Sdx(UCZ55aSejGn=M90Ll2;8mHx9 z`OXHC0QGKPC=QyDih;nAOEH6vE{t1*$~$)c3@%N7U6^8Hdm*^o2=MX>+VX1rIQ|+B z@RG%ayVRp;L?0Zg-2bd#uzf}QK(ILRA;neONS5P+SN$5?clU7!<+T?RDG?{Qf$Gf3 zn82r zKc+++T0u?F>x$OQ;hj!v$sSNd1i&$%L8!b>l|Zi{BQ+XnP>`AZTe+o|9F!v`#S8#ML9ajKVnnKKC_-lWZ8ZQaWPtXy&_RFdo6ewH7lFg z4J`}v#(@FC6iy@ssG|-<>TXh)9Zd?-H<+$f;+^_Ck_quuoz%>Frsp8XR&73D7KVF2i!41h5}p@_&l z8UPB10iY$1ypvh0@(n(OgtxB}^_X+HoP~0pD!u&ivYN~3j2kf0sj-I}peG>!0V60ZiqS16vuJ>b=-(f&lSHQRB4M{b;F-p{NdMF z`9x@$`4AmlQ^UgQ$iAjE0XTm|dxI^9Wv)I$lXi0>ULEk@u0v?_x_ApM6k>Gm)?Ja~ z@ZT(RW|s(%^$37I5bcfK8<_B#)NiFzKimn-fRH9Oh}S}uAb@k2%@lh8#9I8iewj9B zk|*njeTT0CK5r2m0vO}g zdxq_xHu$y95ji2N5DPsDIqL{J3kl53_H>7?skKlx;iV6!jVC%f2U@?y2Yt7n*lGNB z$#_EjUKM1D_ht*D;rqlpjTbxw?{qxOdsNkWt=L8|ZY4oA@i%S$T2TI~Xx|3i+ykON zQrMnp0UtYSS~;nN|J=V^u!ggYDvWk^&)g1Yfm{R>{`wA}cx0UOoiuU^?$&oYKsf|; z7`7<37^-`w6=Wg*#g_WB?t+(yZ8Q?usCFHWDEZE${yaneYeIFpQx>p&pedR#3gVf& zvEq34WKNjvz4b_}SY6u9i8?+%+C<0RPsuL)K3m@{z5h(v$mbQnyPqmE@8k#gk zD3rJzl(|nRdB-@f*qZnMJSSc8CVXe5a29?JNa_5NfRFTZzfA0~J;nR_Ylb@F1V3RL z%2DsKXo?C@FK#T4?$C%tTtUR`i0ldF*qZbe$)fdq?@-^p2m=}adrIWxNpzIh! zTF7TmM{ERARA&8TF(GBJwG&nLiNO7L*%B@NIKgCeLk|Ny&seg`FD%)D zm34&e5Z(srPd@)agaxlslVd8ir(aa&?5$b>ugbv)i`Ir1gJ|zQj#X&eyXnv=w!5F zd6fPU@KRzRaT7N}50$`B!I0sYP;Zm>fUS+Wk(!=GJZEQA<*X)H8en09>JS6_b4MR^ zBot50j2KIVP|8{gSkw|uMwsr*ZG;8oJ*rKy6KI0=R-3l6nxIspNvYvt7Ym)jQ%X_> z=0`V3)~m|JYI5MeicajB{nJ6M^c3-7HPR}7Wxf=2HXCpmGasV2YH$&@_iqO;BMgfODVtx~@t=%$8z>C( zH+sfW?AaNP(yM&`U}*q&UR=?w&KysKp3pI>3@gAtFPMn~A7Y?lFBw%y|y1y%T2 z{iBrPMGqG{=x_iMyyEl_ukQk>y9bH%Wkglts6k>n*n-1zcji;vM{qvc@etiD(&=v-H7`94MK<~B4&RN` zx}bH^1^jgC?U8CAEN;IY1pp)Iw#~hgLi23_WSB0(Xkcevr)VXQ8LWL#uWBvIV}~ux z&EmGMm6RAydYRY+{ian-lJ{a+Vz3uxKS2jc9Y3=*J2BwT3sB%0H02fF1x{W~bsJ=gfECB-Zl+j9X-{ALX8vnhm z(T1Y{av!)9gm5kLwWIGxs`Gr{j~~6Z7U>rc%NA_jBdr|E^bc&hfU8_yS)=Y2<@rtIzITp-#(&%9{23Ef%(5<1O?a-vp`)qS6*8TMq?KxvJ zgTM*vw&z~$zr6xNS|kRw>GSx6QW}a0TED$=yC#qKJC|c;-q}D0qUCN1Rw7DX5 zvmsAw?V0hps8_JJ8}93ydc76Xp?t3KX^u@Im5YSG4P_bfm{`(KT3J8qn})G9TV`qD zIU9gY4c$)vP)pU;7FKZkZIq&R!LE zbQ!i31N$R}_b4rS{rZ$vI7GjF-s?_G#C-Ls_|%tEc$!>iSY9|0K}qOuzvXKrGZ*}N z9@BA+WiYOd@{JZAaB!op_oaIZAG=r+c)!>HZ!;y=Abd=2L5f?3LyG&%2_UN0 zH@tDZ975Zyl(gAyYE3r0_HRtUl*^ zZ4khSZENR{;}lXOysNB15gm1fm4*4*SwC%t#$sH7fUkHjoekcJT=`h$tIhBqUQ}*o zBLkm}6)Uqw(=Px#1okpr4C1nTnJ_L-JOZrZW=K z7UtLkKJ1eBe3j5has32v5jloiNDVS;Fusj)ZTbN*tZRdT=^w69WdR@aO?G?2)H<0- zP#FYT$;9I#uit(gQtJ@%vQbbzaE6hYWAPVZtOh;XdT&@5rDzBvq zL)_!hMk#FDj0s10>oo(j^9zgL8*c=bNp z)K&Liw{}l;#!L<|bym$5=CWfGb#*~3`*x)378fA9e^xtVe!^X$$Ui1C5|W&s#>j$^ zj|1>@C93^e4tZbJ5da1rF1&>F@aNXLJ|S7lD1Fno@a!Wvi%6?1*+WUVB$YbxmP_SN+W6^l8|U)v2K^FW@zp5mSK3q-FW;P21c^x1ugDpR zKp;I+miDSkWo@551p+H$5s@NETiZS5BeOY`#@udDJfEIvbqIuu zD!kQXYPRHSO#i^5peKJxJ0$p_OcI8^J5~SLW&%ylutE)x{D8H>Y+gQ5LbxuM40(&V zyaMjJKKuBeZjZv#PeffR;l#|cm5LL<;6R~;=b2U+?uKViJb3ozi3ca0eDF}ui3bau zeDKP zq}UZ;Y!9s?jC(FrS-GC+3?G!RcF{>WO!bx`ST<_>vz|i@f(h=v6C~)($IlN z%fEl;UTDZ+{TKVpsvNgUxvKo7DLM$V*g^230-4Yo3u2f_Fu1_x{Sp$bc}_)t7R9y? zCOYC30KKy+CqrVk1LW0Q1y7rLN`-xDwb3Snw8MO@J3{z?5E=bh)o%FdjTKEU`|5BD zo98%&YJ1f5w)mP7x-=qg-3WIR=|CCeQXWULvcEEICH;7&jpLD?APHSwK=%O0`r>8R zo+3hfMsF3dp1p-u3^||Kc-MyDbDoBg^@V~|dDlzM?En5z+wU5EzWh|WICJ?aETQhA zS_z{wC*tnjiMV_BSE{|uIi6}|wI>Opw;V+MzIa4rjfc@UDV+_;R4JeM)YKkm0oqAB zX&twd-kFn#^x-5Tg_E4LQ_e{{x!>IQk#s(2_OyqGc4*U{VedWSk7r7Lq0N!s3j~e7 zHI^BdJ||K*gzsAZP=)qBJrPD16_GLlp}F>S$=iKJvZp=(^NFpFEmu-Z@uaYCFLz#p zYs;&5-d)m_J(*vRkLOpe#_k0NwA`w%ahx>@6;HB8?&-fU_+F%>ONuev=WOuKrXWJ~ zWQe$qNMxqIIkmH91%DL84)5IAIwvWab5$3!qYT?mjunAy=|i_;+9=CnPS668$P@zx zQ8eUGm>Q~_VB1+=r+HZ@3GNY{t)qD&sW|5bg@=FYS{VDxY4CjGUMPQJ3vU!=Jgq4* zMb}ojxYJtrWvI}FQfJl1^7gVz<(D$Xw5dGG4%qLtqTJ#IpUN6XmRiU8erx5zNVSLG z_#?HLSVq3AP5C73R~n4&Q~jlyQcE2rqpnh2R=$no zoH%1QduFeUh}j%;U*5Y^!gXYGA!c8otv#V%7{848X}&KRmR6-b{w%YQeJL{C0*nU# zLrmlKOZ7?Kvo}j01ho+Kj8K^X+h=CV$RxBw3b;)JrZ=c3bgfi#xUESZv^wPq7TY`` z9JSg^a{yn`_uDz?*6BSf@76~x3F_VnoD*&A)os;w7l5KeD9-8epWA6$gi|SG(NQiC z(N!kJx2?A$oZ@s@{!%aM)Ib1)nG6XZ zGiz8rZhu&HS{YL%Tj-Yw_hCiNd){i@r%p6e9#H**vE)d+9B^P6IE{H2KKZitNf8DC z3{NiE72y+WR)j(dU^BV^;r#UMQ8c~vIVY*%n8 zS0dvnoCS@dQAVqh{O`nCv`3F1`=A$b3OaCC^l8#pW?*E#OjBrF;^604Xc{xu$RIrzp+X>RPRL!D^i4dijB=OP*WGq{sW3Q59Z*qUOtcwb4M-l@$D8|j- zwjR{zDx_jlmvc#XuQ*KlTrE%)tW2UIH4k#hin~ibtU5dOFY+f@c~l|maAm}8emmEt zpUU`@U{F^_bW8wUK8Nr;ZF7;#W_Yar z$Y3OG5-_bq@wW2aGOd3OtlE`(~QaAM-8A|p_qB&FIR%K_wVBy)bD#+Ly<8b7dm^rBr{ zH!o1gxCtmGX4y~D?!FfB9d&+kpeNySZ=Q=zL_Q{w!OMtk$`BVv;U+;9Z|91Ai?Lt$ZP!&6CAFV=Hu}DN@m%?AG z9in^o#AQr@zyI;&DcVjl}(UeD1ML4KWU zbWK+@$O%z4+#cm@2rb(I!Gd5ZCu#496?1_2UMn9@BV=$u9m|r|b_*FF%G}uL_|yO; zwOX4EQxn12)&V_GCLqGZ6q@rJx_JI%POY3jo>N_Hf5nN;i8$H6w~fiJz|9N0{^kLzTuq)Tr+J#6ufqapRY;4$!g?kHAWYu9%X!o+;0W9CM6RD z7NPP>?m(slc7yT|1y<&jSIDsgZqCvDh~TFfURBN)ew=ROK*wlydhgOhI2fWAUE#uZ zwYfF*$2-hs%=41}M-6hD&@nhwPP3>E+NA?%2SC|d@lsIBwp_@h>7ra;e9f{K*<5(~ zZ3DWdCSCL)iE{B#wh|vWLBi}v-rS^xx`g}LNjz|)N9P_hpxUBi>4HxZ)*DJlf`TH! zX})P{Ed=4D4<-O%|J-DR-Lu;|{TQ3&5Alw~gX~D6Nndo9B{}aO_>eOY8wg5U3Y^I6 z4w+gf1Y)^e1F`IVSXN}eDGqxi9T>UA2(uavr1Vy0cY>fogMM$Kj|iM}V)(1WcG;*b z=^9231i8B-Q~@qI*8WQ~0pxii+Z90%@MxP)s^;{c`D8nn%JJDq$<~STiJK)$g?3)c z8m8g)9lubwsi;iNlF+?XG!P!h6r}~ULgq$Q1#n=-h@)sakUpNtH z1+}|3L9`q|bnyW!dYP2?33Tg_I^z}2Gbc6=?MK0?sMx-uLJ^`+-(Xb-hwBhjlZbFL zA`ukTuH{a+A==6G)}a57^v*@uz4WkYDwKUDGj#&`?&{pYP-KCPm-=C_Vg7AC7w6Zl zSHEG+m0IHT3%I4K9|W6DbFz}FQswv`;Iq?^D5EKOW0a#J+ePOdS78vKc5dY*2g%wqG6^@8|Alb-WW^`C@~RqHY_sB~I%bI{~(0nvxAQ zCY0hq#b#j*tC9z~=yv*~_LwO~2-6Zfos?}x?(&)DH&&vh_fCnIteRQV4xjq#jfcUM z+3#)9B<|ieDZC`y`5?_!Ozir^>wD<;4Fw-SJnlaSOK47eu}MY*Ks zJZ9DJGEexIsd-RqeYOG0$Kz#4FP<3}$E7L5kT#$Nfucb+O+J>%0Fo>L?F6rxR7u1? z$J(j;#Ci6lpJ$3emDxG;M^wtQe=6%}Hx(fgfqqNR%*>n;SaXK%KI`ws{GF110Kgr< zMM~M3)349;T&E+rU*L3GyiwO{_{@RnuI$|a(cw8&L(uZD&+E@Rh0M`vYAG?$g zeuG>A{O(!Am|Ms%RHyk)hJ~sGe$Op4iFf0>dds-NW35EzES66Ja74=`CeNds} z4X^Sw76K~){sJN+Jvrirx&vQdL&u9>RA!40A`em%6nIGOdq8DiOmNVw9r5%pu=!tX zXZC6r4UVYrqdk9#&Zc65|H)?l|F)S~iW9m9`2!jeyg78Cf~q;xdBB)VkJEPmy5Jk8 zqC&eN8YYbSAuATd_Pl&3o5D~`1e|f6gfrWmy{X81?aEK9l3@k^OK1`O4Frch2e+gJ z+{WVXWgpW5Duf(BXgPQPr%>C~rum4e4;Uz%J-h5|a9D;f3v@1nZe+y0z)}Et62IW$C9f43+) z8af3j|C3!N0j!Myq(!XfNG)0Z_OL0c*Rkwn-IhQ06r3~`f&!cT6F-HT95$(PrrTdu zoH26T2v%F;ZebK7EdZSCJpF0$7zSXZs?)|Sb>Z|aOk-t?cAq% zDMh>|>8|e#FMIhcqTQ>ZE&0P=_#sl<+cb*S)wsR6SBmTtDz?0NM2DhplOL%VRVkj7 z2l_xM{vU#xW^Et~6%q{|22~NVTbkHLvjRbA5|Qe|)KTUQC9s#I|7YZkYX0+OmYQye zt&FcAWX0L!--h6M^dE+UUC5^;K|b(5LZgiQKLCeJf^d!^dP)y-p=wRL32zP2%6i8) zHGl%sf#9?O3yE$TdpD!+tk~&!3>EecO7qJ*&#tg0q7N~%T-kI&hZv)t;S#hzJ>ZEl zFN%V$Q!v@!gV)6$^9gkUC4RaFeTdjl9lKHYAA`rz8~+@wtMFk|GP+44Y=@YB>~>Xb zk2GnoWIPEfumNLNfWCwAoE@5WJkJrYkP)CRU?U&*A6w;l@*i_`3^~ZgOxX=mzFGk% zd`h>boj*56e+q)V>k*Is?5>=VR^=~o^CMF9-B`PWxaf?*NZvO3fHV=oNkqTsC~d~Pf3{)W_CZPs?Xa8u zq95=EXi9(+A2kLuW#p^fHGZ9&gifK9x_OfnJoZpQpSmy0@kH|@X#?umk;C|B4D?DA zi)+VLYayLqS|oo%QTvtir_6Rjj(FI+!5c?vRWKlHzH)MsQajVv-9*a+o=6>$lpR3>~AC3f@2FoyqTF8;mRMR*|HkcTt$cBdGJb9Z6unT0X@ zG%5MV?7r;Eut#!sR#zBro*X}fotQs?Y@hV*!wAJkGe1zw;wrvLRPr@ zw!^95C1HXr@9nV~_1IBd4<1YDHacmih;Z{6_cl47G8t@Pv<x4@j_l_bQ&W!H%eZdaRpe@Bg-;}Z^ z=X)jc;F}6qWX{QB521ez&j``8)4;~ZSqNYozYRa(w0+{t@FDw^G|&ai&8h0I`mLl=Ba`LUBfCr9_%U*fl=fcHu~0i^WZUa|N~3nJrr*U9Z4Q;L#trE(Pj z+dl!PB#xf;Y1=*RbCCHaY#?RKfH%n_C?C+m$#=%DLpY4amGgDW{kR|G1|Lyqh*Kte zZ$CUNl>3nT0pi*dZ@1su+@(Y5jy$Q5pz_z|fDI6v+q;1z_#cOtuSmpAas?lh0kk<3 zIwogWOXSC(PU%f5X#sAdx5q=S@-pZ(hNj;Zk9vuIT$GRY`~Z0doXbJS1R=MN4X%V- z85Oy&LB54*kDrfj@B6uieOR!5iqSKW@q=5>A-SGG40??~FCkJv<2`+Im){AIUa4=e zZUPeWzwg^r#5nfiO_2Kw8@CT9lF$7K=rB_#blqoC!cLt6C;LEe#{qPqm8`NW^>;&; z^$|KoBAP8(H05*|_)bff_>i2={4ZGVG`*Ng9(me&pm)8M^ZFS-E3%nm$6D?Z4D>2( z$*;0NN%4&`lYT_F_mB*V)jK-S6&YUWU`zI(seep~p*LAU;RJMPeq)06URV*G zkiTEF9Z=Azk98(n7Mom-5sBcH*Kj5;#q2{Bk(q|ZGI|oH`M~+T&Gil6op6KVf4afZ zW-r2sNKEkhcv+@&L6Zt!gPb1I7WF;~5s4Ul+%piqY1RpQNs(~$SR~>I-Nnaaa9z-r z_oJhSrpcE$9P?Q$|kyg@; za@UEMFZJ7(o%BNZe|o|29coYKOoduZEh?HS>W0ENon!**0DoqpK#BYaaJx(Ar%%Gy4GaIhn6rG2!*$k9!+*L~v?fep{pZjXMmpMLk zEO8>;f#6Vm6K|op%L0S<0J?MMRdC&iS|62cAE|6zt_OtgL*L_|0 z-aJSg-!dHmCRF#jx-kCuWMjm|x-#od(LMToW97f^1_}vSkQ?W}cK3gu+W7kvt7$YS zO#uIr{_-FtGju)hR~tD~AWOT|Cf4f%H~7EO-4O9FQsB<{`T+S}T`}1}PK(yaXUkB< z6}oCh1R91b>`yg%`tRdV*Vz75SzS4QS62969yqAL1?ek!apy7`#L~+t1;(?da}AFL z!AXYhLiB&TSmocx#r_bnzs^WH{M*B((0`0^Rc!VD<>B&wdl+7KMH&+SG8ZU8|MGB3 z$=|JptK)_SzZvA;93s)~e{k?+7X;~BwUgHGRJOdo9SVo^?tyI@@L(ns2^4G`dcPmm z-v297I+#Qy_`oH_^xNmp zpNs1CiX?DFHT}X@g>H&vKSO1fNawZU9U^4Yq@DU6g!04&99BqXz-M8;Uwld5)NaDy zeHi@N+h}B+MM@SIf{vkGGHH@7V+dUH$!Tg0WK2+7Qk!7u(hn z*KdEnj3jq=p93#7e*Y|SIz-IK{^8t@IQ#OaRCqoLs+DY1S9tM)xc5*kFBNvJ5EsU2WoGT4?!AlL_hvlE_pWu-W z9m}pC8wwI&;y}>V6pJEgVbK4~a`y+zW%SxGyUubCqx*F2<0xXH#hkQGzN5%KqLRK! znUn4KD(hrCTsd*WnZNo&LFt11_1mK?HyRN7Fel-OAGqng|?_669r zy1LxAo$I*tjx4?f5lK#aL+p1={ELbn%N+;rV9w)%Mo0~g%s%ZYDGRW<{0t9j?ifXSp(5RVHb{P3eN({<1WQKau&{a-FBLewXm?htgJLp zUs*z5{P<4J$(f7j#dPb5i@MCsdq?+Ft)_S=(b3(~DR^zR(92KcI$!!!d|`NUnsWOu zL-T1Zxi-j<<9)*xK~YD+#DSkrDkwd3*;x%-?xYh}g+ZJ5EjyQ8p zjuu2NrZ0~~!F?W2f%~MZQ$-Tjcv?!|F^>Z{v6P`P;j*;XCg> zdV~Yxu2k6`lQPn^0gGF1lO)k=`a!hyhYn(Ug4Go{M2@Q zt9Jjn%l`S+cej-l)+7369Gsr_Xu7BKjnXt$^RY&ywKz?#VzGDaSqcpo(AFQTmf5oV zv7-oY<=N3sRD@)DY1a`sPRR|4mzwl?L3{J+V|2!wA*P*?9V5va2x=#aLI_dBnL_^P z6ASceMb2VHMO7=k(_f(s_+fQQJ~ z4Y~94LDoyMC?LKS$(pOje+Mou=|4wJ#gQk?+A-HCt&PmW+Xq%pTK49@N-u}nGscUT z3IV60m%U$}nYc5;2iJY9ZCDmj@|<#^u=hJ0 z_tt+U)NG`PlKj&TDFNq44~c(GieCD<#Si#1!W&HMB8iErRhy!+k7bl+=~oF9P{A+u zkdkb+^E>BjbA)O()MQ7wZV#RXT2$~bxgXqpy>lwXK5X8;v-;ZX!naeih*aW}xw27}7|^O0tQn z7Kn(%$)l3fiqHBTCUxhtIWN&3t1`3q4srY^FE#jnzZD0KLpkv;^Q3>zI5e;zM&d+l zFd9ZADl2rX6N4;?ArB)G7aC}Vv14-ccZ_GQt`1&sRY#D|)wxq){s9nd6=fXJ*EL=v z@Ymm^LMCa~m5u#Fipr<7bjNsZ2 zn}psKqwBf;DoF=lMqT%#Q{PY!<2fm`cM;OygB0A(FPJZ0~@}*rk zR_#A7VY#w16`0qtk`1BPb%U967c@7A=xq^{=Ioiwqow2NA$>_Ru_W5U7`a(7h96y{Bl`M^_CNN>NoXFm@1o zAZqwDmLFWvJ84aE#cgpwR-%&@B?kpO4pT~lAB@j{k%NLoWk$QpN;0dINtVc*Pgxcz<3QZ5Ko0N}e+n{H&SF&5Jd9mb@w_Ako;D0CS#o;_NepgL>R2F( zHrfda{irH2g#{Wv6P{3Hq!NX;8mH4rlDS|8+VS9e+qCmNF|UY`y8Y*s8nDB{$(bk| zZ%5)n_g&kWQ$aon>Nn}x7IVWz$uE;)!BeT+G^jgq>>F=>Md3gv4}f9eb(+`Q^s!wW zo3a;jOkzvb71t)jK#e;nLX~dA#sGdHVd8@6XVh4!c5C7HrpV-GM(0YGQU3Rg9PW z6|=}4-1Ib9n(@`F#i3jU;SoK0U5cgBtzb8ac+RyRep`2s31@9A&Zwj;!H1&N*$ySZ z4iIfkJ3KVGVtslD1xXA)_~XE`IHhcYm_d2EWkleP-BcXKLQEL?DH*}C+MEX1p-NpH z{5%U|lDEApjno&x5C z5N)-z=*WH!j$+R|%+Y>7VOd#D11>0Ad=W5${cJrR?}#Q>QsMVn|L@ebap~BPThRtu zmDFlP=*HW^tkuBtkf>S1oGddriv48q^HQWd^OQJOtufR%8As7JY>4UYb<|F&f^^?w zzd{k8RlvTTsw+)5y~jILXgkgIN>cQNVtmWMQS-e%!?%>qdtX!qo$2%xQiHzG{EUi- zYFc>ypnKd@0cKC7EJhP|TZ0*Rj1I*!dGpPpB8GT@D?irL+i-jjm!L-RIqJ|X0z`RA zC=uP&ir}PRiDD=lFz~P&D-7R)QQD9T!?ECXiro!us!%j^Npbi_8)~usi%0}49|Q<` zpq4;01zlWQ6vwkTxqI9W?T_(&ynOg@xCwW^!t&9vuMGF)B+|u!fw##pf3*?L>RB4+ zYArEaRiBdjO7hAcW2f9A*g6|9*WP{3ZR6fAZ@Arh_u;U-NA7rK2zfP5LSXdmpS&lU zI8SQnp45|lb_`UnEQ(XF9CgDmn3MP65;=w6Zmj;+{rkmFuzkOgJ-;3Q- zR5pOyp|JIuZ+u(EH^?2LZ_K)*K@`QQ;c*~2Z==vRnc)+KEe4nq$;{){U~M?DKJa|q z(a%!-P~!a1U5p%xiS&kp*zVuf4<)K6adu)SqmSixOnOR{E<)QYZ6q2`x**vqs}Ij+QFI`6-OIC2TqWtfuUBEo7fd`b8Ll!$A`%`1`R@Puil#CjlC zVQB>7>&^N;vkjZ-NOBG*Ji(+kyTDUhw=Hd#7?pWL`W|B4JW{--W(r&-xs9ne; z_KjT3@&po0Ke3V^{N5EB{rVZ7pA@>IcLxnH=ex;0DXm4-yWj8$JHkuy$**VFR3Hs5 z->O79d9K6T|IP&O7aMi?La3-ZvvZQ7aDcwLz^!!o=kT7l_8lq3qxZozLH$YeunjX} zL7fW1_-CQvPnY`O)jz3{b}*N{uL9LQN}!rkyqU1+l+w`pd6z*aOb?(Eq-h~^F&W;| zWYfXz1tZZ{a{wWWV>L|?46FhiEAfwu4>>Th*{Hu4;6`kzLQ7M}T*Z_}bwjK(8(cLq z32n2`I6R&3-p15$Z*z3gkFX~NuH9I$;cG;jxht@=&}kEAw3WZmp^W|-1$FzUraf_r z@bI+4+@A~AGe@b|?w=Ph`0_dlS>O}(@<9WL-ct4oxh)|i1r)v|a;+b0F_Z$QV^0G>LD>XzcH&kww@79c>mHi>2*dfxJ+1iv!l6>i;q|^s3S) zQ&G)S7&*G-!xw249{n)fIGdk$`o({-!R=w=vuabDLU8#`e(RHHR~stIc--|H#8kjh z6rQR4$=xnSR_uAF1ESPobVL!I{0a?j8j?B&GvuDvmK$pmlNy#!L1>N(eitU?v@<~0 z8PljBBx)IK2o({q&RA#q!NVEGz$V3e803P#JVw>S55*r*F$t`J8#aptA z*K5^QsQSAQOQv8&Oq0N3l!AsacSNn(OHtx0AisD+b32x(`bnIE@8f^?F=s;t@BywE z#4@ujfn|8ZWVH{T93{}%=&FH;-~x0}+9_Jg#kykcuJO=e*X~mn0aX?|_IUo<>+MIa ztaaDEij{Q9wLyc@*Gt|yk<3DYuGl$DR77`$RI36`au?r(<$wTj7dGBTuzqBu&o%a} zwLq62o|#FEOJ)O}2&5@z#Gk{BPhEa~>{6W9gvfdHGD(&BP9TRv$5-19%qJ){-pZ8+ z-XOLGlr`xQ>wQjj!gMLO6nOwWDrJ__JhcMaJ#u#T78}6q3Fnp!7!+!?mkX68#Qka> zx=1tHY$H@h)*-{5fn&kn2}m2A4p#JiBr+=xwN__>+qn@Yx$&! znzeC}2(=gDdEpqo`4Q=N%Q^giXbuiP5r{I|$OmKwXcgF3#jceEjXa`K=Ac>3;--9C z_6;+E=vmz2ruJ=UhIm_7P!`6BFeCIXlCJgF<`*PKt(T!G6+EIeT#jG&CPKkOMyuJ)+_C%9w*JP?Qqz7o=fT2sI3UW}*}B*R^BfIqd<5G`^e8fliLr_UGe{}0VnUnIi^U#dEABZ}du`QZ9mH!+{Y865lVbcl-y1M5R_ zi0Pfk^mR5&GLCB`F3KyF; zp7GV(o`jT9(B4{*2UUgoW$=y__`aEOOcQ1I;)H@pIdjZTVLk?OAHAHoLV9#PQ)ItgXG}R;U!?lcF>%xGlb%AZU9}q6D-}3pWl# z*xsMxmtRdLwZSovZ@h0C##&D7eGz+~4)q9CA^@vhSi6bD^M=U{q$3-&Tv`0wi86YD z^>VPxE0$@vPj8u5gqSPk@e^dTO>a7dk?B;eoFNwMiQ z^7Iuolqt~Ff+%F!B@nWl7GD~|X?q)-I6jeUt$ss8H|JdkZKK1MJfkY}*pS`L?@3Qfb>p2fRoZMtla z5wF}ZeAHYm($^c$7~1D;$3?=QrhAN1FH4wFc_mynGTNkMd9@Yn%F#Ol!6TgQ z%4C!5<$A>>jVJ_kkO}C0ZM=DR+Ek&4B2qxJLb|7WJ9uo~_1s1FIN9qe@rvY$Ls~)y zQ=ju+4-?;Z47%KB*bs7y&5kr~(<;`N(#FT=r=x(NepTvP=>eDW7)mjNZHVwAQNZ61 zU||)Fr(HY7_7oN)zY1Hj2mPPYJa3!}Pm^}?5%3~q13D1wbw4f6WE9j1P3~=(2YW?r zZK&rRSqd2C^fatGRQunMG>KmBiHgK^GE)17@jvO@PK?*+5<&k~v?vtuB#mx!4efI1 zp^7;zVMyfv00I-RetbHJJ#QegW7Q8}iUGtu-)!PW^&n?b@cM1$PRgdr|?55kbn(tbC7^XZL)-$NET&X%k!iu`SrD1DXOyj zpmt>v$&lG*Vob}r62dWe!ZUSee%^xolHzQhQ=a1ZMFV&6$X^izC6e*JRBv@b>#B9j zC%G*3pJFsYg(S(*!fiLcF5SnrD3()G_mAb6LZQ@@o;ngB>Qx*V(rJ>TE`ljL56{iF zdDH22#4YzkmUWcml~awRg=tVcl*|Q*;JenW4DGIPWKzo<`(g3j$l~;kD(95)6yHcv zsu!+WYY!szNnAp+7s{(fn|L#P=%=MmE=gm$j4a|$An}Y{O9&of0}MX}0!->8j9;r+ zN5b?^*rKh+8eL;E0CkbWtT7qY>9OGk%w;Q505C^Y>nk0LZ~z?E;frfg9kaf0VNoKl zSV<^;?+hUk4U*~CF3yRw-T7R+3MdtfbX4*tra@8TZ)COMeyOGAPeIiCipkhvALgyisHju(_Xmuya#jKGh^%`gyF5&=EcJ1x{IB`4$ayWie0 zHBcJTfMPnKhJN8G+9^)kxr8vQ;&Qr9Ud6UEe6KD0*4Y=Y8CYt0Nbry&G1%U|_I%j-^ zQ?3|Rt?b1gBTf+_5eGV@3YHKCf*(nB{2TRo)4`I2=|7onSu6Gue{t2IY?a9q6tl4y zZ)u1v|IBIH$@?JAR6RC2I`C!VsRcoAk(;P6BPm-Dk}k<1>C&b=vJ-(X{vP4Df1?69 zsekk$QjBS>OCGm3WLJ>*B6I{tehr&;n(i3Jqaegf;gu{~*1j69shr)W5)rABga23%q*`Mb{6O02v z#pYW}9$|eO=(U^0E}c8_OOD&1$hc~7QO5JT8dwT`?{EYlTapRng=Me!HpVrk5XB2R z&l~X>b}kTcO}hBa+I%NHl(2Zsr-re2&%OwJ+3_RAwZHhGi4_lD?%?MFB_G??0?EKP z1wh5GVpmpDYE#J^Zyv2BD`RNmPcao*!bOkY0ZueTim#*Yt&M@Zk@JBPxz{TZTagoA z5JJv$g~+w;9q<+bMoBwazc@{>W@-njfU}|;cxe25_rc)fIK?`BKYWOFveJE~pO0sb zNxMF_f3-Ef&2SQ(=SYY#z1XLJE4_mrtD-WvSh{bV%J3!TJ!@AXG?ilzv7*3v zBHv;LRJ(b~Y?ivsJ$R8~tpJHa9Uze6IncX>0d-zh?wWtO+eUJqv$~h)33`P}CLE01B>yUm(LEY$!P1%cqLR=GB*- z0R(sMm$pijDu)Oc=$NZ`)5MrK6P zD++`E=s&h+_`TKV7lBoZnAJ#tvp*bsoMyyWx^!Nvto&m~^Tv-J|Ajn|53z)7;G6Uori5Y|&pdKr-tzHEu67-iEGVnq9E%1S(Wi&^`G!b0`B8ClJ2HG_D{K(!;dut3;Epeo%U7L`FHRVH5^0~ zScf-KNyiR$4R5h*4Nk&4Ff_L9&icd|vSAu+UCu8OD)dTILZhse_s-D8OPP>yLshBw zQ>2RJJs*KWCx5=FSU9_G4AOA1MfX0Jzxydmxc*c)Iayann?zUa%{Jtvw6?;?yXh-! zZK`4_r%chgV;554aqk+uE0D@NSEx@s%m7A$ZZ%U0{(HY%6&h}BM-A42OnHECv4&3# zHRiH!K~aZN^t8jQVD-qC?LjOrA-3=Z9sW^Urs!MY?pCzUNb;voZI)? z7d$+d8;^-2!II{{j7paORC&wed_Q4S<_xX>cMrgWKEt4Umk5m_N|MI!ZDxgA0M6Q1 z*as9k3?9-(VPk#GDGt0K74|5sMJ9_Rj$0wMjA~hBBNJ@)IPOSyzC9 zu;y!Zf^0dk#p0{zBBAJ77gBumzp9)W`4a#z77NaB$4ny8bP=U24X4ZkO*=ggg%=$4 zdTmgoiRdopSiswF2`D{(WBFVg6$GO$1Q02Uhem{hll?v(UJWnPks>uJ5>v7Ijww1r zcI^6xrM271k&%(CPzp$U)jOB!GkU#v-59TcXZga^oSh^`zjs;oDbM z+vK&Fy`gSPs?M&XZ9U^}5;51Ol1d-$+<8}968`#5E*oocf#YJxWAKLwOL9mgA2!rz z5&F3%$i|X?boS3&&J75?n59%redur#1aH*umP2QG?{HyzIt6H4*Q|Z5E)FB_IM zizn+0`476ERJr%=o6NnXmXO1w3Xep{(tCS&T{TGshE3^_P2TJ)eM_v^h4Hm|f8(k@ zO5I!7Sq56_FdcR%TL2T3O*`UlK2g){w(=A=Jg=EaG_$J@b%Bo4@5VTl>-xUdlB2W! zUxf(CIOxba!dNhEE%ZEnX&Jxf`UfG~Kx^+WwYc!C{xT`;gy)GiB8WI0osIL={7<1? znM)jiX}kHsJGZQ#Ll{}`(b>S1PwL(*UO=eZ3)_D&pDe_8f@y0o4IXv`MrEsDFWhnU zh>TsF%HzQ3?rjJ7bft^=YPctsBwXZdBV&Osw8d%hq65K-kfrJ+ST5^W10@&KOy>zu z@IdXWCeugh4MlXr8Xt7OhXm~2yQjrxC}UEST&|UUlf*81{@>Qj%%#qyie;K5_1+c8g^T+%kDS{H(O~+f*786^wtQWf1h&nY2fLIRLp0OOoAr zA;{iAz(Pl44mOnuWl=_}oB9JKLKY9(vA^#n5%Y|7n9@6oEb1l5Ibfupwr8u8vT1Wc z*K2SiI*sJ>wb3CcLfd!*#*k1+#;yf)R4m@HV3i0obP6e~H_Ed6A>2=4NC`P?O-2;) zGE_bviwVUZK$yh?Nczvb?^4oZ_mU{yiO)I6_FGp=p>;p$>u1FUf<0+p%#Hw5;X-|S zk=CYfmOtGo1sD{nZn^HCQZ}Y<3>Z~7ig~O(Tz89&`MsGa<5P7Cv91SQj&dZM(i=3_ zIi<)G!~*TUNSDh;`yrcxcy*A~@L)g<2d4KjI70 zC5hrk``>?BLOfEWo_RL*hF=FDSC1B;5xot#DP86|FAz+cLlL2z6ntnO)1Kuo2M+IQ z$YJK*cb4oR|3UjC``In9{naT*eUkSI+*$w&wAD*79s8WTWQ`Shz~qWi|JKyV&A>d0 zQs%lzR7;W?*FiDb_ad07170XuEcc%%n(xT7$!nbpu=X;v)3*)^PiQ-gFWoB;bN=TJ zE&}UG=gXA+D9|6kE!MvqaISl`eMT1W$d*?=azz6m`-5naj5#K-pEiLeClGaiL#JJU2D3MR7jN{v!Vc=cR)3ilMj0?vum9>rV-0yPAsJiLUkrM@ z%jLw&-Q5v$k8>B-SnUOPCi;3NZ9*c}dAK<{`*Xv@Kr})=9fc(Bz2hyQCc80^d!r~E zsD6P&_C?tEd_hzYOd7>5D>P29L5h-!A}xz8G!}x1kR^yjBZOM<2Z2p82#OjCV;(xq zW;>b&6P98S7Sd?;SBo4*4j~(wRgW-`TX~cwu3BA!<3jSN)(5@Cmd$ ztx!prI>eCMeeDLA?-yCPqE(AF!xYY3i&#l&0&yUg&ydu9u?)?2m*kofZ0w*T-`|G1 zm1MM^S|~NSNzPMo6KW5bKW>SxF$X{9HCkPT8%^$WH6Z1J>$V)lWFrJ(qL;!Rem z&JAQ!FMX>^DE3=~lZ=A> zXjE-1_=}A{f?X+7TWwQT7=j@rpn}}(hG+7{2Bv2f5(NsVswurBF#Sjqr_3vWXqB|! z2!9m;6z3`3Ux2_C&Z#0~S;7Plr-=zv$zi_JWEc>jM(_>v5;izzQF zoWY5Mk*0f<86_sp@gE7_GqLi!d#vqXy-u-2b|Riwl`4}@Ml)-okS{+68l1#vw6$dn zL%zXOB{P#KQ%v{AQ*45X#CT0mW7yR1>#)Ab_-8kwo8PVjwg(#H7kMulgKB;lIW3iy ztSQK63IIc#Mdj1z=yQ)E(9ot5AtX=BTaZ)5^10en-w-Rz4_C{&>S+AgFDF7GFWdM^ zesrKqWd3q&I1SeW@pFw-0t+fs-eWQa;et}bJbp}!3T9^Lbt8YhaXGSHuk&knj)L)$ z^VGT57W@KwZGJj!(+<8dV@c9=-#zUlyyF&|f!|B`NxP-d&U<+D4u|74dkqrIOb$mX z8ppktFDszv|I4;}=AY}#=uR99rh*dpHh9VF@q|hu(KN}02?*;?ri~1j8p3~fE*#8F zdu$|%U6#cQko=v_8XRA+L#B=PHv^6kordx)=o>TNggXo0m!{OE2C1nmKBSqEHm79u zO4RN9EPPv=d}KB}IO${C^3;;klj)1OId#V>*8@j!`{XJ`YL2SCHKSII;o^b0qveo) z=;r_I;a6WjBz2HfJCMd1M!b+)4NO;PQiX?wqN|pZmj8AGka=5l69_QkP8` zveUX;Lk8|E)pyJA!1eDPgm9o!hVwp_Yhx9jseQRrCMgb>oh)$2w6d*W=L zif;}?HSN3g{=H$~78^y|i$EH-b5XkzEzWXo(ktnQ$32tBOLV7uVk{<}#ZQ%td{0L| zJ{;N4A8-~`q2yWG)f_+?D3$yz4W0N!*pH#5bz;$}B)dPlpJ1@Ru=&eAP9CEV>hY>s z)$eAItdt%&zlh2k7$4{L;_2JVM~I)lTHD@EsK0fPnuc#RYQ>-T!lm`kHtggR43a~U z#|3ssNMblaHKbF_PqEONQ&Liq#_MjsbKPyWvO!IDe}!Bh^{^;|a5d{b600K=!9B@FpTqQU?b?f1lkm^&lsUNk3R3zcyM+8JoolHraWBS-{b_tM z?_V{;gs$3w6Q*Ly-K|gb6y=0DogPRHwU~?SuL`pFC-i36$5b8coow+#Tb)YYEkDrJ zt-1|bZ_P!xfJlW1R6CeoKC1G)_w8Oo4%M}5sEnXnP>en~gP^D6^gnCU8q1H7q12ZFS*fYzQ|2{~ZU{~wyKbO=1Ns*lY2f?yN-Bvkr*?j}>vSwX<&{?5 zQp=-Z6o-dDjxR5`8Kh3dL5Qb3_>d;e5Fn+z@^pyj>lW)x+$Z@3Kg2dIv?r~`-;^d+ zHSMgFRW%uX@S4t^8PeV3)rh;D%<*R-Tz?hz>M#`V_6>oRU z!tR1BAsZQC`TKwc2p-(a>Le$f*2~L##1|o7-Vvi;w#p1ZElfsP$XH*1)bV;>kR z#ou4HKd`7=enfIhWJ-M&ePLKCQ;hTedqiuW2-}_Adh?rLtB<97ams?BWh$jD^?^I~iN~mO0*| zPX>L2DHpApH)oPjRxS_O7tX(NT9G8by#k<-)UquVWD~nuiM!e*15pN5Uh0?;e-(uz)YRs>E!~lb<4cXY__Na-M>`~+F&8#6H_ zgG1!lhhS_lF_>a=)nk3#+0=?&8%YmBh4&#m6PW{-gHpd-s1-@bHG@%v z0~+Jw>@W_5-)hIrvg`h;1@6cGeMZ+kt=MEO9lt*3dH#ZvFl8^;FZ{g-*@*Td&Lk&n zyA1Dpyy`05T^mjEWw<$)fmHhG?(A)G$z^3S zFrCJ7nH6sH%`T0=j){p|a9eptgy)NqYRFL^Rqp4CL_2(IP!Lj)O(j zlQo{?8ot->GEY+Z8%4@lzQEB*fE$>L)a@OtSg?gv#@qg9yjhQ+=Ck3HjU#X>ZzKnQ z5cUcgIV_k`hbu(Hq}NiISLN33du{L}wCeTt#5|buymd({NqSCne9+qNcR1G+10vHN zjl9`0BHY$cgy&NE$}iTsd{45$6k##Vl*4-9|J0$S)4;b;n+6PoQPFUhLlL|2eOr1# z)M&GMh0bL11FnQ{#ct5$9CDIm1XGm#Q0{Hd!w&)kIdi#oFEGCpo0^9UkMQuS1VbQ) znI)V>G)aabaF->r*n3r$RohAYYE4f%SlYiQUt{Rv;g;+JcJ$dWB{Nx)TXP)C84_Oi zA7oOLN;jFUIj7|pzRNDxz2frul)aXPBsok_pkFkAcBMOlJCaSdA2=@vD?K?;7(tNs zRKP58#EC7N2n0dh&%v7o@G-|A6wa=uy5P9``;n^$r!lWEw31RoE82^kI6{J5Y3kgR zol*(!x!O%)e1JLB%LcN-N=mk1rHJz(;)|&5ZJhp&&1WlFH!vRUeY&PdmS^)ZyIvNZ zQ+`^i>{;fK#n_z_m`A<1XL`i&FUs1EkioT_3sGbGpM>{Brv-{6`%FR1?5gfc_+^d? zY3iW`$>OM+0>i5T!)u2`HGN0N>sW?m)h-Qy_z27(e=V*#PM#hKaw5@8!*|}?qU!C@ zH%lyLVQ^VjaTz~g@RtACo>UY5LS57De|?*2ZhmG{w8e0(h%%+D#c9p)dzh&mL>HN( z$fU#sh+z~UE7va8Us7={kRwIOm(pSQ+#yrG43Rm;M?GTNnfQaLu12MY z`t1-CE*7*shWA3BmR3YJFOI<$aUVqN4 zMy{)D{PQ-;7aE!lq~sb$J6kZ5Zvf4=d7)-=mP{89fq$aj`Xr-6Bnp5>R%SzU2cuxeLOf3(5q`sM>${%HZdxPe+2R z$LLu6HeuM0U?=p^ak(DcQpY<`ECWzwETaa(F`M5PGVAcqKF&|ESwGFA{he>tNmAdA z8ek24n;+jqoYMH6TLMr8dB}qM=oRm?pJ%O#ce7N=d_R73gS%SR9(Sm%m0OLr19V2_ zq`;pcn_eP^bQiU|N`B>9vRW)8So8=^Lk7N%nlJ=BkB_7L6si6`@Y%bXRpYZHHtD5+ z!pe+(+B7D#E*+@e30y{}IVX(iDUeV^3oe(+^M?#KhoqeE}gs+5@}83=hSW$a(O0 z?!P?traWAjftO_|Pk|DgDkmovcluE%Q)|{0>z<(|L=)z7XHx9A}KNps6wY*MF`;sgna8zi##hP9vGqRm=msWOF&p=`eQeYMw z3)tJQf+rSA<^yU7qk+M+&C{Rbtj(=$xDeNx(Vccgf;by zHIRce%D@ct4FUo)ARP(1^uwF~B}X?n^_DoRE1i=5fEe%VzodbCB`?qq|j}s$NSVJR%GE zc|d0VxexkbUZPo5zd%Eroa#w=L?}a{4Yuy6w7=n3Ua9?p68zYP)<&-yb7R# z7nFBi_&krF`*0kkB&#ZLcm2D4`2qGhmd6V5NnGK#$~%cCkt_h-k>OLb=i!|B>Ynvn z6PaMpfkjlm7J0y#C23geFFtjphu_!O_^I9CS#kEZ3Qzmv6;-bd_rYvCjl}A>670vJ z1*q7@k9SW-R zgr`OXPDinkT<77RZ5V)Ca`)Pd_ZjF8l_ZrT;LLY<&_ID?64n5-c5A}olJ3=z_h^#3 zPCBzMbAtKi%j4oS{d^>Tha+qMo2{C59+2ptzPZ)l6ji5L*E)=Ee0<1oS3hQDn3h z)(7>|9;0IYC#tR4m?K%)Xdg;28)!UBg6nF2=o7Ys$lLOROd6|qA&#-Fw&J$ao%yQj z8W*r2x4iJsRnLA!{G;eadP(kOW-7EOy#F(PBTu>tb{(>!^;$u6ySp}@!6wPC-L=MI z)=y3=%6OEhE5dN!W&TI`kvXOb^dfL!_syHn5na9KLe^3JJ$JPL9<-l`yP&@1Uo-jUSg2|%WJka3-54Q$6oP|IrlP7ByQ6p z-nlVa@JT3Wd=`rZwxGC{61?lBtJ!|yWu@JC7YZ`%^VbKllq+?{SHwm=LoU)cx$TL$ z;GK(=mwbRXu13D1(U|j}B@Z1p<{6HRtIgLyDu++ct#q|rv-S1B7b^W^ef2z6o6gtR ze31%jvs5|nUa#6e{sd3YkXaN3;C;-zN0QsV5~mi><^obPyt`KR?T$`yA_FpBYi44l zCI?|cfQ67g`|vOWNDc7tD z7ST6TgMA9}-xmLXEcT#ye`jwJ1j^ zZRe=1sN2{_))|zv6a(_OfRq9bn;u>BoJNq-$;)_$fcYywkSKO9e0<%JQ4`T^1&539 zV6mZR5a|xdriV}wP^iBAVGm*exq5xymI~|NEY~wXS*mf=n1wRsk|`{?qJWn z79M&E{%~4RrcP5fb&-%U3KCPA5eIKu+jO@8L7)zu06epr2mkkV{X^Tji6gT<+uszD zLLT|?yWDW$!a{Gm#IZIjxP{1$w}^wqSaynf+07<#M!_JQTF5`h+lx5z2e9OCKn%08 zNWH-t_<^L000ov?QipUu3DpK)31#GK;bGNq^pqX^#-hx+dq4QeBAF=E(dx(mvfFW< zd?FS!fBRT;Ku+xu4aSGJ9!ANI*H5ncQIC?rsZ_aFJ3GJ>_>_iLY)NuF=@@p) z&QH@R+Exb3{Cc*%b-PQYvg^u!@R23;j}MNIJ13|IlKQ_Luuv!el`AP@D|In-1 z$Cj)E#ZF=&8KEUc-$oHHU%f(MyQj4-DB{R&5F20Oaiqau2Nifk6T=z=;QjO$FP4SH zkF|SK$y}dr>!}iigFHe!cd+4Q1A`;8)$|XXW+-m=)E1Q_)gw{~ZM7j<){Q`KfHp%A zc)>2`{DK0VkMGg`P<>JKo6kHjtWE&oNMG-`xLo5wMRF@uke{O7Ukl2Iw-RSEl_Bi-)~3gi2)g6k*b%<$x<|(OtjU4;X!T{uWQSi|+Edq{JZA|)%5a0cyH&qHCZ`5_4 z;NIvaM8j3@J2hkl_lvHCtzw3!I92J)d-tu%&&se*0PNJ1eVqx@S@VCt3?!Al--<k4nWK?@iK z->r-I^uRy}TLjSq=q$ZoeJE9I;kO6uHOM6mv?eDjYY@5cSPeR}n-JRE+%SHVLtV1R ze+$5zoFh_?FKbbkp3n*64gtPh&BOJ(S_9)X>M_s`TCwFf&NEQ%!&u`Gbkh1=Go{%! z!lU2w3jL)7HI_TA;AlYBaS2-8Cxt-YgSZP(%7PnWi>6tyF?UVGr3_9ZTO9A0a`S74 zK#N0kVKry@vQ3^4C|3Q~)W|X#XX~cf@2i2=^9_VYwYH1D-LoSvYaabsS5Q}|5yky| z&TE{1#^10P$2OnWs1-kP#0AixF)tR?os6+dTLlk!>oe=?Yms+k5J%X?K}32o5AR?9E3AbVbh4pP-w zah%Eg=zG)JE7f}$bo%wQR_iJtuR0aA967%35!iqp10(Kx*%=^Y9#`aoDbG!`?1)JK-dzR zuH`eHi!%KD#F#R9N#Y^A>FHW&k1hy0C$?^X*KtHS|C!LsR03cEM*hT`VY9Mpkm6j^gT+&uOwKwJ8YIeO6tbFy`DfNKZxvxAU_U>tH(dgJXqpC z?`7ualPFluhA3~QbO-%L&W@i2VWM;k5e{?E-FIP(>1#+P6FnAQDRu5 zW~v8;Zq}HCaF`Z(P+~prOKNcT_VC^77Z`%5%z#|{RicnGQsn5vR_etDQ-a^wV;e$K zyQ*5O>-&B90Yht-zL2vGFFV2CL;~5j7}zGzFlF6>3xECSXT^sY`nwruCuoU3 z=6Aw^CGZ?k9yG{_oV$@)ICY)69bmn1Z$%3v)2M}{key+M@;&-CIpj%aeyhMyrX^>Z zDBXgMsS6M&o^+UXr$7iO2Z^;oR8LOYD8#2K*+0B`d1pkO*oisap~N4Vgv_C(y+v<) zY3oe@+z!-PHO|7h^*#LFV|bVeZXdCnWP?ax$}{>{9%6TfXeYtce_foE;13 zL>Tzb4z3NB@dX?i%ka`FN2$L@>9hM{Kg;(%SIRpIY4f<}?0^vr4WONXG~=X=T#AsH zk?-9*gk>HrZ#~+?z7uJi>5vO%T5X&hOQ^1)BJq(XEHSQYw-fudYxTwx((d*GQZru* zeExoig_<6GF3j;8%T7YMwO3N=PU~#gTz(kw3!wVk_H(gvljik;IQ*|W@ zyJo1Eo!pN$m+GoK@H1h*>UFr?XXoGBsgUh=OH_Lmp&rTH#=CLVX#~HGkmb{}J^oHt zU@(R_pbNx&4Gs>xWb2&%LE6R9>t7oEzXIh5&@=Sjo$NAU$5gp-0|pi;H;HU@v>}6v z*@lJxd>8u;NQD2>*>^@Y*)44+As}FY(5rM15b08sUZi)FsDKbqK@lk;RR~pj??n)) zqEwaMLvI4o1nC{6BPa;p4nEIw&ROqS>wVY9@`t&Td+*t^ueoOS%;e5*&JaJjOS3sF zwrt!|->;2$WdrLa8ZW^*@3~IwcC6xIx4z`|)*9@vT0Xnx(v>8WZmhw)@Ijjk%boiB zf+_=w2c$FT`2_C)(nj6P@QQ5DI1*sI6G5362L&hdZk#$in@_Lb5sj7LQ-BA(J{(rE zoj%Ym`z6PofJ@((_4cq1KCJve!>UZh)voYeR5ymtvwuSoq-zi_s;JMBC0&`UY1jE5 z+zj|x-u}yGTu1`|U|}Kra{HG^v2CJL#>c%{Q~7Xm)`(GY)7F}Ikv?w;OC>qPy8=a% z6tag)wbW;stnt%54kO>lI?tHqCm&?o3hxEAaZ#=i#qzGv%op4SfEtR2^7O5X`T=n)kHLucayn{J3Frs+y&)H~Iv16kWg>>TPPJdon_AM)t*()lbvgkI~z5Rf>ac@P#zP8K&?F>ldd{(r-C() z4A~-|i?>Pp#&y-_GQvs<_0aOiQ!`$-C|Z^xbJigR+p?c1k98WmcECBE;1Ga2SSCyi zE44aJ=YWvcL7hG-R^lVmBe_8=f5fx*SGqbG@4(@~|BkCKY6I8V$4UQ+s472jYsE30 zyXbWcTl*p%6JITmK`H0uBgs%1k1K_Mr#)LzLAAs}FuU1`|3_Q!>44n(IFmLoZD7;a- zS8<1K#iiu)-xvc=51<2Qo>W`ek*R9@P_E9LQst0P4NuRk!Xx^n!paqAyS23q+ZodJ zHQ8x{+5$M7LHOzN+w6NS+yv!JwhVQFAe)b70M34T^N4?1aH4Dc#!oCqj;-{_zz?R1 zg3A28d-7aeGxK-oL42#dCKy?o^C~!Ow(u;qda?_WdoR~Tsug?m69=flOrANehD3y7 zXf>9a2=^697Dhh7Ma!W}gQZ_9n?Q67P7ldokI9g#N=ix{%e%adua)&3nOwzaU*IVy zzMki#bT*a!OQUFOD#c^pJ3In>&*}Ao4Yu`ZBA>^#YQGQ<+cGY?gm|EJMtQ&bBb}Mt zin>>bg;fFS^9yTs{0nPM?Kic~+l_HPFxEwCvx?SK_p{81KXuM{!aHRI zgN4&o*BB2vT2uP{CKabPZCOpT5)Kc~-JQOB%0GR&{w_@>Rae@etIhJl<9>_MY{<0) zDUebY2lc*PP*&5_3wrhZtNWMHcgwG4yFrpW8(os|t%LKt@O|Co-YWs`izgb#Z@5i{ z{F4ktQGpuZqiJT@1Q3Cc{hnzk1*MX?Xr$Fn+e=GmLlf*L$VxobmXrS#LW$8pv=%eZ z;iA>klZgiN+AUE~W@&Ds$x`B^(+i&e_Qn&OY?gD* z%>d0&nbuq%-?~@E5la;oX^5=XdGDij&T@6tq@y!uqAKQm)g`GKzDTKP5mt`aqezeq z)Ku5_e3uz#pJVMsl!<9SF04xqHnMMlM4Www*@r@ApGZ337|VYbPG+={2(=jPqjFiaVNpYCv_~FeZ;`P9q8n9 zknC7R!p>JD9JM!}#tYYQ3gBFtL$;5~42U>qWa}Op%fMKK5mq|0zni&!JS)b2UB*qu zF7;(#B>$27`Ll$jLz+x_|M<|)TDY{4S8|s2D9@z^t&dJIzP=8iP)GULys-)Bk5*t| z@VNySt-#xbZ^_b2%3YW+tqnOE+^LjTxkUNtfk5ZQp-$LJBJOInREmwf#6EL#Vw&MnL?mW1Z_`1#M2{usH;FY-G$-E2@< zCe!iUU)y`;+VTH8@vuUj>%3)AwX^jt&2~zx;&{pYcu=;5y@QtM=m%cE+qPr*eSo(A}?OY0^b7C#q`PY`JqrY-aN*Z=z(0^@tw#`ERsSeLl!@OGKDQ_3U|=Gb^UK;O{V;n z$`c|p(7?|>x29$nF7F3GB<=ctxvRt<>{MyaqwHXJ`Flhl1e5wo7ZE0o4{{1Lnjw_@ z?YKObFVT;=09o^5dpL%-|K%5934KdE^2<_H5aF3Q!~2 zUXYX|woI{68dLs6Q+m#8zfI7i(hmns-C|n8M0g@5Do%t4UXRnLIs~WDywUUis=hF~ zj@2c5tM|O1I)s7)wQfNsptPAV;$Sv7ojj5d@*)7qM&koEY;|=XHXAboexTBTAfVCZ zecg9XBKgs$@q2sjK3i&f5Im``On<4HOz|MP4&h=?W0wQx}!YSy2%*Z9~Bkfmx0WGy@^5YzJ|zVCM=8)ib2>C zqW=a+)6TzrBq5t4NCDsxIHAwxka!@vRFuJ+Mk0BxGfQutA$0>)R&CMeAyrXB@gS^* zZZJ^;X38eO%ZDSDuH%E6P(c%f59)_&*ie_9m7D7FTpg~d?3|wBLz(db%2y{L&?BNl z#e|Sh;+PNIOG+)tmh)8j{C~W3c%jAdD48R8tT%lgh8tB0j4g0~`CtF%FL!|Ag|FDTGjHu=xv=0H{5QW_6)w z{$&xj$ap&22(hwL*2tbCC$$EN^Bz;g6bcJnB<#j^LO*^`b9+fBf>&oVG{#U39{K}Q znSvQkUT#i)os9B=&_U)cPjwj}+X$#!YWE&g$-?Y`&PLmg3 zL!LnSxJe!JmkK?@8=7065$iidDP`G5DKS6deQ-^8t6goz<(LJn2O+bE5boL#Z_#9; z=in#s!~RBE3<)L{I}0cF5rlYmY~ly216F{t_E7K%@NI7g7d;0LQQI!$ngoZh@y0*@8T+!rm(D1YS<|2ddd5bvOyIPRc!n1wL@~Z zw_Jf&$NX*+El;#CF_E08t{^Im7r4mjgJ~#vP zqVO=fs^BHv$mg$-K#tBXAjK8u1CFx6pjR|N6m?$e#?a1&Lje(>uWvx0J~2|HpRq;( zFoVX>;MrYraYT&im{8@|m>R;2H>cTv^3VC9hv3pjG_H*%Cl6w#RgcYxX}=v~3e>b9 zhxDV>gWzwW=kSTuy#g9pC}L^#N_a4|vGI3rhvJ0j145*AUBLp{=O^kVa228#=EkAS z$l+r_Mz9{75`T=uRS0N7hJ++LWGa^%po^QhB$eymGQq==OZzNKz#CUioW2p^UmqsF7`?IbE}&Chk#zqT*lc78_~lp^TB77(zl-MT#?{F6U} zBVMv&R{te80m)cIaOmeb_*3*?iETUQe7RIMMJfl$@@qG2rUjU$F+lynu4;Blee7sZ z6Fz9_d1A*sY$D?pLubNI4k`}+wZqaaOfdT4#-lthT*v0wS)*?U?l2SfMpQigTgoGJ{3i*uSyfnK8-Bav_agY{l*TQ6hl3NLipQhWirH`URUzDey^MP=kw`V9Z~$W#Ei+xSEhe_M z*qASlqK^4DuP~cd#GjKjRNM$*ax|9g?CqGfq*WDgaLA6FHrrVEUhg7x;sps^w0xEz zACc0u{QRIS3D{5(yg0UlO54)%xlBkdd8Da6m?rs+#+Xpj`I;aM5HWLBGF|cOKiaq_98O1RLS%L^nm47b?Uy_7&CF-x zh}?)Tu@Is?Tfrn1Q2@{jiejQpYW?u`xahHdrw&*|(DGE;hso6P1l7^Ui*gCSiD*@S zx&FLsHtYS2xyjL`+_LKNGnH8%r5Ac);W>JHJKa?7b(5c`C$*MOesgAnToQZ$sCD(- zRGSGXSW$F7GiRyk(}u-`?M*Ud5@{-yULq!Ay6T^0!yk~9csKXc`eH5!DXt!Dw#Oua z>0M8D`*%LPcxl15(R-_%EW_IT`G!pGv0$-zmB)C=WP;X>d+P;;JSlVi!rXRgOG>6 zK_dKZs}-n3<0?1nw+9IR=_1A2u{N46?X0eIriAbBTfO1y)cTLsH~xV6&2z3bo2EFh zOhl(fx70~Js*-dh>i*i^M^Q|6c+IV`p2 z+OH8t*@%;Y=~y6X`_$U=7ZpcSi>GE%{U3tK!HylyJ!kMnmBrqvl6Y_dfZd|%XzUg& z(a(~pRhBr-UYmW}>(DSzpRurxE z$!$g?7^qxdEFATBIMC#|_FyI? zu<#cV2s^| zC-Do|VR^!(e;8R&X0*3v%AeTg;?-k2wc(L?=Vya)pJmmx@yZr}8l!$b9B?=W7QRnu zO9%F=0%x3x>*@tfQb2-Q6N}O*C z(1)bEPT8z*4J>#_W1aRF)MayjdA^;jzo0TyX(L8wB}SJGLOKvAiR4qk)uR9?5%){uf>;o||AnbVz zP^QO?9v#U$1L_$0b;e_^ZC!)c^cgyRKZRxSyS7q0dD*JaKO z#$&w7Pop-24IH>$_AN!KiJdVt7DUS-W?uAp-L1AbL=y#opsGXrcW*CX0n3{^Lm2?X zjzfzHG=M!Xl1qcW{>Zp|T!(TQ3UngrAFr`}vmC8bKl7Kz7gS-K1r(bPfWHjNEC0zs z5q{=oN&&C{54Wv43a0|L0tyrm7k4xSVGNijDgJmb56ACMt8xPRejk-`MxLVT6Tvb> zXn|We1jGRFN8A0ix9`IHD((zd;LCpLL_}EwTXv<=ZYkpFxiQc!_=mC7Z-eeM&H*5q zFo;aixV8`w7WJlX?(iyp#)HOuUP|$t1A*PjH7Ug`ut{_JVk9+LLdGhB4O%=%b1^zB z+O6>5LPP`0jQ2~qWk4C07?Lv+sC1s?70(^53B*Skwl=TVc(kYuj3(p_{PaD|hPX@>opLq&{3yMWZ9Pdp z?rzb0e(bL$x^gqEy+)LKZ1URFGG$DzkP-?p@_p`^;lA^v+DdiNBT2nvGcE9s`$^!r z4i#o?4$8>fQdBA_Gj_3hBeWhZo@iun(PiGz)VT42!LXhpx8e1aP#JZ{Xw{+0TQ)7` zY$`qwX6=^f`wyJ?xivNECJb7?i{CWVc6VmGDXTl+#gzZ%mA_VQm>8``%mRC4u0#1? zV3T493@V)x*!{un`*Y8{wbbLiN90}yU*|n*cJxhLB*?ilI~Ej=+Cg7sRmW=^eyhx!05T5p!9X8fjfd4W+v>p=B6Ibr2+gtRN)spX z!|ub?QTF3|+wP?GKVd~Ru`jNfd+fTGxm^+oGUUqApOUl3Nb%;ZcpN)`yF0OW%yh(G zU$~GRhwh7?GTV4R!@+i8HwB9>v7^;oYJ8gt6WyfW0Znqb#Zg5jRag!Pkd-gQSAVkX8-NQkuJJRg&eVx+L{=h7cpKH|` z&k|%B2~O**2KO2d+@5b;o~m>u82#GbBC`9CxoZzCLLU|$Yh<|a=DkH!IC-eW74pbf zpr(bNMdkFa39==KDzid&^Lq#p}F(>58gMQ(R&XC{oh;v*2hcPZBI@LLB zBc9>Z^mEj^Yw5#5bf?dE-7T^U)9ua&yynTBpAxq;1(Www1f#nRG)hr6Evy-EKQ^NK z95j9&%=ZiSHw%{unm;?6j@m=$e^Gd?a>drKa5>)6;HA0rn6A>~89@wfaP1GKaa%JF zmZBO%Xtym;zli!9-e08QQDDgEaMhub9cza1Y!W=xUK> z8PiD2KqgX0V{vV{F4q1g2?imy0C4fDLmk{;mJKt!PPQ`MAHT+D8fecH_{P@c#a;K# z>ajHs`~fL@oC_6bscr`3A%pabvuIb!{Ktlhq#Wf zP`f&Bz@^h~{1a_`WsglHWaAffUvD~mJv53z7iaW7+I&5>{(!BR>}8X)%T9^b$8UmM zsQ@);Xm(~Cu)#iQc^b^c#snbVzn|f0{w(}6tVxEfd{Wlkp7BxN%Xv|M>(95D1Cj87CW35Jv~=Y5;9V`6SS6WcL+W`f?#B%SRW) zSHE55MqTCZ&IE!0o!O~$-w~XtzD8YwI3CozH-8leP=Ozu4lxI0OsqLn8LAq*fn*n& zd3`5Oc8w;(#P2H?9I>*|aI73?`wbss)dnk3hLc1cU9@Csbt zxX~!WGZfm%S&+MOP0W{48#|viUL7B2z#m8+I&kNXrUq{sI~_t@$eAAu?2w0$JCp#< z!{diPY#~adE=eoqVMx6ahva~=bYJqjJLW!K%`JEL(G8FSTF>NW?##ZHfrQk3PLHz=ncOuNZh znM6TRc)zj|S3=F$r-2)x7~lau%~_j7mN(fcry?=V0MOa!R|{6R=)1?;#>aD!4Rh6h z0pG77>?hFTu}yZQ&jL~)G5*}><9Km|z`>q0c9JSwi3#NBGb&`89 zyhZ3V;!@X^Qog)0ZQO7ERe)w5xTEODd0Qq`T};s1ThXffeM1+~l?gY#2vtrFwJg45 zHYt+wW_TVccg?Tcxt!R(iiZ8Bn7J^j0=Efv2@mG@hWlA8+QIM4J#>W^-e}>NJe};X zI-T}zdxPb&8`08dn@_FpApy>K(Xq-T;s%5cb=Y0Ez}T>dZh;{9YZn(67y&T~q2z_= z{s~3yzgvBt_~NB!%FYi%eyiuBkG{FC-NI2w?;4Oh+`nkOx~&<(f1RFvI!wf$1W%|$ zEy|l>OvIiZm93iBDX}_WV@p@*cpI8of?`Ce)B~3mg zsl5|Q|vJkxoAUx^$NlChw2BwI=;-P?&) z#gV=GZY5n=ZMP#{5s_ZHBz=*n$9b+Roq4waG|uaTKun%WtgJ+m=6M?1bZt}jSP-5A z|J*``j%}+$YpL44cGQ!iTH%mz$)dEIkUew#ag?v|Zj>(Y_qJFJGe0mK>}#6^;3-PU zIYM#a2W4<8*lv++Et8yIKRIyfyh##iu8Og6d{?l$xBaEBXg*T(kt`{X?OO(Bi}uKj zS9A7^Vb5j7CzPPE2USTZl4 zm8~YV1o9F?M-iCsK@8_tCa$|_Gb(L#&3|SSh1M#c1i^@Goo61NLo8K^OKFxJaqI** z%(0hS4vnoe#t#wuBMFeLXw4y+!yMYYT}?qUvEugYMuZlGYzWqn*1%kD;6|Rx^71~h zYr|cRQUE|T7e@xDQ?)z$^&fz_{848*1#j&N?#j%;qs@N(+@q{ouG=fl~G(o6xDK$RA1W3pJb4?Wh z+rD~lg=)T-vxFR6mU@Sgd(_%o=;r#ihM{3^&d6(Zv2^31NYGZnO@8T=>)I{=>JEGv zai5>M#47mP{vC`1_<6SeX4#pE)ird;P7l)(z2B$xL}uJMD<1!NX>XebsJ##)NpHkt zXL(T1QpV>H{4*xCOTAdYN*0>pa?b&8`~zB8J;v`CqaSGhMn6!pgRFzKIq!C95+nr! z?~8||bny5-(z!%4%Kd;|*7YTjStp)39ep_CCK5E$<#q|e9vwtZ`r?ZD#a-7cWQx9wHV7KgYUY#oh=6aT7}RdPFIeM%6uoyR4cWXu#naXgfozaWq3^uJt+xNZ^3TYMn?(Q7A`0|_aZvu&eyZem4 zS@!Dmw&OLBD`P0PMZU7{RHNa;MowQp2)@lWcTYKseH-`oy|<>=L_{GZW1Z5mTA#YT z4O{Gpx92%uBOIbwgxZkew=u6hyC7m<30jb1C>frLq$bQ7Mltpf8d2uYCw?RFr}AmN zEKT8@J(trjxs}k8_Xv5sXCjeOQr*K--Bcr<(Y}ggIx&CLa=$&dbO6TG8ox_?Xav_o zfv|DYjIczemiZzGz(2l_*h;TB1$&HEf|A=&L8)kDd4Eovrv)aY141P$$)1lD(`^^I z#Ho-L3b_#~r}gedcj7Ct5iD{_!`>&f$w^3w2e}n5!8eb(F0V;H=Wp)WyDlHC&^jyr zZ1ae%kRq|t?rko^B}#I03vzi2;Wnh)tCxvxH#e zU^UJd;ukF!Qi^;1RFLI?6Ic-wv>QRT6anoftF1P%- zjYhAuKqRd7#lEwxR%U4Pw!FuA8POI&n`XD{kJa4cHs8Rl~p ziF7i@-dc63{_lfH@IS+dOd?oIgtSE=@1ZfrSr~UVbu(~OXOnHzra ztq!6_)8v0hJQ&$9xUZ4Mh5YOn6MuJwfHTxw@z`p#^xb3{I{Qd9NZQ(7rS~x@jhVKy?HWe zg33!I_0IF`ynsFQkt_0wVLN=R&5kF(@XA(Vl z1Z4+34Jw4IY?nXme3`&-UgHvC^d54qeQ}TK?@@rqM!WB zKS0PE&FS$EzFn!(zFHGOl#oFnhNmrg=R6XMFp1zmVL-{knt;K96fX$&PLZ&6**ql| zp5k*otp$=LUx-w62(2%@NLAVPL0lf)BG#Kw@KgkMnAnJ#;qXW$_b<&$N-p{y=FDf8 z{?A>PG7mjDKOw~CmRo-sMM0Lo@AfrM~oMl&Mhp$@DBPl2zp^UGw8duuYzkAzafV2B~Hc}3)j_UJaV zqr4uO#?2yInxH5mhD@Pi6~oow5fuM@dk<@Q!Z8v!gvfe<08dYzDF}K2)AT*(e+&*G zaM82xH;bLfE?-ZY=^MfzOBe|u6rVas2r@B}NW7~Myu|t6a-}m|g^~U&;t=qsuA-w{ Jq-gH@{{XZrUSj|N diff --git a/lib/app/map/page.dart b/lib/app/map/page.dart index a20936a7c..0c536b632 100644 --- a/lib/app/map/page.dart +++ b/lib/app/map/page.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:dpip/utils/extensions/maplibre.dart'; import 'package:flutter/material.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; @@ -223,32 +224,10 @@ class _MapPageState extends State with TickerProviderStateMixin { setState(() => _activeLayers = newLayers); } - void _hideBaseMapLayers() { - _controller.setLayerVisibility(BaseMapLayerIds.exptechGlobalFill, false); - _controller.setLayerVisibility(BaseMapLayerIds.exptechTownFill, false); - _controller.setLayerVisibility(BaseMapLayerIds.exptechCountyFill, false); - _controller.setLayerVisibility(BaseMapLayerIds.osmGlobalRaster, false); - _controller.setLayerVisibility(BaseMapLayerIds.googleGlobalRaster, false); - } - Future setBaseMapType(BaseMapType baseMapType) async { if (!mounted) return; - _hideBaseMapLayers(); - - switch (baseMapType) { - case BaseMapType.exptech: - await _controller.setLayerVisibility(BaseMapLayerIds.exptechGlobalFill, true); - await _controller.setLayerVisibility(BaseMapLayerIds.exptechTownFill, true); - await _controller.setLayerVisibility(BaseMapLayerIds.exptechCountyFill, true); - await _controller.setLayerVisibility(BaseMapLayerIds.exptechCountyOutline, true); - - case BaseMapType.osm: - await _controller.setLayerVisibility(BaseMapLayerIds.osmGlobalRaster, true); - - case BaseMapType.google: - await _controller.setLayerVisibility(BaseMapLayerIds.googleGlobalRaster, true); - } + await _controller.setBaseMap(baseMapType); setState(() => _baseMapType = baseMapType); } @@ -283,7 +262,6 @@ class _MapPageState extends State with TickerProviderStateMixin { _setupWeatherLayerTimeSync(); - setBaseMapType(_baseMapType); setLayers(_activeLayers); } @@ -299,7 +277,7 @@ class _MapPageState extends State with TickerProviderStateMixin { return Scaffold( body: Stack( children: [ - DpipMap(onMapCreated: onMapCreated), + DpipMap(baseMapType: _baseMapType, onMapCreated: onMapCreated), PositionedLayerButton( activeLayers: _activeLayers, currentBaseMap: _baseMapType, diff --git a/lib/utils/extensions/maplibre.dart b/lib/utils/extensions/maplibre.dart new file mode 100644 index 000000000..f8ab01564 --- /dev/null +++ b/lib/utils/extensions/maplibre.dart @@ -0,0 +1,34 @@ +import 'package:maplibre_gl/maplibre_gl.dart'; + +import 'package:dpip/widgets/map/map.dart'; + +extension MapLibreMapControllerExtension on MapLibreMapController { + Future setBaseMap(BaseMapType baseMapType) async { + await Future.wait([ + setOSMVisibility(baseMapType == BaseMapType.osm), + setGoogleVisibility(baseMapType == BaseMapType.google), + setExptechVisibility(baseMapType == BaseMapType.exptech), + ]); + } + + Future setOSMVisibility(bool visible) async { + final layers = (await getLayerIds()).cast(); + final osmLayers = layers.where((v) => v.startsWith('osm-')); + + await Future.wait(osmLayers.map((v) => setLayerVisibility(v, visible))); + } + + Future setGoogleVisibility(bool visible) async { + final layers = (await getLayerIds()).cast(); + final googleLayers = layers.where((v) => v.startsWith('google-')); + + await Future.wait(googleLayers.map((v) => setLayerVisibility(v, visible))); + } + + Future setExptechVisibility(bool visible) async { + final layers = (await getLayerIds()).cast(); + final exptechLayers = layers.where((v) => v.startsWith('exptech-')); + + await Future.wait(exptechLayers.map((v) => setLayerVisibility(v, visible))); + } +} diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 3ac70774f..d8c7ecb8d 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -1,18 +1,17 @@ -import 'dart:convert'; import 'dart:io'; import 'dart:math'; +import 'package:flutter/material.dart'; + +import 'package:maplibre_gl/maplibre_gl.dart'; + import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/utils/constants.dart'; -import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:maplibre_gl/maplibre_gl.dart'; -import 'package:path_provider/path_provider.dart'; +import 'package:dpip/widgets/map/style.dart'; enum BaseMapType { exptech, osm, google } @@ -36,9 +35,6 @@ class BaseMapLayerIds { static const exptechCountyFill = 'exptech-county'; static const exptechCountyOutline = 'exptech-county-outline'; - static const osmGlobalRaster = 'osm-global'; - static const googleGlobalRaster = 'google-global'; - static const userLocation = 'user-location'; static Iterable values() sync* { @@ -72,11 +68,12 @@ class DpipMap extends StatefulWidget { final bool focusUserLocationOnValueUpdate; static const kTaiwanCenter = LatLng(23.60, 120.85); + static const kTaiwanZoom = 6.4; const DpipMap({ super.key, this.baseMapType = BaseMapType.exptech, - this.initialCameraPosition = const CameraPosition(target: kTaiwanCenter, zoom: 6.4), + this.initialCameraPosition = const CameraPosition(target: kTaiwanCenter, zoom: kTaiwanZoom), this.onMapCreated, this.onMapClick, this.onMapIdle, @@ -94,106 +91,8 @@ class DpipMap extends StatefulWidget { @override State createState() => DpipMapState(); -} -class DpipMapState extends State { - String _getStyleJson(String spritePath) { - final colors = context.colors; - - return jsonEncode({ - 'version': 8, - 'name': 'ExpTech Studio', - 'center': [120.85, 23.10], - 'zoom': 6.2, - 'sources': { - 'map': { - 'type': 'vector', - 'url': 'https://lb.exptech.dev/api/v1/map/tiles/tiles.json', - 'tileSize': 512, - 'buffer': 64, - }, - 'osm': { - 'type': 'raster', - 'tiles': ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'], - 'tileSize': 256, - 'attribution': '© OpenStreetMap Contributors', - 'maxzoom': 19, - }, - 'google': { - 'type': 'raster', - 'tiles': ['https://mts1.google.com/vt/lyrs=p&hl=zh-TW&x={x}&y={y}&z={z}'], - 'tileSize': 256, - 'attribution': '© Google Maps', - 'maxzoom': 19, - }, - }, - 'sprite': spritePath, - 'glyphs': 'https://cdn.jsdelivr.net/gh/exptechtw/map-glyph/{fontstack}/{range}.pbf', - 'layers': [ - { - 'id': 'background', - 'type': 'background', - 'paint': {'background-color': colors.surface.toHexStringRGB()}, - }, - { - 'id': BaseMapLayerIds.osmGlobalRaster, - 'type': 'raster', - 'source': 'osm', - 'layout': {'visibility': widget.baseMapType == BaseMapType.osm ? 'visible' : 'none'}, - }, - { - 'id': BaseMapLayerIds.googleGlobalRaster, - 'type': 'raster', - 'source': 'google', - 'layout': {'visibility': widget.baseMapType == BaseMapType.google ? 'visible' : 'none'}, - }, - { - 'id': BaseMapLayerIds.exptechGlobalFill, - 'type': 'fill', - 'source': 'map', - 'source-layer': 'global', - 'paint': {'fill-color': colors.surfaceContainer.toHexStringRGB(), 'fill-opacity': 1}, - 'layout': {'visibility': widget.baseMapType == BaseMapType.exptech ? 'visible' : 'none'}, - }, - { - 'id': BaseMapLayerIds.exptechCountyFill, - 'type': 'fill', - 'source': 'map', - 'source-layer': 'city', - 'paint': {'fill-color': colors.surfaceContainerHigh.toHexStringRGB(), 'fill-opacity': 1}, - 'layout': {'visibility': widget.baseMapType == BaseMapType.exptech ? 'visible' : 'none'}, - }, - { - 'id': BaseMapLayerIds.exptechTownFill, - 'type': 'fill', - 'source': 'map', - 'source-layer': 'town', - 'paint': {'fill-color': colors.surfaceContainerHigh.toHexStringRGB(), 'fill-opacity': 1}, - 'layout': {'visibility': widget.baseMapType == BaseMapType.exptech ? 'visible' : 'none'}, - }, - { - 'id': BaseMapLayerIds.exptechCountyOutline, - 'source': 'map', - 'source-layer': 'city', - 'type': 'line', - 'paint': {'line-color': colors.outline.toHexStringRGB()}, - 'layout': {'visibility': 'visible'}, - }, - { - 'id': 'tsunami', - 'type': 'line', - 'source': 'map', - 'source-layer': 'tsunami', - 'paint': {'line-opacity': 0, 'line-width': 3, 'line-join': 'round'}, - }, - ], - }); - } - - MapLibreMapController? _controller; - String? styleAbsoluteFilePath; - - double adjustedZoom(double zoom) { + static double adjustedZoom(BuildContext context, double zoom) { final double devicePixelRatio = MediaQuery.of(context).devicePixelRatio; const double baseZoomAdjustment = 1.0; const double mediumZoomAdjustment = 0.3; @@ -208,6 +107,11 @@ class DpipMapState extends State { return zoom + baseZoomAdjustment; } } +} + +class DpipMapState extends State { + MapLibreMapController? _controller; + late Future styleAbsoluteFilePath = MapStyle(context, baseMap: widget.baseMapType).save(); Future _updateUserLocation() async { if (!mounted) return; @@ -286,69 +190,45 @@ class DpipMapState extends State { super.initState(); GlobalProviders.location.$coordinates.addListener(_updateUserLocation); - - getApplicationDocumentsDirectory().then((dir) async { - final documentDir = dir.path; - final mapDir = '$documentDir/map'; - - await Directory(mapDir).create(recursive: true); - - // Copy sprite.png - final spritePngData = await rootBundle.load('assets/sprites.png'); - final spritePngFile = File('$mapDir/sprites.png'); - await spritePngFile.writeAsBytes(spritePngData.buffer.asUint8List()); - final spritePngFile2x = File('$mapDir/sprites@2x.png'); - await spritePngFile2x.writeAsBytes(spritePngData.buffer.asUint8List()); - - // Copy sprite.json - final spriteJsonData = await rootBundle.load('assets/sprites.json'); - final spriteJsonFile = File('$mapDir/sprites.json'); - await spriteJsonFile.writeAsBytes(spriteJsonData.buffer.asUint8List()); - final spriteJsonFile2x = File('$mapDir/sprites@2x.json'); - await spriteJsonFile2x.writeAsBytes(spriteJsonData.buffer.asUint8List()); - - final spriteUri = '${spriteJsonFile.parent.uri}sprites'; - TalkerManager.instance.info('Sprite is $spriteUri'); - - // Create style.json - final styleJsonData = _getStyleJson(spriteUri); - final styleJsonFile = File('$mapDir/style.json'); - await styleJsonFile.writeAsString(styleJsonData); - - setState(() => styleAbsoluteFilePath = styleJsonFile.uri.toFilePath()); - }); } @override Widget build(BuildContext context) { - if (styleAbsoluteFilePath == null) { - return const Center(child: CircularProgressIndicator()); - } + final double adjustedZoomValue = DpipMap.adjustedZoom(context, widget.initialCameraPosition.zoom); - final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom); - - return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5), - trackCameraPosition: true, - initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), - styleString: styleAbsoluteFilePath!, - tiltGesturesEnabled: widget.tiltGesturesEnabled ?? false, - scrollGesturesEnabled: widget.scrollGesturesEnabled ?? true, - rotateGesturesEnabled: widget.rotateGesturesEnabled ?? false, - zoomGesturesEnabled: widget.zoomGesturesEnabled ?? true, - doubleClickZoomEnabled: widget.doubleClickZoomEnabled ?? true, - dragEnabled: widget.dragEnabled ?? true, - attributionButtonMargins: const Point(-100, -100), - onMapCreated: (controller) { - _controller = controller; - widget.onMapCreated?.call(controller); - }, - onMapClick: widget.onMapClick, - onMapIdle: widget.onMapIdle, - onMapLongClick: widget.onMapLongClick, - onStyleLoadedCallback: () { - _initMap(); - widget.onStyleLoadedCallback?.call(); + return FutureBuilder( + future: styleAbsoluteFilePath, + builder: (context, snapshot) { + final styleString = snapshot.data; + + if (styleString == null) { + return const Center(child: CircularProgressIndicator()); + } + + return MapLibreMap( + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5), + trackCameraPosition: true, + initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), + styleString: styleString, + tiltGesturesEnabled: widget.tiltGesturesEnabled ?? false, + scrollGesturesEnabled: widget.scrollGesturesEnabled ?? true, + rotateGesturesEnabled: widget.rotateGesturesEnabled ?? false, + zoomGesturesEnabled: widget.zoomGesturesEnabled ?? true, + doubleClickZoomEnabled: widget.doubleClickZoomEnabled ?? true, + dragEnabled: widget.dragEnabled ?? true, + attributionButtonMargins: const Point(-100, -100), + onMapCreated: (controller) { + _controller = controller; + widget.onMapCreated?.call(controller); + }, + onMapClick: widget.onMapClick, + onMapIdle: widget.onMapIdle, + onMapLongClick: widget.onMapLongClick, + onStyleLoadedCallback: () { + _initMap(); + widget.onStyleLoadedCallback?.call(); + }, + ); }, ); } diff --git a/lib/widgets/map/style.dart b/lib/widgets/map/style.dart new file mode 100644 index 000000000..9fabfd240 --- /dev/null +++ b/lib/widgets/map/style.dart @@ -0,0 +1,1123 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/material.dart'; + +import 'package:crypto/crypto.dart'; +import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:path_provider/path_provider.dart'; + +import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/widgets/map/map.dart'; + +class MapStyle { + late Map json; + + MapStyle(BuildContext context, {required BaseMapType baseMap}) { + json = { + 'version': 8, + 'name': 'DPIP Map', + 'center': DpipMap.kTaiwanCenter.asGeoJsonCooridnate, + 'zoom': DpipMap.adjustedZoom(context, DpipMap.kTaiwanZoom), + 'font-faces': { + 'Noto Sans TC Regular': + 'https://cdn.jsdelivr.net/gh/notofonts/noto-cjk/blob/Sans/OTF/TraditionalChinese/NotoSansCJKtc-Regular.otf', + 'Noto Sans TC Bold': + 'https://cdn.jsdelivr.net/gh/notofonts/noto-cjk/blob/Sans/OTF/TraditionalChinese/NotoSansCJKtc-Bold.otf', + }, + 'glyphs': 'https://cdn.jsdelivr.net/gh/exptechtw/map-assets/{fontstack}/{range}.pbf', + 'sprite': 'https://cdn.jsdelivr.net/gh/exptechtw/map-assets/sprites', + 'sources': {...osmSource(), ...googleSource(), ...exptechSource()}, + 'layers': [ + background(context.colors), + ...osmLayers(context.colors, visible: baseMap == BaseMapType.osm), + ...googleLayers(visible: baseMap == BaseMapType.google), + ...exptechLayers(context.colors, visible: baseMap == BaseMapType.exptech), + ], + }; + } + + Future save() async { + final cache = await getApplicationCacheDirectory(); + final cachePath = cache.path; + + final data = jsonEncode(json); + final hash = md5.convert(utf8.encode(data)).toString(); + + final styleJsonFile = File('$cachePath/map-$hash.json'); + + if (!styleJsonFile.existsSync()) { + await styleJsonFile.writeAsString(data); + } + + return styleJsonFile.path; + } + + static Map osmSource() => { + 'ne2_shaded': { + 'maxzoom': 6, + 'tileSize': 256, + 'tiles': ['https://tiles.openfreemap.org/natural_earth/ne2sr/{z}/{x}/{y}.png'], + 'type': 'raster', + }, + 'openmaptiles': {'type': 'vector', 'url': 'https://tiles.openfreemap.org/planet', 'volatile': true}, + }; + + static Map background(ColorScheme colors) => { + 'id': 'background', + 'type': 'background', + 'layout': {'visibility': 'visible'}, + 'paint': {'background-color': colors.surface.toHexStringRGB()}, + }; + + static List> osmLayers(ColorScheme colors, {bool visible = false}) => [ + { + 'id': 'osm-background', + 'type': 'background', + 'layout': {'visibility': visible ? 'visible' : 'none'}, + 'paint': {'background-color': colors.surfaceContainerHigh.toHexStringRGB()}, + }, + { + 'id': 'osm-landcover-glacier', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'landcover', + 'filter': [ + '==', + ['get', 'subclass'], + 'glacier', + ], + 'paint': { + 'fill-color': '#fff', + 'fill-opacity': [ + 'interpolate', + ['linear'], + ['zoom'], + 0, + 0.9, + 10, + 0.3, + ], + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-park', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'park', + 'filter': [ + 'match', + ['geometry-type'], + ['MultiPolygon', 'Polygon'], + true, + false, + ], + 'paint': { + 'fill-color': '#d8e8c8', + 'fill-opacity': [ + 'interpolate', + ['exponential', 1.8], + ['zoom'], + 9, + if (colors.brightness == Brightness.dark) 0.05 else 0.6, + 12, + if (colors.brightness == Brightness.dark) 0.004 else 0.25, + ], + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-landcover-wood', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'landcover', + 'filter': [ + '==', + ['get', 'class'], + 'wood', + ], + 'paint': { + 'fill-antialias': [ + 'step', + ['zoom'], + false, + 9, + true, + ], + 'fill-color': '#66aa44', + 'fill-opacity': 0.1, + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-landcover-grass', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'landcover', + 'filter': [ + '==', + ['get', 'class'], + 'grass', + ], + 'paint': {'fill-color': '#d2e8c2', 'fill-opacity': colors.brightness == Brightness.dark ? 0.2 : 1}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-landcover-grass-park', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'park', + 'filter': [ + '==', + ['get', 'class'], + 'public_park', + ], + 'paint': {'fill-color': '#d8e8c8', 'fill-opacity': colors.brightness == Brightness.dark ? 0.4 : 0.8}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway_tunnel', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'minzoom': 14, + 'filter': [ + 'all', + [ + 'match', + ['get', 'class'], + ['canal', 'river', 'stream'], + true, + false, + ], + [ + '==', + ['get', 'brunnel'], + 'tunnel', + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-dasharray': [2, 4], + 'line-width': [ + 'interpolate', + ['exponential', 1.3], + ['zoom'], + 13, + 0.5, + 20, + 6, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-other', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + 'match', + ['get', 'class'], + ['canal', 'river', 'stream'], + false, + true, + ], + [ + '==', + ['get', 'intermittent'], + 0, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-width': [ + 'interpolate', + ['exponential', 1.3], + ['zoom'], + 13, + 0.5, + 20, + 2, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-other-intermittent', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + 'match', + ['get', 'class'], + ['canal', 'river', 'stream'], + false, + true, + ], + [ + '==', + ['get', 'intermittent'], + 1, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-dasharray': [4, 3], + 'line-width': [ + 'interpolate', + ['exponential', 1.3], + ['zoom'], + 13, + 0.5, + 20, + 2, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-stream-canal', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + 'match', + ['get', 'class'], + ['canal', 'stream'], + true, + false, + ], + [ + '!=', + ['get', 'brunnel'], + 'tunnel', + ], + [ + '==', + ['get', 'intermittent'], + 0, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-width': [ + 'interpolate', + ['exponential', 1.3], + ['zoom'], + 13, + 0.5, + 20, + 6, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-stream-canal-intermittent', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + 'match', + ['get', 'class'], + ['canal', 'stream'], + true, + false, + ], + [ + '!=', + ['get', 'brunnel'], + 'tunnel', + ], + [ + '==', + ['get', 'intermittent'], + 1, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-dasharray': [4, 3], + 'line-width': [ + 'interpolate', + ['exponential', 1.3], + ['zoom'], + 13, + 0.5, + 20, + 6, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-river', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'river', + ], + [ + '!=', + ['get', 'brunnel'], + 'tunnel', + ], + [ + '!=', + ['get', 'intermittent'], + 1, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-width': [ + 'interpolate', + ['exponential', 1.2], + ['zoom'], + 10, + 0.8, + 20, + 6, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway-river-intermittent', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'river', + ], + [ + '!=', + ['get', 'brunnel'], + 'tunnel', + ], + [ + '==', + ['get', 'intermittent'], + 1, + ], + ], + 'paint': { + 'line-color': '#a0c8f0', + 'line-opacity': colors.brightness == Brightness.dark ? 0.4 : 1, + 'line-dasharray': [3, 2.5], + 'line-width': [ + 'interpolate', + ['exponential', 1.2], + ['zoom'], + 10, + 0.8, + 20, + 6, + ], + }, + 'layout': {'line-cap': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-water', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'water', + 'filter': [ + 'all', + [ + '!=', + ['get', 'intermittent'], + 1, + ], + [ + '!=', + ['get', 'brunnel'], + 'tunnel', + ], + ], + 'paint': {'fill-color': colors.brightness == Brightness.dark ? colors.surface.toHexStringRGB() : '#AECFE2'}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-water-intermittent', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'water', + 'filter': [ + '==', + ['get', 'intermittent'], + 1, + ], + 'paint': {'fill-color': '#CFE6F7', 'fill-opacity': colors.brightness == Brightness.dark ? 0.3 : 0.7}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-landcover-ice-shelf', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'landcover', + 'filter': [ + '==', + ['get', 'subclass'], + 'ice_shelf', + ], + 'paint': { + 'fill-color': colors.brightness == Brightness.dark ? colors.surfaceContainerHigh.toHexStringRGB() : '#fff', + 'fill-opacity': [ + 'interpolate', + ['linear'], + ['zoom'], + 0, + 0.9, + 10, + 0.3, + ], + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-landcover-sand', + 'type': 'fill', + 'source': 'openmaptiles', + 'source-layer': 'landcover', + 'filter': [ + '==', + ['get', 'class'], + 'sand', + ], + 'paint': {'fill-color': '#f5eebc', 'fill-opacity': colors.brightness == Brightness.dark ? 0.6 : 1}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-boundary_3', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'boundary', + 'minzoom': 4, + 'filter': [ + 'all', + [ + '>=', + ['get', 'admin_level'], + 3, + ], + [ + '<=', + ['get', 'admin_level'], + 6, + ], + [ + '!=', + ['get', 'maritime'], + 1, + ], + [ + '!=', + ['get', 'disputed'], + 1, + ], + [ + '!', + ['has', 'claimed_by'], + ], + ], + 'paint': { + 'line-color': colors.outline.toHexStringRGB(), + 'line-dasharray': [1, 1], + 'line-width': [ + 'interpolate', + ['linear', 1], + ['zoom'], + 7, + 1, + 11, + 2, + ], + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-boundary_2', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'boundary', + 'filter': [ + 'all', + [ + '==', + ['get', 'admin_level'], + 2, + ], + [ + '!=', + ['get', 'maritime'], + 1, + ], + [ + '!=', + ['get', 'disputed'], + 1, + ], + [ + '!', + ['has', 'claimed_by'], + ], + ], + 'paint': { + 'line-color': colors.outlineVariant.toHexStringRGB(), + 'line-opacity': [ + 'interpolate', + ['linear'], + ['zoom'], + 0, + 0.4, + 4, + 1, + ], + 'line-width': [ + 'interpolate', + ['linear'], + ['zoom'], + 3, + 1, + 5, + 1.2, + 12, + 3, + ], + }, + 'layout': {'line-cap': 'round', 'line-join': 'round', 'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-boundary_disputed', + 'type': 'line', + 'source': 'openmaptiles', + 'source-layer': 'boundary', + 'filter': [ + 'all', + [ + '!=', + ['get', 'maritime'], + 1, + ], + [ + '==', + ['get', 'disputed'], + 1, + ], + ], + 'paint': { + 'line-color': colors.outlineVariant.toHexStringRGB(), + 'line-dasharray': [1, 2], + 'line-width': [ + 'interpolate', + ['linear'], + ['zoom'], + 3, + 1, + 5, + 1.2, + 12, + 3, + ], + }, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': 'osm-waterway_line_label', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'waterway', + 'minzoom': 10, + 'filter': [ + 'match', + ['geometry-type'], + ['LineString', 'MultiLineString'], + true, + false, + ], + 'paint': { + 'text-color': '#74aee9', + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1.5, + }, + 'layout': { + 'symbol-placement': 'line', + 'symbol-spacing': 350, + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Regular'], + 'text-letter-spacing': 0.2, + 'text-max-width': 5, + 'text-size': 14, + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-water_name_line_label', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'water_name', + 'filter': [ + 'match', + ['geometry-type'], + ['LineString', 'MultiLineString'], + true, + false, + ], + 'paint': { + 'text-color': '#495e91', + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1.5, + }, + 'layout': { + 'symbol-placement': 'line', + 'symbol-spacing': 350, + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Regular'], + 'text-letter-spacing': 0.2, + 'text-max-width': 5, + 'text-size': 14, + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_country_2', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'maxzoom': 9, + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'country', + ], + [ + '==', + ['get', 'rank'], + 2, + ], + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Bold'], + 'text-max-width': 6.25, + 'text-size': [ + 'interpolate', + ['linear'], + ['zoom'], + 2, + 9, + 5, + 17, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_town', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'minzoom': 6, + 'filter': [ + '==', + ['get', 'class'], + 'town', + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'icon-allow-overlap': true, + 'icon-image': [ + 'step', + ['zoom'], + 'circle_11_black', + 10, + '', + ], + 'icon-optional': false, + 'icon-size': 0.2, + 'text-anchor': 'bottom', + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Regular'], + 'text-max-width': 8, + 'text-size': [ + 'interpolate', + ['exponential', 1.2], + ['zoom'], + 7, + 12, + 11, + 14, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_state', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'minzoom': 5, + 'maxzoom': 8, + 'filter': [ + '==', + ['get', 'class'], + 'state', + ], + 'paint': { + 'text-color': colors.onSurfaceVariant.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Regular'], + 'text-letter-spacing': 0.2, + 'text-max-width': 9, + 'text-size': [ + 'interpolate', + ['linear'], + ['zoom'], + 5, + 10, + 8, + 14, + ], + 'text-transform': 'uppercase', + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_city', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'minzoom': 3, + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'city', + ], + [ + '!=', + ['get', 'capital'], + 2, + ], + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'icon-allow-overlap': true, + 'icon-image': [ + 'step', + ['zoom'], + 'circle_11_black', + 9, + '', + ], + 'icon-optional': false, + 'icon-size': 0.4, + 'text-anchor': 'bottom', + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Regular'], + 'text-max-width': 8, + 'text-offset': [0, -0.1], + 'text-size': [ + 'interpolate', + ['exponential', 1.2], + ['zoom'], + 4, + 11, + 7, + 13, + 11, + 18, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_city_capital', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'minzoom': 3, + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'city', + ], + [ + '==', + ['get', 'capital'], + 2, + ], + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'icon-allow-overlap': true, + 'icon-image': [ + 'step', + ['zoom'], + 'circle_11_black', + 9, + '', + ], + 'icon-optional': false, + 'icon-size': 0.5, + 'text-anchor': 'bottom', + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Bold'], + 'text-max-width': 8, + 'text-offset': [0, -0.2], + 'text-size': [ + 'interpolate', + ['exponential', 1.2], + ['zoom'], + 4, + 12, + 7, + 14, + 11, + 20, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_country_3', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'minzoom': 2, + 'maxzoom': 9, + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'country', + ], + [ + '>=', + ['get', 'rank'], + 3, + ], + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Bold'], + 'text-max-width': 6.25, + 'text-size': [ + 'interpolate', + ['linear'], + ['zoom'], + 3, + 9, + 7, + 17, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + { + 'id': 'osm-label_country_1', + 'type': 'symbol', + 'source': 'openmaptiles', + 'source-layer': 'place', + 'maxzoom': 9, + 'filter': [ + 'all', + [ + '==', + ['get', 'class'], + 'country', + ], + [ + '==', + ['get', 'rank'], + 1, + ], + ], + 'paint': { + 'text-color': colors.onSurface.toHexStringRGB(), + 'text-halo-blur': 1, + 'text-halo-color': colors.outlineVariant.toHexStringRGB(), + 'text-halo-width': 1, + }, + 'layout': { + 'text-field': [ + 'coalesce', + ['get', 'name:nonlatin'], + ['get', 'name'], + ], + 'text-font': ['Noto Sans TC Bold'], + 'text-max-width': 6.25, + 'text-size': [ + 'interpolate', + ['linear'], + ['zoom'], + 1, + 9, + 4, + 17, + ], + 'visibility': visible ? 'visible' : 'none', + }, + }, + ]; + + static Map googleSource() => { + 'google': { + 'type': 'raster', + 'tiles': ['https://mt1.google.com/vt/lyrs=s&hl=zh-TW&x={x}&y={y}&z={z}'], + 'tileSize': 256, + 'attribution': '© Google Maps', + 'maxzoom': 19, + }, + }; + + static List> googleLayers({bool visible = false}) => [ + { + 'id': 'google-raster', + 'type': 'raster', + 'source': 'google', + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + ]; + + static Map exptechSource() => { + 'exptech': { + 'type': 'vector', + 'url': 'https://lb.exptech.dev/api/v1/map/tiles/tiles.json', + 'tileSize': 512, + 'buffer': 64, + }, + }; + + static List> exptechLayers(ColorScheme colors, {bool visible = false}) => [ + { + 'id': BaseMapLayerIds.exptechGlobalFill, + 'type': 'fill', + 'source': 'exptech', + 'source-layer': 'global', + 'paint': {'fill-color': colors.surfaceContainer.toHexStringRGB(), 'fill-opacity': 1}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': BaseMapLayerIds.exptechCountyFill, + 'type': 'fill', + 'source': 'exptech', + 'source-layer': 'city', + 'paint': {'fill-color': colors.surfaceContainerHigh.toHexStringRGB(), 'fill-opacity': 1}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': BaseMapLayerIds.exptechTownFill, + 'type': 'fill', + 'source': 'exptech', + 'source-layer': 'town', + 'paint': {'fill-color': colors.surfaceContainerHigh.toHexStringRGB(), 'fill-opacity': 1}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + { + 'id': BaseMapLayerIds.exptechCountyOutline, + 'type': 'line', + 'source': 'exptech', + 'source-layer': 'city', + 'paint': {'line-color': colors.outline.toHexStringRGB()}, + 'layout': {'visibility': visible ? 'visible' : 'none'}, + }, + ]; +} diff --git a/pubspec.lock b/pubspec.lock index a0a351cb2..762629257 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -258,7 +258,7 @@ packages: source: hosted version: "0.3.4+2" crypto: - dependency: transitive + dependency: "direct main" description: name: crypto sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" @@ -1607,6 +1607,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 14645052e..a23675aba 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: ip_country_lookup: ^1.0.0 flutter_icmp_ping: ^3.1.3 geojson_vi: ^2.2.5 + crypto: ^3.0.6 dependency_overrides: intl: 0.19.0 @@ -89,5 +90,3 @@ flutter: - assets/notify_test.json - assets/time.json - assets/box.json - - assets/sprites.png - - assets/sprites.json From d4294df8fe4b5588e8431f2792755d4342ca23c7 Mon Sep 17 00:00:00 2001 From: Lingling Date: Mon, 11 Aug 2025 06:22:26 +0800 Subject: [PATCH 17/59] fix: eew countdown (#360) --- lib/app/home/_widgets/eew_card.dart | 2 +- lib/app/map/_lib/managers/monitor.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/app/home/_widgets/eew_card.dart b/lib/app/home/_widgets/eew_card.dart index 7a300a8c2..bcb58cea7 100644 --- a/lib/app/home/_widgets/eew_card.dart +++ b/lib/app/home/_widgets/eew_card.dart @@ -204,7 +204,7 @@ class _EewCardState extends State { Padding( padding: const EdgeInsets.only(top: 12, bottom: 8), child: - (countdown >= 0) + (countdown > 0) ? RichText( text: TextSpan( children: [ diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 12735e68d..1a2475f52 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -1189,7 +1189,7 @@ class _MonitorMapLayerSheetState extends State { Padding( padding: const EdgeInsets.only(top: 12, bottom: 8), child: - (countdown >= 0) + (countdown > 0) ? RichText( text: TextSpan( children: [ From e7dfe26c57d8dfdccab32bc7688736c756aa2fd0 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Mon, 11 Aug 2025 15:08:44 +0800 Subject: [PATCH 18/59] refactor: map lifecycle (#364) * refactor: map lifecycle fixes #362 * fix: legend color * chore: smaller symbol size * fix: consistant symbol size * fix: layer initilization * fix: theme change * chore: remove debug log --- lib/api/exptech.dart | 66 +++---- lib/api/route.dart | 8 +- lib/app.dart | 2 +- lib/app/home/_widgets/eew_card.dart | 4 +- lib/app/home/_widgets/radar_card.dart | 135 ++++++++------- lib/app/home/page.dart | 11 +- lib/app/map/_lib/managers/monitor.dart | 34 +--- lib/app/map/_lib/managers/precipitation.dart | 2 +- lib/app/map/_lib/managers/radar.dart | 11 +- lib/app/map/_lib/managers/temperature.dart | 2 +- lib/app/map/_lib/managers/tsunami.dart | 2 +- lib/app/map/_lib/managers/wind.dart | 2 +- lib/app/map/page.dart | 10 +- lib/app_old/dpip.dart | 2 - lib/app_old/page/map/lightning/lightning.dart | 2 +- lib/app_old/page/map/radar/radar.dart | 11 +- lib/app_old/page/map/tsunami/tsunami.dart | 2 +- lib/app_old/page/map/typhoon/typhoon.dart | 2 +- lib/app_old/page/map/weather/humidity.dart | 2 +- lib/app_old/page/map/weather/pressure.dart | 2 +- lib/core/ios_get_location.dart | 11 +- lib/route/event_viewer/intensity.dart | 2 +- lib/route/event_viewer/thunderstorm.dart | 9 +- lib/utils/constants.dart | 4 +- lib/utils/extensions/int.dart | 2 +- lib/utils/extensions/latlng.dart | 10 +- lib/utils/extensions/maplibre.dart | 28 +++ lib/utils/extensions/state.dart | 7 + lib/utils/extensions/string.dart | 2 +- lib/utils/map_utils.dart | 2 - lib/widgets/layout.dart | 7 +- lib/widgets/map/map.dart | 161 +++++++++--------- lib/widgets/map/style.dart | 38 +++-- pubspec.lock | 11 +- pubspec.yaml | 7 +- 35 files changed, 347 insertions(+), 266 deletions(-) create mode 100644 lib/utils/extensions/state.dart diff --git a/lib/api/exptech.dart b/lib/api/exptech.dart index 6efe01dd5..e0412a74d 100644 --- a/lib/api/exptech.dart +++ b/lib/api/exptech.dart @@ -34,7 +34,7 @@ class ExpTech { ExpTech({this.apikey}); Future getReport(String reportId) async { - final requestUrl = Route.report(reportId); + final requestUrl = Routes.report(reportId); final res = await get(requestUrl); @@ -57,7 +57,7 @@ class ExpTech { int? minDepth = 0, int? maxDepth = 700, }) async { - final requestUrl = Route.reportList( + final requestUrl = Routes.reportList( limit: limit, page: page, minIntensity: minIntensity, @@ -80,7 +80,7 @@ class ExpTech { } Future getRts([int? time]) async { - var requestUrl = Route.rts(); + var requestUrl = Routes.rts(); if (time != null) { requestUrl = Uri.parse( @@ -104,7 +104,7 @@ class ExpTech { } Future> getEew([int? time]) async { - var requestUrl = Route.eew(); + var requestUrl = Routes.eew(); if (time != null) { requestUrl = Uri.parse( @@ -128,7 +128,7 @@ class ExpTech { } Future getNtp() async { - final requestUrl = Route.ntp(); + final requestUrl = Routes.ntp(); final res = await get(requestUrl); @@ -140,7 +140,7 @@ class ExpTech { } Future> getStations() async { - final requestUrl = Route.station(); + final requestUrl = Routes.station(); final res = await get(requestUrl); @@ -154,7 +154,7 @@ class ExpTech { } Future getTsunami(String tsuId) async { - final requestUrl = Route.tsunami(tsuId); + final requestUrl = Routes.tsunami(tsuId); final res = await get(requestUrl); @@ -168,7 +168,7 @@ class ExpTech { } Future> getTsunamiList() async { - final requestUrl = Route.tsunamiList(); + final requestUrl = Routes.tsunamiList(); final res = await get(requestUrl); @@ -182,7 +182,7 @@ class ExpTech { } Future> getLocalizationProgress() async { - final requestUrl = Route.locale(); + final requestUrl = Routes.locale(); final res = await get(requestUrl); @@ -196,7 +196,7 @@ class ExpTech { } Future> getRadarList() async { - final requestUrl = Route.radarList(); + final requestUrl = Routes.radarList(); final res = await get(requestUrl); @@ -210,7 +210,7 @@ class ExpTech { } Future> getWeatherList() async { - final requestUrl = Route.weatherList(); + final requestUrl = Routes.weatherList(); final res = await get(requestUrl); @@ -224,7 +224,7 @@ class ExpTech { } Future> getWeather(String time) async { - final requestUrl = Route.weather(time); + final requestUrl = Routes.weather(time); final res = await get(requestUrl); @@ -238,7 +238,7 @@ class ExpTech { } Future getWeatherRealtime(String region) async { - final requestUrl = Route.weatherRealtime(region); + final requestUrl = Routes.weatherRealtime(region); final res = await get(requestUrl); @@ -252,7 +252,7 @@ class ExpTech { } Future> getRainList() async { - final requestUrl = Route.rainList(); + final requestUrl = Routes.rainList(); final res = await get(requestUrl); @@ -266,7 +266,7 @@ class ExpTech { } Future> getRain(String time) async { - final requestUrl = Route.rain(time); + final requestUrl = Routes.rain(time); final res = await get(requestUrl); @@ -280,7 +280,7 @@ class ExpTech { } Future getTyphoonImagesList() async { - final requestUrl = Route.typhoonImagesList(); + final requestUrl = Routes.typhoonImagesList(); final res = await get(requestUrl); @@ -294,7 +294,7 @@ class ExpTech { } Future> getLightningList() async { - final requestUrl = Route.lightningList(); + final requestUrl = Routes.lightningList(); final res = await get(requestUrl); @@ -308,7 +308,7 @@ class ExpTech { } Future> getTyphoonGeojson() async { - final requestUrl = Route.typhoonGeojson(); + final requestUrl = Routes.typhoonGeojson(); final res = await get(requestUrl); @@ -322,7 +322,7 @@ class ExpTech { } Future> getLightning(String time) async { - final requestUrl = Route.lightning(time); + final requestUrl = Routes.lightning(time); final res = await get(requestUrl); @@ -336,7 +336,7 @@ class ExpTech { } Future> getRealtime() async { - final requestUrl = Route.realtime(); + final requestUrl = Routes.realtime(); final res = await get(requestUrl); @@ -350,7 +350,7 @@ class ExpTech { } Future> getHistory() async { - final requestUrl = Route.history(); + final requestUrl = Routes.history(); final res = await get(requestUrl); @@ -364,7 +364,7 @@ class ExpTech { } Future> getRealtimeRegion(String region) async { - final requestUrl = Route.realtimeRegion(region); + final requestUrl = Routes.realtimeRegion(region); final res = await get(requestUrl); @@ -378,7 +378,7 @@ class ExpTech { } Future> getHistoryRegion(String region) async { - final requestUrl = Route.historyRegion(region); + final requestUrl = Routes.historyRegion(region); final res = await get(requestUrl); @@ -392,7 +392,7 @@ class ExpTech { } Future> getSupport() async { - final requestUrl = Route.support(); + final requestUrl = Routes.support(); final res = await get(requestUrl); @@ -418,7 +418,7 @@ class ExpTech { } Future> getAnnouncement() async { - final requestUrl = Route.announcement(); + final requestUrl = Routes.announcement(); final res = await get(requestUrl); @@ -432,7 +432,7 @@ class ExpTech { } Future> getNotificationHistory() async { - final requestUrl = Route.notificationHistory(); + final requestUrl = Routes.notificationHistory(); final res = await get(requestUrl); @@ -446,7 +446,7 @@ class ExpTech { } Future> getStatus() async { - final requestUrl = Route.status(); + final requestUrl = Routes.status(); final res = await get(requestUrl); @@ -460,7 +460,7 @@ class ExpTech { } Future getMeteorStation(String id) async { - final requestUrl = Route.meteorStation(id); + final requestUrl = Routes.meteorStation(id); final res = await get(requestUrl); @@ -474,7 +474,7 @@ class ExpTech { } Future> getEvent(String id) async { - final requestUrl = Route.event(id); + final requestUrl = Routes.event(id); final res = await get(requestUrl); @@ -489,7 +489,7 @@ class ExpTech { /// 回傳所在地 Future updateDeviceLocation({required String token, required LatLng coordinates}) async { - final requestUrl = Route.location(token: token, lat: '${coordinates.latitude}', lng: '${coordinates.longitude}'); + final requestUrl = Routes.location(token: token, lat: '${coordinates.latitude}', lng: '${coordinates.longitude}'); final res = await get(requestUrl); @@ -506,7 +506,7 @@ class ExpTech { /// 取得通知 Future getNotify({required String token}) async { - final requestUrl = Route.notify(token: token); + final requestUrl = Routes.notify(token: token); final res = await get(requestUrl); @@ -525,7 +525,7 @@ class ExpTech { required NotifyChannel channel, required Enum status, }) async { - final requestUrl = Route.notifyStatus(token: token, channel: channel, status: status); + final requestUrl = Routes.notifyStatus(token: token, channel: channel, status: status); final res = await get(requestUrl); @@ -544,7 +544,7 @@ class ExpTech { required List status, required List status_dev, }) async { - final requestUrl = Route.networkInfo(); + final requestUrl = Routes.networkInfo(); String body = jsonEncode({'ip': ip, 'isp': isp, 'status': status, 'status_dev': status_dev}); diff --git a/lib/api/route.dart b/lib/api/route.dart index 5817d6af2..84da3210f 100644 --- a/lib/api/route.dart +++ b/lib/api/route.dart @@ -4,7 +4,9 @@ import 'dart:math'; import 'package:dpip/global.dart'; import 'package:dpip/models/settings/notify.dart'; -class Route { +class Routes { + Routes._(); + static String get api => baseApi(); static String get onlyapi => baseApi(i: 1); @@ -172,4 +174,8 @@ class Route { } static Uri networkInfo() => Uri.parse('$lb/v1/dpip/networkInfo'); + + static String radarTile(String timestamp) { + return 'https://api-1.exptech.dev/api/v1/tiles/radar/$timestamp/{z}/{x}/{y}.png'; + } } diff --git a/lib/app.dart b/lib/app.dart index 6a3b0d24b..96d79449c 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -98,7 +98,7 @@ class _DpipAppState extends State with WidgetsBindingObserver { builder: (context, child) { final mediaQueryData = MediaQuery.of(context); final scale = mediaQueryData.textScaler.clamp(minScaleFactor: 0.5, maxScaleFactor: 1.2); - return MediaQuery(data: MediaQuery.of(context).copyWith(textScaler: scale), child: child!); + return MediaQuery(data: mediaQueryData.copyWith(textScaler: scale), child: child!); }, title: 'DPIP', theme: lightTheme, diff --git a/lib/app/home/_widgets/eew_card.dart b/lib/app/home/_widgets/eew_card.dart index bcb58cea7..d515d1f3f 100644 --- a/lib/app/home/_widgets/eew_card.dart +++ b/lib/app/home/_widgets/eew_card.dart @@ -126,7 +126,7 @@ class _EewCardState extends State { ? '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' .i18n .args({ - 'time': widget.data.info.time.toSimpleDateTimeString(context), + 'time': widget.data.info.time.toSimpleDateTimeString(), 'location': widget.data.info.location, 'magnitude': widget.data.info.magnitude.toStringAsFixed(1), 'intensity': localIntensity!.asIntensityLabel, @@ -134,7 +134,7 @@ class _EewCardState extends State { : '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。' .i18n .args({ - 'time': widget.data.info.time.toSimpleDateTimeString(context), + 'time': widget.data.info.time.toSimpleDateTimeString(), 'location': widget.data.info.location, 'magnitude': widget.data.info.magnitude.toStringAsFixed(1), 'depth': widget.data.info.depth.toStringAsFixed(1), diff --git a/lib/app/home/_widgets/radar_card.dart b/lib/app/home/_widgets/radar_card.dart index 20d9d42d0..48d2baad6 100644 --- a/lib/app/home/_widgets/radar_card.dart +++ b/lib/app/home/_widgets/radar_card.dart @@ -3,16 +3,17 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:material_symbols_icons/symbols.dart'; -import 'package:provider/provider.dart'; import 'package:dpip/api/exptech.dart'; +import 'package:dpip/api/route.dart'; import 'package:dpip/app/map/_lib/utils.dart'; import 'package:dpip/app/map/page.dart'; import 'package:dpip/core/i18n.dart'; -import 'package:dpip/models/settings/ui.dart'; import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/extensions/maplibre.dart'; import 'package:dpip/utils/extensions/string.dart'; import 'package:dpip/utils/log.dart'; +import 'package:dpip/widgets/layout.dart'; import 'package:dpip/widgets/map/map.dart'; typedef PositionUpdateCallback = void Function(); @@ -25,43 +26,48 @@ class RadarMapCard extends StatefulWidget { } class _RadarMapCardState extends State { + late final _key = widget.key ?? UniqueKey(); + late MapLibreMapController mapController; - List radarList = []; + late Future> radarListFuture; - String _getTileUrl(String timestamp) { - return 'https://api-1.exptech.dev/api/v1/tiles/radar/$timestamp/{z}/{x}/{y}.png'; - } + Future _setupMapLayers() async { + final controller = mapController; + + final sourceId = MapSourceIds.radar(); + final layerId = MapLayerIds.radar(); - Future _initializeMap() async { try { - radarList = await ExpTech().getRadarList(); - if (!mounted) return; + final time = (await radarListFuture).last; + final newTileUrl = Routes.radarTile(time); - await _setupRadarLayer(); - if (!mounted) return; - } catch (e) { - TalkerManager.instance.error('RadarMapCard._initializeMap', e); - } - } + if (await controller.exists(sourceId, source: true)) { + await controller.removeSource(sourceId); + } - Future _setupRadarLayer() async { - try { - final newTileUrl = _getTileUrl(radarList.last); + await controller.addSource(sourceId, RasterSourceProperties(tiles: [newTileUrl], tileSize: 256)); - await mapController.addSource('radar-source', RasterSourceProperties(tiles: [newTileUrl], tileSize: 256)); if (!mounted) return; - await mapController.addLayer( - 'radar-source', - 'radar', - const RasterLayerProperties(), - belowLayerId: BaseMapLayerIds.exptechCountyOutline, - ); - } catch (e) { - TalkerManager.instance.error('RadarMapCard._setupRadarLayer', e); + if (!await controller.exists(layerId, layer: true)) { + await controller.addLayer( + sourceId, + layerId, + const RasterLayerProperties(), + belowLayerId: BaseMapLayerIds.exptechCountyOutline, + ); + } + } catch (e, s) { + TalkerManager.instance.error('RadarMapCard._setupMapLayers', e, s); } } + @override + void initState() { + super.initState(); + radarListFuture = ExpTech().getRadarList(); + } + @override Widget build(BuildContext context) { return Stack( @@ -75,42 +81,59 @@ class _RadarMapCardState extends State { ), child: ClipRRect( borderRadius: BorderRadius.circular(16), - child: Column( - mainAxisSize: MainAxisSize.min, + child: Layout.col.min( children: [ SizedBox( height: 200, - child: Selector( - selector: (context, ui) => (themeMode: ui.themeMode, themeColor: ui.themeColor), - builder: (context, data, _) { - final (:themeMode, :themeColor) = data; - - return DpipMap( - key: Key('$themeMode-$themeColor'), - onMapCreated: (controller) => mapController = controller, - onStyleLoadedCallback: () => _initializeMap(), - dragEnabled: false, - rotateGesturesEnabled: false, - zoomGesturesEnabled: false, - ); - }, + child: DpipMap( + key: _key, + onMapCreated: (controller) => mapController = controller, + onStyleLoadedCallback: () => _setupMapLayers(), + dragEnabled: false, + rotateGesturesEnabled: false, + zoomGesturesEnabled: false, + focusUserLocationWhenUpdated: true, ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + child: Layout.row.between( children: [ - Row( - spacing: 8, + Layout.row[8]( children: [ const Icon(Symbols.radar, size: 24), Text('雷達回波'.i18n, style: context.textTheme.titleMedium), - if (radarList.isNotEmpty) - Text( - radarList.last.toLocaleTimeString(context), - style: context.textTheme.bodySmall?.copyWith(color: context.colors.onSurfaceVariant), - ), + FutureBuilder( + future: radarListFuture, + builder: (context, snapshot) { + final data = snapshot.data; + + if (data == null) return const SizedBox.shrink(); + + final style = context.textTheme.labelSmall?.copyWith( + color: context.colors.onSurfaceVariant, + ); + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: context.colors.surfaceContainer, + border: Border.all(color: context.colors.outlineVariant), + borderRadius: BorderRadius.circular(16), + ), + child: Layout.row[4]( + children: [ + Icon( + Symbols.schedule_rounded, + size: (style?.fontSize ?? 12) * 1.25, + color: context.colors.onSurfaceVariant, + ), + Text(data.last.toSimpleDateTimeString(), style: style), + ], + ), + ); + }, + ), ], ), const Icon(Symbols.chevron_right_rounded, size: 24), @@ -124,7 +147,7 @@ class _RadarMapCardState extends State { ), Positioned.fill( child: Material( - color: Colors.transparent, + type: MaterialType.transparency, child: InkWell( onTap: () => context.push(MapPage.route(options: MapPageOptions(initialLayers: {MapLayer.radar}))), borderRadius: BorderRadius.circular(16), @@ -134,10 +157,4 @@ class _RadarMapCardState extends State { ], ); } - - @override - void dispose() { - mapController.dispose(); - super.dispose(); - } } diff --git a/lib/app/home/page.dart b/lib/app/home/page.dart index feca4f0e6..2c8311e19 100644 --- a/lib/app/home/page.dart +++ b/lib/app/home/page.dart @@ -39,6 +39,7 @@ class HomePage extends StatefulWidget { class _HomePageState extends State { final _refreshIndicatorKey = GlobalKey(); + Key? _mapKey; bool _isLoading = false; bool _isOutOfService = false; @@ -70,11 +71,16 @@ class _HomePageState extends State { if (auto) { setState(() => _isOutOfService = true); } + setState(() => _weather = _history = null); return; } - setState(() => _isLoading = true); + setState(() { + _isLoading = true; + _mapKey = Key('${DateTime.now().millisecondsSinceEpoch}'); + }); + _refreshIndicatorKey.currentState?.show(); try { @@ -130,6 +136,7 @@ class _HomePageState extends State { @override Widget build(BuildContext context) { final topPadding = 24 + 48 + context.padding.top; + return Stack( children: [ RefreshIndicator( @@ -165,7 +172,7 @@ class _HomePageState extends State { Padding(padding: const EdgeInsets.all(16), child: ThunderstormCard(_thunderstorm!)), // 地圖 - const Padding(padding: EdgeInsets.all(16), child: RadarMapCard()), + Padding(padding: const EdgeInsets.all(16), child: RadarMapCard(key: _mapKey)), // 歷史資訊 Builder( diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 1a2475f52..2683be22b 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -146,7 +146,6 @@ class MonitorMapLayerManager extends MapLayerManager { final pWaveLayerId = MapLayerIds.eew('p'); final sWaveLayerId = MapLayerIds.eew('s'); - // 检查所有源和图层是否存在 final isRtsSourceExists = sources.contains(rtsSourceId); final isRtsLayerExists = layers.contains(rtsLayerId); final isIntensitySourceExists = sources.contains(intensitySourceId); @@ -161,7 +160,6 @@ class MonitorMapLayerManager extends MapLayerManager { if (!context.mounted) return; - // 按顺序添加所有数据源 if (!isRtsSourceExists) { final data = GlobalProviders.data.getRtsGeoJson(); await controller.addSource(rtsSourceId, GeojsonSourceProperties(data: data)); @@ -194,8 +192,6 @@ class MonitorMapLayerManager extends MapLayerManager { if (!context.mounted) return; - // 按顺序从下到上添加图层 - // 1. RTS 图层(最底层) if (!isRtsLayerExists) { final properties = CircleLayerProperties( circleColor: kRtsCircleColor, @@ -318,7 +314,6 @@ class MonitorMapLayerManager extends MapLayerManager { TalkerManager.instance.info('Added Layer "$rtsLayerId-label"'); } - // 2. Intensity0 图层 if (!isIntensity0LayerExists) { final properties = CircleLayerProperties( circleColor: Colors.grey.toHexStringRGB(), @@ -358,20 +353,11 @@ class MonitorMapLayerManager extends MapLayerManager { TalkerManager.instance.info('Added Layer "$intensity0LayerId"'); } - // 3. Intensity 图层 if (!isIntensityLayerExists) { const properties = SymbolLayerProperties( symbolSortKey: [Expressions.get, 'intensity'], symbolZOrder: 'source', - iconSize: [ - Expressions.interpolate, - ['linear'], - [Expressions.zoom], - 5, - 0.2, - 10, - 0.8, - ], + iconSize: kSymbolIconSize, iconImage: [ Expressions.match, [Expressions.get, 'intensity'], @@ -409,9 +395,8 @@ class MonitorMapLayerManager extends MapLayerManager { TalkerManager.instance.info('Added Layer "$intensityLayerId"'); } - // 4. Box 图层 if (!isBoxLayerExists) { - final properties = LineLayerProperties( + const properties = LineLayerProperties( lineWidth: 2, lineColor: [ Expressions.match, @@ -443,14 +428,13 @@ class MonitorMapLayerManager extends MapLayerManager { TalkerManager.instance.info('Added Layer "$boxLayerId"'); } - // 5. EEW 图层(P波、S波、震央标记) if (!isEewLayerExists) { - // 5.1 P波圈 final pWaveProperties = LineLayerProperties( lineColor: Colors.cyan.toHexStringRGB(), lineWidth: 2, visibility: visible ? 'visible' : 'none', ); + await controller.addLayer( eewSourceId, pWaveLayerId, @@ -465,12 +449,12 @@ class MonitorMapLayerManager extends MapLayerManager { ); TalkerManager.instance.info('Added Layer "$pWaveLayerId"'); - // 5.2 S波圈 final sWaveProperties = LineLayerProperties( lineColor: Colors.red.toHexStringRGB(), lineWidth: 2, visibility: visible ? 'visible' : 'none', ); + await controller.addLayer( eewSourceId, sWaveLayerId, @@ -485,7 +469,6 @@ class MonitorMapLayerManager extends MapLayerManager { ); TalkerManager.instance.info('Added Layer "$sWaveLayerId"'); - // 5.3 震央标记(最顶层) final epicenterProperties = SymbolLayerProperties( iconImage: 'cross-7', iconSize: kSymbolIconSize, @@ -494,6 +477,7 @@ class MonitorMapLayerManager extends MapLayerManager { symbolZOrder: 'source', visibility: visible ? 'visible' : 'none', ); + await controller.addLayer( eewSourceId, epicenterLayerId, @@ -864,7 +848,7 @@ class _MonitorMapLayerSheetState extends State { ), ), Text( - '#${data.serial} ${data.info.time.toSimpleDateTimeString(context)} ${data.info.location}', + '#${data.serial} ${data.info.time.toSimpleDateTimeString()} ${data.info.location}', style: context.textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, @@ -942,7 +926,7 @@ class _MonitorMapLayerSheetState extends State { '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。' .i18n .args({ - 'time': data.info.time.toSimpleDateTimeString(context), + 'time': data.info.time.toSimpleDateTimeString(), 'location': data.info.location, 'magnitude': data.info.magnitude.toStringAsFixed(1), 'depth': data.info.depth.toStringAsFixed(1), @@ -1023,7 +1007,7 @@ class _MonitorMapLayerSheetState extends State { ), ), Text( - '#${data.serial} ${data.info.time.toSimpleDateTimeString(context)} ${data.info.location}', + '#${data.serial} ${data.info.time.toSimpleDateTimeString()} ${data.info.location}', style: context.textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, @@ -1116,7 +1100,7 @@ class _MonitorMapLayerSheetState extends State { '{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。' .i18n .args({ - 'time': data.info.time.toSimpleDateTimeString(context), + 'time': data.info.time.toSimpleDateTimeString(), 'location': data.info.location, 'magnitude': data.info.magnitude.toStringAsFixed(1), 'intensity': localIntensity.asIntensityLabel, diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index 8a5b8f963..cbf3af2b4 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -337,7 +337,7 @@ class PrecipitationMapLayerSheet extends StatelessWidget { selector: (context, model) => model.precipitation, builder: (context, precipitation, header) { final times = precipitation.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); + final t = time.toSimpleDateTimeString().split(' '); return (date: t[0], time: t[1], value: time); }); final grouped = times.groupListsBy((time) => time.date).entries.toList(); diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index 60c86a6c0..f82ab2712 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:ui'; import 'package:flutter/material.dart'; @@ -9,6 +8,7 @@ import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:provider/provider.dart'; import 'package:dpip/api/exptech.dart'; +import 'package:dpip/api/route.dart'; import 'package:dpip/app/map/_lib/manager.dart'; import 'package:dpip/app/map/_lib/utils.dart'; import 'package:dpip/app/map/_widgets/map_legend.dart'; @@ -153,10 +153,7 @@ class RadarMapLayerManager extends MapLayerManager { final isLayerExists = (await controller.getLayerIds()).contains(layerId); if (!isSourceExists) { - final properties = RasterSourceProperties( - tiles: ['https://api-1.exptech.dev/api/v1/tiles/radar/$time/{z}/{x}/{y}.png'], - tileSize: 256, - ); + final properties = RasterSourceProperties(tiles: [Routes.radarTile(time)], tileSize: 256); await controller.addSource(sourceId, properties); } @@ -474,7 +471,7 @@ class RadarMapLayerSheet extends StatelessWidget { selector: (context, model) => model.radar, builder: (context, radar, child) { final times = radar.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); + final t = time.toSimpleDateTimeString().split(' '); return (date: t[0], time: t[1], value: time); }); final grouped = times.groupListsBy((time) => time.date).entries.toList(); @@ -510,7 +507,7 @@ class RadarMapLayerSheet extends StatelessWidget { if (currentTime == null) return const SizedBox.shrink(); try { - final timeFormatted = currentTime.toSimpleDateTimeString(context); + final timeFormatted = currentTime.toSimpleDateTimeString(); final timeData = timeFormatted.split(' '); final date = timeData.length > 1 ? timeData[0] : ''; final time = timeData.length > 1 ? timeData[1] : timeData[0]; diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index 7d97967d3..423dbe952 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -294,7 +294,7 @@ class TemperatureMapLayerSheet extends StatelessWidget { selector: (context, model) => model.temperature, builder: (context, temperature, header) { final times = temperature.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); + final t = time.toSimpleDateTimeString().split(' '); return (date: t[0], time: t[1], value: time); }); final grouped = times.groupListsBy((time) => time.date).entries.toList(); diff --git a/lib/app/map/_lib/managers/tsunami.dart b/lib/app/map/_lib/managers/tsunami.dart index ed006ce4d..c0b4154b4 100644 --- a/lib/app/map/_lib/managers/tsunami.dart +++ b/lib/app/map/_lib/managers/tsunami.dart @@ -142,7 +142,7 @@ class _TsunamiMapLayerSheetState extends State { } if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; userLon = Global.preference.getDouble('user-lon') ?? 0.0; diff --git a/lib/app/map/_lib/managers/wind.dart b/lib/app/map/_lib/managers/wind.dart index 11160b327..eb11ddc9d 100644 --- a/lib/app/map/_lib/managers/wind.dart +++ b/lib/app/map/_lib/managers/wind.dart @@ -247,7 +247,7 @@ class WindMapLayerSheet extends StatelessWidget { selector: (context, model) => model.wind, builder: (context, wind, child) { final times = wind.map((time) { - final t = time.toSimpleDateTimeString(context).split(' '); + final t = time.toSimpleDateTimeString().split(' '); return (date: t[0], time: t[1], value: time); }); final grouped = times.groupListsBy((time) => time.date).entries.toList(); diff --git a/lib/app/map/page.dart b/lib/app/map/page.dart index 0c536b632..1637bdc2d 100644 --- a/lib/app/map/page.dart +++ b/lib/app/map/page.dart @@ -248,6 +248,14 @@ class _MapPageState extends State with TickerProviderStateMixin { void onMapCreated(MapLibreMapController controller) { setState(() => _controller = controller); + } + + void onStyleLoaded() { + final controller = _controller; + + for (final manager in _managers.values) { + manager.dispose(); + } _managers[MapLayer.monitor] = MonitorMapLayerManager(context, controller); _managers[MapLayer.report] = ReportMapLayerManager(context, controller, initialReportId: widget.options?.reportId); @@ -277,7 +285,7 @@ class _MapPageState extends State with TickerProviderStateMixin { return Scaffold( body: Stack( children: [ - DpipMap(baseMapType: _baseMapType, onMapCreated: onMapCreated), + DpipMap(baseMapType: _baseMapType, onMapCreated: onMapCreated, onStyleLoadedCallback: onStyleLoaded), PositionedLayerButton( activeLayers: _activeLayers, currentBaseMap: _baseMapType, diff --git a/lib/app_old/dpip.dart b/lib/app_old/dpip.dart index 6e1335b89..8d6f589de 100644 --- a/lib/app_old/dpip.dart +++ b/lib/app_old/dpip.dart @@ -6,7 +6,6 @@ import 'package:dpip/app_old/page/me/me.dart'; import 'package:dpip/app_old/page/more/more.dart'; import 'package:dpip/core/fcm.dart'; import 'package:dpip/core/notify.dart'; -import 'package:dpip/core/service.dart'; import 'package:dpip/dialog/welcome/announcement.dart'; import 'package:dpip/dialog/welcome/changelog.dart'; import 'package:dpip/global.dart'; @@ -168,7 +167,6 @@ class _DpipState extends State { void _initializeServices() { fcmInit(); notifyInit(); - initBackgroundService(); } @override diff --git a/lib/app_old/page/map/lightning/lightning.dart b/lib/app_old/page/map/lightning/lightning.dart index a126ff0c6..6bd18a9b9 100644 --- a/lib/app_old/page/map/lightning/lightning.dart +++ b/lib/app_old/page/map/lightning/lightning.dart @@ -49,7 +49,7 @@ class _LightningMapState extends State { Future _loadMap() async { if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; diff --git a/lib/app_old/page/map/radar/radar.dart b/lib/app_old/page/map/radar/radar.dart index 63df24c5c..6d7a73db2 100644 --- a/lib/app_old/page/map/radar/radar.dart +++ b/lib/app_old/page/map/radar/radar.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:dpip/api/exptech.dart'; +import 'package:dpip/api/route.dart'; import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/utils/extensions/build_context.dart'; @@ -48,10 +49,6 @@ class _RadarMapState extends State { bool isUserLocationValid = false; bool _showLegend = false; - String getTileUrl(String timestamp) { - return 'https://api-1.exptech.dev/api/v1/tiles/radar/$timestamp/{z}/{x}/{y}.png'; - } - @override void initState() { super.initState(); @@ -105,7 +102,7 @@ class _RadarMapState extends State { radar_list = await ExpTech().getRadarList(); if (!mounted) return; - final String newTileUrl = getTileUrl(radar_list.last); + final String newTileUrl = Routes.radarTile(radar_list.last); _mapController.addSource('radarSource', RasterSourceProperties(tiles: [newTileUrl], tileSize: 256)); @@ -130,7 +127,7 @@ class _RadarMapState extends State { _mapController.addLayer('radarSource', 'radarLayer', const RasterLayerProperties(), belowLayerId: 'county-outline'); if (Platform.isIOS && GlobalProviders.location.auto) { - await getSavedLocation(); + await updateSavedLocationIOS(); } await _mapController.addSource( @@ -231,7 +228,7 @@ class _RadarMapState extends State { setState(() {}); }, onTimeSelected: (time) { - final String newTileUrl = getTileUrl(time); + final String newTileUrl = Routes.radarTile(time); _mapController.removeLayer('radarLayer'); _mapController.removeSource('radarSource'); diff --git a/lib/app_old/page/map/tsunami/tsunami.dart b/lib/app_old/page/map/tsunami/tsunami.dart index e90d87692..732eee1fe 100644 --- a/lib/app_old/page/map/tsunami/tsunami.dart +++ b/lib/app_old/page/map/tsunami/tsunami.dart @@ -55,7 +55,7 @@ class _TsunamiMapState extends State { } if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; userLon = Global.preference.getDouble('user-lon') ?? 0.0; diff --git a/lib/app_old/page/map/typhoon/typhoon.dart b/lib/app_old/page/map/typhoon/typhoon.dart index 2c4973654..377ebaf67 100644 --- a/lib/app_old/page/map/typhoon/typhoon.dart +++ b/lib/app_old/page/map/typhoon/typhoon.dart @@ -40,7 +40,7 @@ class _TyphoonMapState extends State { typhoonData = await ExpTech().getTyphoonGeojson(); if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; userLon = Global.preference.getDouble('user-lon') ?? 0.0; diff --git a/lib/app_old/page/map/weather/humidity.dart b/lib/app_old/page/map/weather/humidity.dart index a3094c25f..4537c2d6c 100644 --- a/lib/app_old/page/map/weather/humidity.dart +++ b/lib/app_old/page/map/weather/humidity.dart @@ -58,7 +58,7 @@ class _HumidityMapState extends State { Future _loadMap() async { if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; userLon = Global.preference.getDouble('user-lon') ?? 0.0; diff --git a/lib/app_old/page/map/weather/pressure.dart b/lib/app_old/page/map/weather/pressure.dart index fb37f9d49..26b968535 100644 --- a/lib/app_old/page/map/weather/pressure.dart +++ b/lib/app_old/page/map/weather/pressure.dart @@ -58,7 +58,7 @@ class _PressureMapState extends State { Future _loadMap() async { if (Platform.isIOS && (Global.preference.getBool('auto-location') ?? false)) { - await getSavedLocation(); + await updateSavedLocationIOS(); } userLat = Global.preference.getDouble('user-lat') ?? 0.0; userLon = Global.preference.getDouble('user-lon') ?? 0.0; diff --git a/lib/core/ios_get_location.dart b/lib/core/ios_get_location.dart index e19b83c32..da1e78a25 100644 --- a/lib/core/ios_get_location.dart +++ b/lib/core/ios_get_location.dart @@ -11,12 +11,12 @@ import 'package:dpip/utils/map_utils.dart'; const _channel = MethodChannel('com.exptech.dpip/data'); Completer? _completer; -Future getSavedLocation() async { - if (_completer != null && !_completer!.isCompleted) { - return _completer!.future; - } +Future updateSavedLocationIOS() async { + final completer = _completer; + + if (completer != null && !completer.isCompleted) return completer.future; - _completer = Completer(); + _completer = Completer(); try { final result = await _channel.invokeMethod>('getSavedLocation'); @@ -38,6 +38,5 @@ Future getSavedLocation() async { TalkerManager.instance.error('Error in getSavedLocation', e, s); } finally { _completer?.complete(); - _completer = null; } } diff --git a/lib/route/event_viewer/intensity.dart b/lib/route/event_viewer/intensity.dart index 7abe1ddc9..7bd09e038 100644 --- a/lib/route/event_viewer/intensity.dart +++ b/lib/route/event_viewer/intensity.dart @@ -59,7 +59,7 @@ class _IntensityPageState extends State { radarList = await ExpTech().getRadarList(); if (Platform.isIOS && GlobalProviders.location.auto) { - await getSavedLocation(); + await updateSavedLocationIOS(); } await _mapController.addSource( diff --git a/lib/route/event_viewer/thunderstorm.dart b/lib/route/event_viewer/thunderstorm.dart index 1983a1585..65aefb3a1 100644 --- a/lib/route/event_viewer/thunderstorm.dart +++ b/lib/route/event_viewer/thunderstorm.dart @@ -12,6 +12,7 @@ import 'package:timezone/timezone.dart'; import 'package:dpip/api/exptech.dart'; import 'package:dpip/api/model/history/history.dart'; +import 'package:dpip/api/route.dart'; import 'package:dpip/app/map/_widgets/map_legend.dart'; import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; @@ -52,10 +53,6 @@ class _ThunderstormPageState extends State { super.dispose(); } - String getTileUrl(String timestamp) { - return 'https://api-1.exptech.dev/api/v1/tiles/radar/$timestamp/{z}/{x}/{y}.png'; - } - void _initMap(MapLibreMapController controller) { _mapController = controller; } @@ -63,7 +60,7 @@ class _ThunderstormPageState extends State { Future _loadMap() async { radarList = await ExpTech().getRadarList(); - final String newTileUrl = getTileUrl(radarList.last); + final String newTileUrl = Routes.radarTile(radarList.last); await _mapController.addSource('radarSource', RasterSourceProperties(tiles: [newTileUrl], tileSize: 256)); @@ -98,7 +95,7 @@ class _ThunderstormPageState extends State { ); if (Platform.isIOS && GlobalProviders.location.auto) { - await getSavedLocation(); + await updateSavedLocationIOS(); } await _mapController.addSource( diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 5fd3d6569..71c3ef33e 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -15,9 +15,9 @@ const kSymbolIconSize = [ ['linear'], [Expressions.zoom], 5, - 0.1, + 0.2, 15, - 1, + 0.6, ]; const kCircleIconSize = [ diff --git a/lib/utils/extensions/int.dart b/lib/utils/extensions/int.dart index 362c7b055..9e3956d70 100644 --- a/lib/utils/extensions/int.dart +++ b/lib/utils/extensions/int.dart @@ -25,7 +25,7 @@ extension CommonContext on int { TZDateTime get asTZDateTime => parseDateTime(this); int get asFahrenheit => (this * 9 / 5 + 32).round(); - String toSimpleDateTimeString(BuildContext context) => asTZDateTime.toSimpleDateTimeString(); + String toSimpleDateTimeString() => asTZDateTime.toSimpleDateTimeString(); String toLocaleFullDateString(BuildContext context) => asTZDateTime.toLocaleFullDateString(context); String toLocaleDateTimeString(BuildContext context) => asTZDateTime.toLocaleDateTimeString(context); String toLocaleTimeString(BuildContext context) => asTZDateTime.toLocaleTimeString(context); diff --git a/lib/utils/extensions/latlng.dart b/lib/utils/extensions/latlng.dart index d6565e383..1dcefdd97 100644 --- a/lib/utils/extensions/latlng.dart +++ b/lib/utils/extensions/latlng.dart @@ -8,10 +8,18 @@ extension GeoJsonLatLng on LatLng { List get asGeoJsonCooridnate => [longitude, latitude]; - GeoJsonFeatureBuilder toFeatureBuilder() { + GeoJsonFeatureBuilder toGeoJsonFeatureBuilder() { return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(asGeoJsonCooridnate); } + GeoJsonBuilder toGeoJsonBuilder() { + return GeoJsonBuilder()..addFeature(toGeoJsonFeatureBuilder()); + } + + Map toGeoJsonMap() { + return toGeoJsonBuilder().build(); + } + /// Calculates the distance between the supplied coordinates in meters. The distance between the coordinates is /// calculated using the Haversine formula (see https://en.wikipedia.org/wiki/Haversine_formula). double to(LatLng other) => Geolocator.distanceBetween(latitude, longitude, other.latitude, other.longitude); diff --git a/lib/utils/extensions/maplibre.dart b/lib/utils/extensions/maplibre.dart index f8ab01564..9492091fb 100644 --- a/lib/utils/extensions/maplibre.dart +++ b/lib/utils/extensions/maplibre.dart @@ -31,4 +31,32 @@ extension MapLibreMapControllerExtension on MapLibreMapController { await Future.wait(exptechLayers.map((v) => setLayerVisibility(v, visible))); } + + /// Checks if the provided [id] exists in the map as a source or layer. + /// + /// By default, checks both sources and layers. Use [source] and [layer] + /// parameters to limit the search scope: + /// - If [source] is `true`, only sources will be checked + /// - If [layer] is `true`, only layers will be checked + /// - If both are `true`, both sources and layers will be checked + /// + /// Returns `true` if the [id] exists in any of the checked categories, otherwise, returns `false`. + Future exists(String id, {bool? source, bool? layer}) async { + final shouldCheckBoth = source == null && layer == null; + + final checkSource = shouldCheckBoth || (source ?? false); + final checkLayer = shouldCheckBoth || (layer ?? false); + + if (checkSource) { + final sourceIds = await getSourceIds(); + if (sourceIds.contains(id)) return true; + } + + if (checkLayer) { + final layerIds = await getLayerIds(); + if (layerIds.contains(id)) return true; + } + + return false; + } } diff --git a/lib/utils/extensions/state.dart b/lib/utils/extensions/state.dart new file mode 100644 index 000000000..a22df27d3 --- /dev/null +++ b/lib/utils/extensions/state.dart @@ -0,0 +1,7 @@ +import 'package:flutter/material.dart'; + +extension StateExtension on State { + @protected + // ignore: invalid_use_of_protected_member + void rebuild([void Function()? fn]) => setState(fn ?? () {}); +} diff --git a/lib/utils/extensions/string.dart b/lib/utils/extensions/string.dart index a0505f473..ac305ff6e 100644 --- a/lib/utils/extensions/string.dart +++ b/lib/utils/extensions/string.dart @@ -15,7 +15,7 @@ extension StringExtension on String { String toLocaleFullDateString(BuildContext context) => asInt.asTZDateTime.toLocaleFullDateString(context); String toLocaleTimeString(BuildContext context) => asInt.asTZDateTime.toLocaleTimeString(context); - String toSimpleDateTimeString(BuildContext context) => asInt.asTZDateTime.toSimpleDateTimeString(); + String toSimpleDateTimeString() => asInt.asTZDateTime.toSimpleDateTimeString(); Text get asText => Text(this); TextSpan get asTextSpan => TextSpan(text: this); diff --git a/lib/utils/map_utils.dart b/lib/utils/map_utils.dart index 0df0da4dd..4578aa129 100644 --- a/lib/utils/map_utils.dart +++ b/lib/utils/map_utils.dart @@ -48,8 +48,6 @@ enum Units { degrees, } -const emptyGeoJson = {'type': 'FeatureCollection', 'features': []}; - /// Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth. /// /// @memberof helpers diff --git a/lib/widgets/layout.dart b/lib/widgets/layout.dart index c699b7484..0a00a8e76 100644 --- a/lib/widgets/layout.dart +++ b/lib/widgets/layout.dart @@ -161,7 +161,7 @@ class _HorizontalLayout { ); } - Widget call({Key? key, required List children, EdgeInsets? padding}) { + Widget call({Key? key, Iterable children = const [], EdgeInsets? padding}) { final widget = Row( key: key, mainAxisAlignment: mainAxisAlignment, @@ -171,7 +171,7 @@ class _HorizontalLayout { verticalDirection: verticalDirection, textBaseline: textBaseline, spacing: spacing, - children: children, + children: children is List ? children : children.toList(), ); if (padding != null) { @@ -183,6 +183,9 @@ class _HorizontalLayout { _HorizontalLayout get left => copyWith(mainAxisAlignment: MainAxisAlignment.start); _HorizontalLayout get right => copyWith(mainAxisAlignment: MainAxisAlignment.end); + _HorizontalLayout get between => copyWith(mainAxisAlignment: MainAxisAlignment.spaceBetween); + _HorizontalLayout get around => copyWith(mainAxisAlignment: MainAxisAlignment.spaceAround); + _HorizontalLayout get evenly => copyWith(mainAxisAlignment: MainAxisAlignment.spaceEvenly); _HorizontalLayout get top => copyWith(crossAxisAlignment: CrossAxisAlignment.start); _HorizontalLayout get bottom => copyWith(crossAxisAlignment: CrossAxisAlignment.end); _HorizontalLayout get center => copyWith(crossAxisAlignment: CrossAxisAlignment.center); diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index d8c7ecb8d..c403cb158 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -3,11 +3,12 @@ import 'dart:math'; import 'package:flutter/material.dart'; +import 'package:async/async.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:dpip/core/ios_get_location.dart'; import 'package:dpip/core/providers.dart'; -import 'package:dpip/utils/constants.dart'; +import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; import 'package:dpip/utils/geojson.dart'; import 'package:dpip/utils/log.dart'; @@ -65,10 +66,11 @@ class DpipMap extends StatefulWidget { /// Whether to set camera focus to user location when the user longitude or latitude is updated. /// /// Default is `false`. - final bool focusUserLocationOnValueUpdate; + final bool focusUserLocationWhenUpdated; static const kTaiwanCenter = LatLng(23.60, 120.85); static const kTaiwanZoom = 6.4; + static const kUserLocationZoom = 7.2; const DpipMap({ super.key, @@ -86,7 +88,7 @@ class DpipMap extends StatefulWidget { this.dragEnabled, this.scrollGesturesEnabled, this.tiltGesturesEnabled, - this.focusUserLocationOnValueUpdate = false, + this.focusUserLocationWhenUpdated = false, }); @override @@ -111,71 +113,30 @@ class DpipMap extends StatefulWidget { class DpipMapState extends State { MapLibreMapController? _controller; - late Future styleAbsoluteFilePath = MapStyle(context, baseMap: widget.baseMapType).save(); + Future? _stylePathFuture; Future _updateUserLocation() async { if (!mounted) return; - try { - final controller = _controller; - if (controller == null) return; + final controller = _controller; + if (controller == null) return; + try { if (Platform.isIOS && GlobalProviders.location.auto) { - await getSavedLocation(); + await updateSavedLocationIOS(); } final location = GlobalProviders.location.coordinates; - const sourceId = BaseMapSourceIds.userLocation; - const layerId = BaseMapLayerIds.userLocation; - - final isSourceExists = (await controller.getSourceIds()).contains(sourceId); - final isLayerExists = (await controller.getLayerIds()).contains(layerId); - - if (location == null || !location.isValid) { - if (isLayerExists) { - await controller.removeLayer(layerId); - TalkerManager.instance.info('Removed Layer "$layerId"'); - } - - if (isSourceExists) { - await controller.removeSource(sourceId); - TalkerManager.instance.info('Removed Source "$sourceId"'); - } - - await controller.moveCamera(CameraUpdate.newLatLngZoom(DpipMap.kTaiwanCenter, 6.2)); - TalkerManager.instance.info('Moved Camera to ${DpipMap.kTaiwanCenter}'); - return; - } + final data = location?.toGeoJsonMap() ?? GeoJsonBuilder.empty; - if (!isSourceExists) { - await controller.addSource( - sourceId, - GeojsonSourceProperties(data: GeoJsonBuilder().addFeature(location.toFeatureBuilder()).build()), - ); - } else { - await controller.setGeoJsonSource(sourceId, GeoJsonBuilder().addFeature(location.toFeatureBuilder()).build()); - TalkerManager.instance.info('Updated Source "$sourceId"'); - } + await controller.setGeoJsonSource(BaseMapSourceIds.userLocation, data); - if (!isLayerExists) { - await controller.addLayer( - sourceId, - layerId, - const SymbolLayerProperties( - symbolZOrder: 'source', - iconImage: 'gps', - iconSize: kSymbolIconSize, - iconAllowOverlap: true, - iconIgnorePlacement: true, - ), - ); + if (widget.focusUserLocationWhenUpdated) { + await controller.moveCamera(CameraUpdate.newLatLngZoom(location!, DpipMap.kUserLocationZoom)); } - - await controller.moveCamera(CameraUpdate.newLatLngZoom(location, 7)); - TalkerManager.instance.info('Moved Camera to $location'); } catch (e, s) { - TalkerManager.instance.error('DpipMap._updateUserLocation', e, s); + TalkerManager.instance.error('🗺️ failed to update user location', e, s); } } @@ -192,12 +153,52 @@ class DpipMapState extends State { GlobalProviders.location.$coordinates.addListener(_updateUserLocation); } + ColorScheme? _lastColors; + CancelableOperation? _setThemeColorFuture; + Future setThemeColors(ColorScheme colors) async { + final controller = _controller; + if (controller == null) return; + + final layers = [...MapStyle.osmLayers(colors), ...MapStyle.exptechLayers(colors)]; + + for (final layer in layers) { + if (layer['type'] == 'background') continue; + + final json = layer['paint'] as Map; + json.remove('visibility'); + + final properties = switch (layer['type']) { + 'fill' => FillLayerProperties.fromJson(json), + 'line' => LineLayerProperties.fromJson(json), + 'symbol' => SymbolLayerProperties.fromJson(json), + 'raster' => RasterLayerProperties.fromJson(json), + _ => null, + }; + + await controller.setLayerProperties(layer['id'] as String, properties!); + } + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + if (_stylePathFuture == null) { + _stylePathFuture = MapStyle(context, baseMap: widget.baseMapType).save(); + } else if (_lastColors != context.colors) { + _setThemeColorFuture?.cancel(); + _setThemeColorFuture = CancelableOperation.fromFuture(setThemeColors(context.colors)); + } + + _lastColors = context.colors; + } + @override Widget build(BuildContext context) { final double adjustedZoomValue = DpipMap.adjustedZoom(context, widget.initialCameraPosition.zoom); return FutureBuilder( - future: styleAbsoluteFilePath, + future: _stylePathFuture, builder: (context, snapshot) { final styleString = snapshot.data; @@ -205,29 +206,33 @@ class DpipMapState extends State { return const Center(child: CircularProgressIndicator()); } - return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5), - trackCameraPosition: true, - initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), - styleString: styleString, - tiltGesturesEnabled: widget.tiltGesturesEnabled ?? false, - scrollGesturesEnabled: widget.scrollGesturesEnabled ?? true, - rotateGesturesEnabled: widget.rotateGesturesEnabled ?? false, - zoomGesturesEnabled: widget.zoomGesturesEnabled ?? true, - doubleClickZoomEnabled: widget.doubleClickZoomEnabled ?? true, - dragEnabled: widget.dragEnabled ?? true, - attributionButtonMargins: const Point(-100, -100), - onMapCreated: (controller) { - _controller = controller; - widget.onMapCreated?.call(controller); - }, - onMapClick: widget.onMapClick, - onMapIdle: widget.onMapIdle, - onMapLongClick: widget.onMapLongClick, - onStyleLoadedCallback: () { - _initMap(); - widget.onStyleLoadedCallback?.call(); - }, + return ColoredBox( + color: context.colors.surface, + child: MapLibreMap( + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5), + trackCameraPosition: true, + initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), + styleString: styleString, + tiltGesturesEnabled: widget.tiltGesturesEnabled ?? false, + scrollGesturesEnabled: widget.scrollGesturesEnabled ?? true, + rotateGesturesEnabled: widget.rotateGesturesEnabled ?? false, + zoomGesturesEnabled: widget.zoomGesturesEnabled ?? true, + doubleClickZoomEnabled: widget.doubleClickZoomEnabled ?? true, + dragEnabled: widget.dragEnabled ?? true, + attributionButtonMargins: const Point(-100, -100), + onMapCreated: (controller) { + _controller = controller; + widget.onMapCreated?.call(controller); + }, + onMapClick: widget.onMapClick, + onMapIdle: widget.onMapIdle, + onMapLongClick: widget.onMapLongClick, + onStyleLoadedCallback: () { + _initMap(); + widget.onStyleLoadedCallback?.call(); + }, + translucentTextureSurface: true, + ), ); }, ); diff --git a/lib/widgets/map/style.dart b/lib/widgets/map/style.dart index 9fabfd240..287932efb 100644 --- a/lib/widgets/map/style.dart +++ b/lib/widgets/map/style.dart @@ -7,8 +7,10 @@ import 'package:crypto/crypto.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:dpip/utils/constants.dart'; import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/extensions/latlng.dart'; +import 'package:dpip/utils/geojson.dart'; import 'package:dpip/widgets/map/map.dart'; class MapStyle { @@ -28,12 +30,13 @@ class MapStyle { }, 'glyphs': 'https://cdn.jsdelivr.net/gh/exptechtw/map-assets/{fontstack}/{range}.pbf', 'sprite': 'https://cdn.jsdelivr.net/gh/exptechtw/map-assets/sprites', - 'sources': {...osmSource(), ...googleSource(), ...exptechSource()}, + 'sources': {...osmSource(), ...googleSource(), ...exptechSource(), ...locationSource()}, 'layers': [ - background(context.colors), + background(), ...osmLayers(context.colors, visible: baseMap == BaseMapType.osm), ...googleLayers(visible: baseMap == BaseMapType.google), ...exptechLayers(context.colors, visible: baseMap == BaseMapType.exptech), + locationLayer(), ], }; } @@ -64,20 +67,14 @@ class MapStyle { 'openmaptiles': {'type': 'vector', 'url': 'https://tiles.openfreemap.org/planet', 'volatile': true}, }; - static Map background(ColorScheme colors) => { + static Map background() => { 'id': 'background', 'type': 'background', + 'paint': {'background-opacity': 0}, 'layout': {'visibility': 'visible'}, - 'paint': {'background-color': colors.surface.toHexStringRGB()}, }; static List> osmLayers(ColorScheme colors, {bool visible = false}) => [ - { - 'id': 'osm-background', - 'type': 'background', - 'layout': {'visibility': visible ? 'visible' : 'none'}, - 'paint': {'background-color': colors.surfaceContainerHigh.toHexStringRGB()}, - }, { 'id': 'osm-landcover-glacier', 'type': 'fill', @@ -461,7 +458,10 @@ class MapStyle { 'tunnel', ], ], - 'paint': {'fill-color': colors.brightness == Brightness.dark ? colors.surface.toHexStringRGB() : '#AECFE2'}, + 'paint': { + 'fill-color': colors.brightness == Brightness.dark ? colors.surfaceContainer.toHexStringRGB() : '#AECFE2', + 'fill-outline-color': colors.brightness == Brightness.dark ? colors.outline.toHexStringRGB() : '#AECFE2', + }, 'layout': {'visibility': visible ? 'visible' : 'none'}, }, { @@ -1120,4 +1120,20 @@ class MapStyle { 'layout': {'visibility': visible ? 'visible' : 'none'}, }, ]; + + static Map locationSource() => { + 'user-location': {'type': 'geojson', 'data': GeoJsonBuilder.empty}, + }; + + static Map locationLayer() => { + 'id': 'user-location', + 'type': 'symbol', + 'source': 'user-location', + 'layout': { + 'icon-image': 'gps', + 'icon-size': kSymbolIconSize, + 'icon-allow-overlap': true, + 'icon-ignore-placement': true, + }, + }; } diff --git a/pubspec.lock b/pubspec.lock index 762629257..f7ee0821e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -50,7 +50,7 @@ packages: source: hosted version: "2.7.0" async: - dependency: transitive + dependency: "direct main" description: name: async sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" @@ -853,10 +853,11 @@ packages: maplibre_gl: dependency: "direct main" description: - name: maplibre_gl - sha256: "5c7b1008396b2a321bada7d986ed60f9423406fbc7bd16f7ce91b385dfa054cd" - url: "https://pub.dev" - source: hosted + path: maplibre_gl + ref: main + resolved-ref: "4876f98336cb811f4722652629d0271ffffcab5f" + url: "https://github.com/maplibre/flutter-maplibre-gl.git" + source: git version: "0.22.0" maplibre_gl_platform_interface: dependency: transitive diff --git a/pubspec.yaml b/pubspec.yaml index a23675aba..7b0f30137 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -47,7 +47,11 @@ dependencies: in_app_update: 4.2.3 intl: any json_annotation: 4.9.0 - maplibre_gl: 0.22.0 + maplibre_gl: + git: + url: https://github.com/maplibre/flutter-maplibre-gl.git + path: maplibre_gl + ref: main material_symbols_icons: ^4.2815.0 package_info_plus: ^8.3.0 path_provider: ^2.1.5 @@ -65,6 +69,7 @@ dependencies: flutter_icmp_ping: ^3.1.3 geojson_vi: ^2.2.5 crypto: ^3.0.6 + async: ^2.13.0 dependency_overrides: intl: 0.19.0 From 0a354696299e65ec066fba5aa2557f8f3103b030 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Mon, 11 Aug 2025 15:12:35 +0800 Subject: [PATCH 19/59] New Crowdin updates (#342) * New translations strings.pot (English) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (English) * New translations strings.pot (English) * New translations strings.pot (English) * New translations strings.pot (English) * New translations strings.pot (Japanese) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Korean) * New translations strings.pot (Korean) * New translations strings.pot (Korean) * New translations strings.pot (Korean) * New translations strings.pot (Korean) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (English) --------- Co-authored-by: YuYu1015 <44525760+whes1015@users.noreply.github.com> --- assets/translations/en.po | 210 +++++++------- assets/translations/ja.po | 6 +- assets/translations/ko.po | 483 +++++++++++++++++---------------- assets/translations/zh-Hans.po | 105 +++---- 4 files changed, 405 insertions(+), 399 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index 75213b79a..259722a56 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: English\n" "Language: en_US\n" -"PO-Revision-Date: 2025-07-23 03:45\n" +"PO-Revision-Date: 2025-08-11 02:40\n" #: ./lib/app/settings/location/page.dart:555 msgid "所在地" @@ -42,15 +42,15 @@ msgstr "Earthquake Early Warning" #: ./lib/app/map/_lib/managers/monitor.dart:706 msgid "強震監視器" -msgstr "Monitor" +msgstr "Strong Earthquake Monitor" #: ./lib/app/map/_lib/managers/report.dart:814 msgid "地震報告" -msgstr "Reports" +msgstr "Earthquake Reports" #: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" -msgstr "Intensity Report" +msgstr "Earthquake Intensity Report" #: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" @@ -62,11 +62,11 @@ msgstr "Weather Advisory" #: ./lib/app/settings/notify/page.dart:236 msgid "避難資訊" -msgstr "Evacuation" +msgstr "Evacuation information" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 msgid "海嘯資訊" -msgstr "Tsunami" +msgstr "Tsunami information" #: ./lib/route/announcement/announcement.dart:82 msgid "公告" @@ -98,7 +98,7 @@ msgstr "Intensity 1 or higher at current location" #: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" -msgstr "Tsunami information and tsunami warning" +msgstr "Tsunami information, Tsunami warning" #: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" @@ -176,7 +176,7 @@ msgstr "When the Pacific information is issued" #: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" -msgstr "Monitor(General)" +msgstr "Strong Earthquake Monitor(General)" #: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" @@ -188,7 +188,7 @@ msgstr "Intensity Report" #: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" -msgstr "Local (City/Town/District) measured intensity is greater than 3." +msgstr "Local (City/Town/District) measured intensity is greater than 3" #: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" @@ -196,15 +196,15 @@ msgstr "Intensity Report (Silent)" #: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" -msgstr "Local (City/Town/District) measured intensity is greater than 1." +msgstr "Local (City/Town/District) measured intensity is greater than 1" #: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" -msgstr "Earthquake Report" +msgstr "Earthquake Report (General)" #: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" -msgstr "Local (Municipality/County) measured intensity is greater than 3." +msgstr "Local (Municipality/County) measured intensity is greater than 3" #: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" @@ -212,7 +212,7 @@ msgstr "Earthquake Report (Silent)" #: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" -msgstr "Local (Municipality/County) measured intensity is greater than 1." +msgstr "Local (Municipality/County) measured intensity is greater than 1" #: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" @@ -220,25 +220,25 @@ msgstr "Updated notification setting" #: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" -msgstr "Notification settings updated successfully" +msgstr "Failed To Update Notification Settings" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" -msgstr "Failed to update notification settings" +msgstr "Earthquake Early Warning (Critical)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4." +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" -msgstr "Emergency Earthquake Early Warning" +msgstr "Emergency Earthquake Early Warning (General)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2." +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" @@ -247,7 +247,7 @@ msgstr "Emergency Earthquake Early Warning (Silent)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1." +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" @@ -255,15 +255,15 @@ msgstr "Earthquake Early Warning (Critical)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" -msgstr "Local (City/Town/District) estimated intensity is greater than 4." +msgstr "Local (City/Town/District) estimated intensity is greater than 4" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" -msgstr "Earthquake Early Warning" +msgstr "Earthquake Early Warning (General)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" -msgstr "Local (City/Town/District) estimated intensity is greater than 2." +msgstr "Local (City/Town/District) estimated intensity is greater than 2" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" @@ -271,7 +271,7 @@ msgstr "Earthquake Early Warning (Silent)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" -msgstr "Local (City/Town/District) estimated intensity is greater than 1." +msgstr "Local (City/Town/District) estimated intensity is greater than 1" #: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" @@ -284,17 +284,20 @@ msgstr "When the local area(township) issues an evacuating warning" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" +msgstr "The location (township) issues a red signal\n" +"Weather Warning" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" +msgstr "The location (township) where the above-mentioned exceptions are issued\n" +"Weather Warning" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" -msgstr "" +msgstr "The location (township) issues instant thunderstorm information or\n" +"Heavy rain in mountainous areas" #: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" @@ -314,7 +317,7 @@ msgstr "System Language" #: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" -msgstr "Help us translate!" +msgstr "Help us translate" #: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" @@ -351,7 +354,8 @@ msgstr "Loading store items" #: ./lib/app/settings/donate/page.dart:132 msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" "您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "" +msgstr "As an app dedicated to providing real-time earthquake information, DPIP currently has no advertising or other profit models. In order to maintain high-quality services, we need to bear the costs of server operation, seismic data acquisition and transmission, and subsequent function development and maintenance.\n\n" +"Every donation you make below will go directly toward these operating costs, helping DPIP to continue to provide you with services in a sustainable manner. Thank you for your understanding and generosity!" #: ./lib/app/settings/donate/page.dart:141 msgid "訂閱制" @@ -371,7 +375,7 @@ msgstr "Unable to connect to the {store}, please try again later." #: ./lib/app/settings/donate/page.dart:202 msgid "正在恢復您購買的訂閱" -msgstr "" +msgstr "Restoring your purchased subscription" #: ./lib/app/settings/donate/page.dart:205 msgid "恢復購買" @@ -415,7 +419,7 @@ msgstr "Adjust settings of map in DPIP" #: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" -msgstr "" +msgstr "Push notification settings and notification sound test" #: ./lib/app/settings/page.dart:94 msgid "資訊" @@ -423,7 +427,7 @@ msgstr "Information" #: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" -msgstr "" +msgstr "Get the latest announcements and news from ExpTech Studio" #: ./lib/app/changelog/page.dart:54 msgid "更新日誌" @@ -431,11 +435,11 @@ msgstr "Release Notes" #: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" -msgstr "" +msgstr "View DPIP's Previous Update Records" #: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" -msgstr "" +msgstr "Help us maintain the stability and long-term development of the server" #: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" @@ -579,7 +583,7 @@ msgstr "{serial} report" #: ./lib/app/map/_lib/managers/monitor.dart:889 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}" +msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:923 msgid "所在地預估" @@ -591,11 +595,11 @@ msgstr "The earthquake" #: ./lib/app/map/_lib/managers/monitor.dart:978 msgid " 秒" -msgstr " seconds" +msgstr " Seconds" #: ./lib/app/map/_lib/managers/monitor.dart:994 msgid "抵達" -msgstr "arrived" +msgstr "Arrived" #: ./lib/app/home/page.dart:55 msgid "已更新至 {version}" @@ -623,15 +627,15 @@ msgstr "Disaster Prevention Information Platform" #: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" -msgstr "" +msgstr "Who are we?" #: ./lib/app/welcome/2-exptech/page.dart:88 msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" +msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" -msgstr "" +msgstr "Our original intention" #: ./lib/app/welcome/2-exptech/page.dart:98 msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" @@ -639,19 +643,19 @@ msgstr "" #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" -msgstr "" +msgstr "Precautions" #: ./lib/app/welcome/3-notice/page.dart:75 msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" +msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "" +msgstr "Strong shaking has a chance of reaching the user's location before the notification." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" +msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" @@ -659,27 +663,27 @@ msgstr "" #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" -msgstr "" +msgstr "Welcome to DPIP" #: ./lib/app/welcome/1-about/page.dart:81 msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" +msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application." #: ./lib/app/welcome/4-permissions/page.dart:156 msgid "在重大災害發生時以通知來傳遞即時防災資訊" -msgstr "" +msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur" #: ./lib/app/welcome/4-permissions/page.dart:164 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" +msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information" #: ./lib/app/welcome/4-permissions/page.dart:169 msgid "省電策略" -msgstr "" +msgstr "Power saving" #: ./lib/app/welcome/4-permissions/page.dart:170 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" +msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -687,7 +691,7 @@ msgstr "Save" #: ./lib/app/welcome/4-permissions/page.dart:177 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" +msgstr "Used to store data visualization images provided by the Central Meteorological Administration or ExpTech" #: ./lib/app/welcome/4-permissions/page.dart:344 msgid "權限請求" @@ -695,7 +699,7 @@ msgstr "" #: ./lib/app/welcome/4-permissions/page.dart:345 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "" +msgstr "Users are required to manually go to settings to enable relevant permissions." #: ./lib/app/welcome/4-permissions/page.dart:385 msgid "權限" @@ -703,7 +707,7 @@ msgstr "Permissions" #: ./lib/app/welcome/4-permissions/page.dart:398 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" +msgstr "We always stand with our users and work hard for their privacy." #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 msgid "地圖圖層" @@ -735,15 +739,15 @@ msgstr "Wind/Gust" #: ./lib/app/map/_lib/managers/radar.dart:613 msgid "長按設定播放起點" -msgstr "" +msgstr "Long press to set the start point of playback" #: ./lib/app/map/_lib/managers/radar.dart:627 msgid "目前時間" -msgstr "" +msgstr "Current time" #: ./lib/app/map/_lib/managers/radar.dart:632 msgid "播放起點" -msgstr "" +msgstr "Play start" #: ./lib/app/map/_lib/managers/radar.dart:906 msgid "播放進度" @@ -755,39 +759,39 @@ msgstr "Today" #: ./lib/app/map/_lib/managers/precipitation.dart:306 msgid "10 分鐘" -msgstr "10min" +msgstr "10 min" #: ./lib/app/map/_lib/managers/precipitation.dart:307 msgid "1 小時" -msgstr "1hr" +msgstr "1 hr" #: ./lib/app/map/_lib/managers/precipitation.dart:308 msgid "3 小時" -msgstr "3hr" +msgstr "3 hr" #: ./lib/app/map/_lib/managers/precipitation.dart:309 msgid "6 小時" -msgstr "6hr" +msgstr "6 hr" #: ./lib/app/map/_lib/managers/precipitation.dart:310 msgid "12 小時" -msgstr "12hr" +msgstr "12 hr" #: ./lib/app/map/_lib/managers/precipitation.dart:311 msgid "24 小時" -msgstr "24hr" +msgstr "24 hr" #: ./lib/app/map/_lib/managers/precipitation.dart:312 msgid "2 天" -msgstr "2d" +msgstr "2 d" #: ./lib/app/map/_lib/managers/precipitation.dart:313 msgid "3 天" -msgstr "3d" +msgstr "3 d" #: ./lib/app/map/_lib/managers/monitor.dart:714 msgid "目前沒有生效中的地震速報" -msgstr "" +msgstr "There are currently no earthquake warnings in effect" #: ./lib/app/map/_lib/managers/monitor.dart:808 msgid "規模 M{magnitude},所在地預估{intensity}" @@ -795,15 +799,15 @@ msgstr "Estimated M{magnitude}, max intensity {intensity}{time} 。" -msgstr "" +msgstr "현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주의." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" -msgstr "" +msgstr "서비스 지역 외에서는 사용할 수 없으며, 대만에서만 이용 가능합니다" #: ./lib/app/map/_lib/managers/radar.dart:499 msgid "雷達回波" @@ -567,43 +568,43 @@ msgstr "레이더" #: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" -msgstr "" +msgstr "체감 온도 {apparent}" #: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" -msgstr "위치가 설정되지 않았습니다." +msgstr "현재 위치가 설정되지 않았습니다" #: ./lib/app/map/_lib/managers/monitor.dart:874 msgid "第 {serial} 報" -msgstr "" +msgstr "제 {serial} 보" #: ./lib/app/map/_lib/managers/monitor.dart:889 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "" +msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:923 msgid "所在地預估" -msgstr "" +msgstr "현재 위치 예상" #: ./lib/app/map/_lib/managers/monitor.dart:957 msgid "震波" -msgstr "" +msgstr "지진파" #: ./lib/app/map/_lib/managers/monitor.dart:978 msgid " 秒" -msgstr "" +msgstr " 초" #: ./lib/app/map/_lib/managers/monitor.dart:994 msgid "抵達" -msgstr "" +msgstr "도착" #: ./lib/app/home/page.dart:55 msgid "已更新至 {version}" -msgstr "" +msgstr "{version} 업데이트" #: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" -msgstr "" +msgstr "날씨 이상 정보 확인" #: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" @@ -619,15 +620,15 @@ msgstr "다음 단계" #: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" -msgstr "방재정보 플랫폼" +msgstr "방재 정보 플랫폼" #: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" -msgstr "저희에 관하여?" +msgstr "저희에 관하여?" #: ./lib/app/welcome/2-exptech/page.dart:88 msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio는 대부분 학생으로 구성된 팀으로, 평균 연령이 20세 이하이며, 15명 이상의 인원이 참여하고 있습니다. 멤버들은 대만 북부, 중부, 남부, 일본, 한국, 중국의 학생들로 구성되어 있습니다." +msgstr "ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 이루어져 있습니다." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" @@ -639,23 +640,23 @@ msgstr "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" -msgstr "주의사항" +msgstr "주의 사항" #: ./lib/app/welcome/3-notice/page.dart:75 msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등 여러 요인에 따라 정보를 수신되지 않을 가능성이 있으며, 이를 방지하기 위해 최선을 다하겠지만 발생하지 않을 것이라고 보장하지는 않습니다." +msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "강한 진동이 알림보다 사용자 위치에 먼저 도착할 가능성이 있습니다." +msgstr "강한 흔들림이 알림보다 먼저 사용자 위치에 도착할 가능성이 있습니다." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "지진 속보는 빠른 계산 결과로, 상당한 오차가 있을 수 있으니 이해하고 신중히 사용해 주세요." +msgstr "지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 신중하게 사용해야 합니다." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "공식적으로 인정되지 않은 모든 행위는 법적 위험을 부담할 수 있으므로 관련 규범을 준수해야 합니다." +msgstr "공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정을 반드시 준수해 주십시오." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" @@ -671,7 +672,7 @@ msgstr "중대 재해 발생 시 알림으로 즉각 재난 대비 정보를 전 #: ./lib/app/welcome/4-permissions/page.dart:164 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다." +msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다" #: ./lib/app/welcome/4-permissions/page.dart:169 msgid "省電策略" @@ -707,19 +708,19 @@ msgstr "우리는 항상 사용자와 함께하며 사용자의 프라이버시 #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 msgid "地圖圖層" -msgstr "" +msgstr "지도 레이어" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 msgid "選擇要顯示的地圖圖層" -msgstr "" +msgstr "표시 지도 레이더 선택" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "線條" -msgstr "" +msgstr "선" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 msgid "氣象" -msgstr "" +msgstr "기상" #: ./lib/app/map/_lib/managers/temperature.dart:332 msgid "氣溫" @@ -735,19 +736,19 @@ msgstr "풍향/풍속" #: ./lib/app/map/_lib/managers/radar.dart:613 msgid "長按設定播放起點" -msgstr "" +msgstr "길게 눌러 재생 시작 지점 설정" #: ./lib/app/map/_lib/managers/radar.dart:627 msgid "目前時間" -msgstr "" +msgstr "현재 시간" #: ./lib/app/map/_lib/managers/radar.dart:632 msgid "播放起點" -msgstr "" +msgstr "재생 시작 지점" #: ./lib/app/map/_lib/managers/radar.dart:906 msgid "播放進度" -msgstr "" +msgstr "재생 진행도" #: ./lib/app/map/_lib/managers/precipitation.dart:305 msgid "今日" @@ -755,91 +756,91 @@ msgstr "오늘" #: ./lib/app/map/_lib/managers/precipitation.dart:306 msgid "10 分鐘" -msgstr "10분" +msgstr "10 분" #: ./lib/app/map/_lib/managers/precipitation.dart:307 msgid "1 小時" -msgstr "1시간" +msgstr "1 시간" #: ./lib/app/map/_lib/managers/precipitation.dart:308 msgid "3 小時" -msgstr "3시간" +msgstr "3 시간" #: ./lib/app/map/_lib/managers/precipitation.dart:309 msgid "6 小時" -msgstr "6시간" +msgstr "6 시간" #: ./lib/app/map/_lib/managers/precipitation.dart:310 msgid "12 小時" -msgstr "12시간" +msgstr "12 시간" #: ./lib/app/map/_lib/managers/precipitation.dart:311 msgid "24 小時" -msgstr "24시간" +msgstr "24 시간" #: ./lib/app/map/_lib/managers/precipitation.dart:312 msgid "2 天" -msgstr "2일" +msgstr "2 일" #: ./lib/app/map/_lib/managers/precipitation.dart:313 msgid "3 天" -msgstr "3일" +msgstr "3 일" #: ./lib/app/map/_lib/managers/monitor.dart:714 msgid "目前沒有生效中的地震速報" -msgstr "" +msgstr "현재 유효 지진 속보 없음" #: ./lib/app/map/_lib/managers/monitor.dart:808 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" +msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:824 msgid "{countdown}秒後抵達" -msgstr "" +msgstr "{countdown}초 후 도착" #: ./lib/app/map/_lib/managers/monitor.dart:825 msgid "已抵達" -msgstr "" +msgstr "도착" #: ./lib/app/map/_lib/managers/report.dart:371 msgid "近期的地震報告" -msgstr "" +msgstr "최근 지진 현황" #: ./lib/app/map/_lib/managers/report.dart:376 msgid "更多" -msgstr "" +msgstr "더 보기" #: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" -msgstr "" +msgstr "번호 {number} 강한 체감 지진" #: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" -msgstr "" +msgstr "소구역 체감 지진" #: ./lib/app/map/_lib/managers/report.dart:652 msgid "地震規模" -msgstr "" +msgstr "지진 규모" #: ./lib/app/map/_lib/managers/report.dart:674 msgid "震源深度" -msgstr "" +msgstr "진원 깊이" #: ./lib/app/map/_lib/managers/report.dart:611 msgid "報告頁面" -msgstr "" +msgstr "보고 페이지" #: ./lib/app/map/_lib/managers/report.dart:635 msgid "發震時間" -msgstr "" +msgstr "지진 발생 시간" #: ./lib/app/map/_lib/managers/report.dart:642 msgid "位於" -msgstr "" +msgstr "에 위치" #: ./lib/app/map/_lib/managers/report.dart:698 msgid "各地震度" -msgstr "각지의 진도" +msgstr "각 지역 진도" #: ./lib/app/map/_lib/managers/report.dart:769 msgid "地震報告圖" @@ -859,119 +860,119 @@ msgstr "최대 지반 속도" #: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" -msgstr "" +msgstr "오류" #: ./lib/route/announcement/announcement.dart:13 msgid "已解決" -msgstr "" +msgstr "해결 완료" #: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" -msgstr "" +msgstr "영향:작음" #: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" -msgstr "" +msgstr "영향:보통" #: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" -msgstr "" +msgstr "영향:큼" #: ./lib/route/announcement/announcement.dart:18 msgid "維修" -msgstr "" +msgstr "유지 보수" #: ./lib/route/announcement/announcement.dart:19 msgid "測試" -msgstr "" +msgstr "테스트" #: ./lib/route/announcement/announcement.dart:20 msgid "變更" -msgstr "" +msgstr "변경" #: ./lib/route/announcement/announcement.dart:21 msgid "完成" -msgstr "" +msgstr "완성" #: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" -msgstr "" +msgstr "지진 관련" #: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" -msgstr "" +msgstr "기상 관련" #: ./lib/route/announcement/announcement.dart:29 msgid "未知" -msgstr "" +msgstr "알 수 없음" #: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" -msgstr "" +msgstr "현재 공지 없음" #: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" -msgstr "" +msgstr "공지 내용" #: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" -msgstr "" +msgstr "권한 획득 불가" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" +msgstr "응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주세요." #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" -msgstr "" +msgstr "다시 시도해 주세요" #: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" -msgstr "" +msgstr "이미지 저장 완료" #: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" -msgstr "" +msgstr "이미지 저장 중 오류" #: ./lib/utils/extensions/int.dart:13 msgid "0級" -msgstr "" +msgstr "0급" #: ./lib/utils/extensions/int.dart:14 msgid "1級" -msgstr "" +msgstr "1급" #: ./lib/utils/extensions/int.dart:15 msgid "2級" -msgstr "" +msgstr "2급" #: ./lib/utils/extensions/int.dart:16 msgid "3級" -msgstr "" +msgstr "3급" #: ./lib/utils/extensions/int.dart:17 msgid "4級" -msgstr "" +msgstr "4급" #: ./lib/utils/extensions/int.dart:18 msgid "5弱" -msgstr "" +msgstr "5약" #: ./lib/utils/extensions/int.dart:19 msgid "5強" -msgstr "" +msgstr "5강" #: ./lib/utils/extensions/int.dart:20 msgid "6弱" -msgstr "" +msgstr "6약" #: ./lib/utils/extensions/int.dart:21 msgid "6強" -msgstr "" +msgstr "6강" #: ./lib/utils/extensions/int.dart:22 msgid "7級" -msgstr "" +msgstr "7급" #: ./lib/utils/weather_icon.dart:283 msgid "晴" @@ -983,7 +984,7 @@ msgstr "맑음・연무" #: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" -msgstr "맑음・안개" +msgstr "맑음・옅은 안개" #: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" @@ -995,7 +996,7 @@ msgstr "맑음・천둥" #: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" -msgstr "맑음・안개" +msgstr "맑음・짙은 안개" #: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" @@ -1003,7 +1004,7 @@ msgstr "맑음・비" #: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" -msgstr "맑음・눈비" +msgstr "맑음・비/눈" #: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" @@ -1011,11 +1012,11 @@ msgstr "맑음・폭설" #: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" -msgstr "맑음・눈알" +msgstr "맑음・싸라기 눈" #: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" -msgstr "맑음・우박" +msgstr "맑음・진눈깨비" #: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" @@ -1023,7 +1024,7 @@ msgstr "맑음・소나기 눈" #: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" -msgstr "맑음・소나기 눈비" +msgstr "맑음・소나기 비/눈" #: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" @@ -1035,95 +1036,95 @@ msgstr "맑음・뇌우" #: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" -msgstr "" +msgstr "맑음・천둥 눈" #: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" -msgstr "" +msgstr "맑음・천둥 우박" #: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" -msgstr "" +msgstr "맑음・강한 뇌우" #: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" -msgstr "" +msgstr "맑음・강한 천둥 우박" #: ./lib/utils/weather_icon.dart:303 msgid "多雲" -msgstr "" +msgstr "구름 많음" #: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" -msgstr "" +msgstr "구름 많음・연무" #: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" -msgstr "" +msgstr "구름 많음・옅은 안개" #: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" -msgstr "" +msgstr "구름 많음・번개" #: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" -msgstr "" +msgstr "구름 많음・천둥" #: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" -msgstr "" +msgstr "구름 많음・짙은 안개" #: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" -msgstr "" +msgstr "구름 많음・비" #: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" -msgstr "" +msgstr "구름 많음・비/눈" #: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" -msgstr "" +msgstr "구름 많음・폭설" #: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" -msgstr "" +msgstr "구름 많음・싸라기눈" #: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" -msgstr "" +msgstr "구름 많음・진눈깨비" #: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" -msgstr "" +msgstr "구름 많음・소나기 눈" #: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" -msgstr "" +msgstr "구름 많음・소나기 눈/비" #: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" -msgstr "" +msgstr "구름 많음・우박" #: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" -msgstr "" +msgstr "구름 많음・뇌우" #: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" -msgstr "" +msgstr "구름 많음・천둥/눈" #: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" -msgstr "" +msgstr "구름 많음・천둥/우박" #: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" -msgstr "" +msgstr "구름 많음・강한 뇌우" #: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" -msgstr "" +msgstr "구름 많음・강한 천둥/우박" #: ./lib/utils/weather_icon.dart:323 msgid "陰" @@ -1131,51 +1132,51 @@ msgstr "흐림" #: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" -msgstr "맑음・연무" +msgstr "흐림・연무" #: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" -msgstr "맑음・안개" +msgstr "흐림・안개" #: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" -msgstr "" +msgstr "흐림・번개" #: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" -msgstr "맑음・천둥" +msgstr "흐림・천둥" #: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" -msgstr "맑음・안개" +msgstr "흐림・옅은 안개" #: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" -msgstr "맑음・비" +msgstr "흐림・비" #: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" -msgstr "" +msgstr "흐림・눈/비" #: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" -msgstr "" +msgstr "흐림・폭설" #: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" -msgstr "" +msgstr "흐림・싸라기눈" #: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" -msgstr "" +msgstr "흐림・진눈깨비" #: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" -msgstr "" +msgstr "흐림・소나기 눈" #: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" -msgstr "" +msgstr "흐림・소나기 눈/비" #: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" @@ -1183,21 +1184,21 @@ msgstr "맑음・우박" #: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" -msgstr "" +msgstr "흐림・뇌우" #: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" -msgstr "" +msgstr "흐림・천둥/눈" #: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" -msgstr "" +msgstr "흐림・천둥/우박" #: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" -msgstr "" +msgstr "흐림・강한 뇌우" #: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" -msgstr "" +msgstr "흐림・강한 천둥/우박" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index 8faaaa2ce..e8240ff30 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2025-07-23 03:45\n" +"PO-Revision-Date: 2025-08-11 02:40\n" #: ./lib/app/settings/location/page.dart:555 msgid "所在地" @@ -359,7 +359,8 @@ msgstr "正在加载商店商品中" #: ./lib/app/settings/donate/page.dart:132 msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" "您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "" +msgstr "DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与维护的成本!\n\n" +"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定底,为您提供服务。感谢您的理解与慷慨!" #: ./lib/app/settings/donate/page.dart:141 msgid "訂閱制" @@ -375,23 +376,23 @@ msgstr "单次支持" #: ./lib/app/settings/donate/page.dart:197 msgid "無法連線至 {store},請稍後再試。" -msgstr "" +msgstr "无法连接至 {store} ,请稍后再试。" #: ./lib/app/settings/donate/page.dart:202 msgid "正在恢復您購買的訂閱" -msgstr "" +msgstr "正在恢复您购买的订阅" #: ./lib/app/settings/donate/page.dart:205 msgid "恢復購買" -msgstr "" +msgstr "恢复购买" #: ./lib/app/settings/donate/page.dart:216 msgid "使用條款" -msgstr "" +msgstr "使用条款" #: ./lib/app/settings/donate/page.dart:223 msgid "隱私權政策" -msgstr "" +msgstr "隐私权政策" #: ./lib/app/welcome/4-permissions/page.dart:163 msgid "位置" @@ -519,11 +520,11 @@ msgstr "默认图层" #: ./lib/app/settings/map/page.dart:71 msgid "動畫幀率" -msgstr "" +msgstr "动画帧率" #: ./lib/app/settings/map/page.dart:99 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "" +msgstr "过高的动画帧率可能会造成设备卡顿或发热" #: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" @@ -583,27 +584,27 @@ msgstr "尚未设定所在地" #: ./lib/app/map/_lib/managers/monitor.dart:874 msgid "第 {serial} 報" -msgstr "" +msgstr "第 {serial} 报" #: ./lib/app/map/_lib/managers/monitor.dart:889 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "" +msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:923 msgid "所在地預估" -msgstr "" +msgstr "所在地预估" #: ./lib/app/map/_lib/managers/monitor.dart:957 msgid "震波" -msgstr "" +msgstr "震波" #: ./lib/app/map/_lib/managers/monitor.dart:978 msgid " 秒" -msgstr "" +msgstr " 秒" #: ./lib/app/map/_lib/managers/monitor.dart:994 msgid "抵達" -msgstr "" +msgstr "抵达" #: ./lib/app/home/page.dart:55 msgid "已更新至 {version}" @@ -743,19 +744,19 @@ msgstr "风向/风速" #: ./lib/app/map/_lib/managers/radar.dart:613 msgid "長按設定播放起點" -msgstr "" +msgstr "长按设定播放起点" #: ./lib/app/map/_lib/managers/radar.dart:627 msgid "目前時間" -msgstr "" +msgstr "目前时间" #: ./lib/app/map/_lib/managers/radar.dart:632 msgid "播放起點" -msgstr "" +msgstr "播放起点" #: ./lib/app/map/_lib/managers/radar.dart:906 msgid "播放進度" -msgstr "" +msgstr "播放进度" #: ./lib/app/map/_lib/managers/precipitation.dart:305 msgid "今日" @@ -795,19 +796,19 @@ msgstr "3 天" #: ./lib/app/map/_lib/managers/monitor.dart:714 msgid "目前沒有生效中的地震速報" -msgstr "" +msgstr "目前没有生效中的地震预警" #: ./lib/app/map/_lib/managers/monitor.dart:808 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" +msgstr "规模 M{magnitude},所在地预估{intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:824 msgid "{countdown}秒後抵達" -msgstr "" +msgstr "{countdown}秒后抵达" #: ./lib/app/map/_lib/managers/monitor.dart:825 msgid "已抵達" -msgstr "" +msgstr "已抵达" #: ./lib/app/map/_lib/managers/report.dart:371 msgid "近期的地震報告" @@ -867,119 +868,119 @@ msgstr "峰值最大地震动速度图" #: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" -msgstr "" +msgstr "错误" #: ./lib/route/announcement/announcement.dart:13 msgid "已解決" -msgstr "" +msgstr "已解决" #: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" -msgstr "" +msgstr "影响:小" #: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" -msgstr "" +msgstr "影响:中" #: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" -msgstr "" +msgstr "影响:大" #: ./lib/route/announcement/announcement.dart:18 msgid "維修" -msgstr "" +msgstr "维护" #: ./lib/route/announcement/announcement.dart:19 msgid "測試" -msgstr "" +msgstr "测试" #: ./lib/route/announcement/announcement.dart:20 msgid "變更" -msgstr "" +msgstr "变更" #: ./lib/route/announcement/announcement.dart:21 msgid "完成" -msgstr "" +msgstr "完成" #: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" -msgstr "" +msgstr "地震相关信息" #: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" -msgstr "" +msgstr "气象相关信息" #: ./lib/route/announcement/announcement.dart:29 msgid "未知" -msgstr "" +msgstr "未知" #: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" -msgstr "" +msgstr "目前没有通知" #: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" -msgstr "" +msgstr "通知详情" #: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" -msgstr "" +msgstr "无法取得权限" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" +msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" -msgstr "" +msgstr "再试一次" #: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" -msgstr "" +msgstr "已存储图片" #: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" -msgstr "" +msgstr "存储图片时发生错误" #: ./lib/utils/extensions/int.dart:13 msgid "0級" -msgstr "" +msgstr "0级" #: ./lib/utils/extensions/int.dart:14 msgid "1級" -msgstr "" +msgstr "1级" #: ./lib/utils/extensions/int.dart:15 msgid "2級" -msgstr "" +msgstr "2级" #: ./lib/utils/extensions/int.dart:16 msgid "3級" -msgstr "" +msgstr "3级" #: ./lib/utils/extensions/int.dart:17 msgid "4級" -msgstr "" +msgstr "4级" #: ./lib/utils/extensions/int.dart:18 msgid "5弱" -msgstr "" +msgstr "5弱" #: ./lib/utils/extensions/int.dart:19 msgid "5強" -msgstr "" +msgstr "5强" #: ./lib/utils/extensions/int.dart:20 msgid "6弱" -msgstr "" +msgstr "6弱" #: ./lib/utils/extensions/int.dart:21 msgid "6強" -msgstr "" +msgstr "6强" #: ./lib/utils/extensions/int.dart:22 msgid "7級" -msgstr "" +msgstr "7级" #: ./lib/utils/weather_icon.dart:283 msgid "晴" From d40749a9ee993355ba244d72b52cff71676666ab Mon Sep 17 00:00:00 2001 From: Kamiya Date: Mon, 11 Aug 2025 15:22:51 +0800 Subject: [PATCH 20/59] chore: update i18n (#365) --- assets/translations/en.po | 990 ++++++++++++++++++++------------ assets/translations/ja.po | 969 +++++++++++++++++++------------ assets/translations/ko.po | 959 +++++++++++++++++++------------ assets/translations/ru.po | 842 ++++++++++++++++----------- assets/translations/strings.pot | 364 ++++++++---- assets/translations/vi.po | 957 ++++++++++++++++++------------ assets/translations/zh-Hans.po | 937 ++++++++++++++++++------------ assets/translations/zh-Hant.po | 427 ++++++++++---- tools/update_translations.sh | 11 +- 9 files changed, 4047 insertions(+), 2409 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index 259722a56..e62a484a2 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -12,1196 +12,1450 @@ msgstr "" "Language: en_US\n" "PO-Revision-Date: 2025-08-11 02:40\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Current Location" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "Theme" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "Language" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "Unit" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "Map" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "Notifications" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "Earthquake Early Warning" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "Strong Earthquake Monitor" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "Earthquake Reports" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "Earthquake Intensity Report" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "Thunderstorm Advisory" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "Weather Advisory" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "Evacuation information" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "Tsunami information" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "Announcements" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "Support Us" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "Settings" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "Receive All" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "Off" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "Category" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "Intensity 1 or higher at current location" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "Tsunami information, Tsunami warning" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "Tsunami warning only" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "Receive for current location" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "Intensity 4 or higher at current location" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "Sound Test" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "When sending an announcement" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"The sound test is a local notification performed on the device, used only to " +"confirm whether sound can be played properly when receiving alerts. This " +"test does not send any requests to any server" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "Please set your current location to enable notifications" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "Earthquake Warning" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "Earthquake" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "Weather" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "Tsunami" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "Other" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "Severe" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" msgstr "When a tsunami warning is issued for coastal towns and townships" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "General" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" msgstr "When a tsunami warning is issued for non-coastal areas" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "Pacific Tsunami Information (Silent Notification)" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "When the Pacific information is issued" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "Strong Earthquake Monitor(General)" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "Shaking detected" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "Intensity Report" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "Local (City/Town/District) measured intensity is greater than 3" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "Intensity Report (Silent)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "Local (City/Town/District) measured intensity is greater than 1" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "Earthquake Report (General)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "Local (Municipality/County) measured intensity is greater than 3" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "Earthquake Report (Silent)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "Local (Municipality/County) measured intensity is greater than 1" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "Updated notification setting" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "Failed To Update Notification Settings" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 4" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Emergency Earthquake Early Warning (General)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 2" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Emergency Earthquake Early Warning (Silent)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 1" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 4" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "Earthquake Early Warning (General)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 2" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "Earthquake Early Warning (Silent)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 1" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "When the local area(township) issues an evacuating warning" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "When the local area(township) issues an evacuating warning" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "The location (township) issues a red signal\n" +msgstr "" +"The location (township) issues a red signal\n" "Weather Warning" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "The location (township) where the above-mentioned exceptions are issued\n" +msgstr "" +"The location (township) where the above-mentioned exceptions are issued\n" "Weather Warning" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" -msgstr "The location (township) issues instant thunderstorm information or\n" +msgstr "" +"The location (township) issues instant thunderstorm information or\n" "Heavy rain in mountainous areas" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "Use Fahrenheit" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "Switch temperature display to use Fahrenheit (℉)" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "Display Language" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "System Language" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "Help us translate" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "Click here to help us improve the translation of DPIP" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "Select Language" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Translated {translated} ・ Approved {approved}" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "Source Language" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "Unable to connect to the store, please try again later" -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "Unable to find the item, please try again later" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "Reload" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "Loading store items" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "As an app dedicated to providing real-time earthquake information, DPIP currently has no advertising or other profit models. In order to maintain high-quality services, we need to bear the costs of server operation, seismic data acquisition and transmission, and subsequent function development and maintenance.\n\n" -"Every donation you make below will go directly toward these operating costs, helping DPIP to continue to provide you with services in a sustainable manner. Thank you for your understanding and generosity!" - -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"As an app dedicated to providing real-time earthquake information, DPIP " +"currently has no advertising or other profit models. In order to maintain " +"high-quality services, we need to bear the costs of server operation, " +"seismic data acquisition and transmission, and subsequent function " +"development and maintenance.\n" +"\n" +"Every donation you make below will go directly toward these operating costs, " +"helping DPIP to continue to provide you with services in a sustainable " +"manner. Thank you for your understanding and generosity!" + +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "Subscription" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/month" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "One-time" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "Unable to connect to the {store}, please try again later." -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "Restoring your purchased subscription" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "Restore purchases" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "Terms of use" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "Privacy policy" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "Location" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "Set your location to receive updates about your area" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "Interface" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "Adjust the overall appearance and color of DPIP" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "Adjust the display language of DPIP" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "Adjust the units for value in DPIP" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "Adjust settings of map in DPIP" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "Push notification settings and notification sound test" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "Information" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "Get the latest announcements and news from ExpTech Studio" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "Release Notes" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "View DPIP's Previous Update Records" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "Help us maintain the stability and long-term development of the server" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "Third Party Libraries" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP was made possible by open source" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "Debug" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "App Version" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "Device Info" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "Copy Notification Token" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "App Logs" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "All information should be considered authoritative only if it is consistent with CWA." +msgstr "" +"All information should be considered authoritative only if it is consistent " +"with CWA." + +#: lib/app/settings/location/page.dart:76 +#, fuzzy +msgid "無法取得通知權限" +msgstr "Unable to obtain permission" + +#: lib/app/settings/location/page.dart:78 +#, fuzzy +msgid "無法取得位置權限" +msgstr "Unable to obtain permission" + +#: lib/app/settings/location/page.dart:79 +#, fuzzy +msgid "無法取得自啟動權限" +msgstr "Unable to obtain permission" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "Power saving" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "Unable to obtain permission" + +#: lib/app/settings/location/page.dart:85 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" +"Please go to the app settings and allow the \"Photos and Media\" permissions " +"and try again." + +#: lib/app/settings/location/page.dart:86 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" +"Please go to the app settings and allow the \"Photos and Media\" permissions " +"and try again." + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" +"Please go to the app settings and allow the \"Photos and Media\" permissions " +"and try again." + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "Cancel" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "Update Automatically" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "Update your current location periodically" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "The automatic location update feature will use the GPS on your device to update your location based on your geographical position periodically, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions." +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"The automatic location update feature will use the GPS on your device to " +"update your location based on your geographical position periodically, " +"providing real-time weather and earthquake information, so you can stay up-" +"to-date with the latest local conditions." -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "Special Municipality/County" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "Not Set" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "City/Town/District" +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "Special Municipalities/County" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "Current Location" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "Strong Earthquake Monitor" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "Radar" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "Temperature" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "Precipitation" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "Wind/Gust" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "Simple" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "Base Map" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "Initial Layer" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "Animation frame rate" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "Excessively high the animation frame rate may cause lag or device overheating" +msgstr "" +"Excessively high the animation frame rate may cause lag or device overheating" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "Theme Mode" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "Light" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "Dark" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "System" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "Theme Color" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "System Color" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "Use System Color" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "Cancel" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "Confirm" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "Severe thunderstorms or heavy rain are occurring near your area. Please take precautions. This will continue until {time}." +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"Severe thunderstorms or heavy rain are occurring near your area. Please take " +"precautions. This will continue until {time}." -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "Out of service area. Available only in Taiwan" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "Radar" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "Not Set" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "Apparent {apparent}°" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "Location not set" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "{serial} report" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"At around {time}, a felt earthquake near {location} had an " +"estimated magnitude of M{magnitude} and a max intensity of " +"{intensity}." + +#: lib/app/map/_lib/managers/monitor.dart:926 +#, fuzzy +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"At around {time}, a felt earthquake near {location} had an " +"estimated magnitude of M{magnitude} and a max intensity of " +"{intensity}." -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "Estimated intensity at current location" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "The earthquake" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " Seconds" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "Arrived" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "Updated to {version}" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "Error while retrieving weather data" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "Unable to load update logs, please try again later." -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "Retry" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "Next" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "Disaster Prevention Information Platform" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "Who are we?" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China." +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio is a group of mostly students, with an average age of under " +"20 and a headcount of 15+. Members are students from northern, central and " +"southern Taiwan, Japan, South Korea and China." -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Our original intention" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Precautions" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen." +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"Depending on the network status, server status, application status, upstream " +"data source status, etc., there is a possibility that information will not " +"be received. We will try our best to avoid such situations, but we cannot " +"guarantee that they will not happen." -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "Strong shaking has a chance of reaching the user's location before the notification." +msgstr "" +"Strong shaking has a chance of reaching the user's location before the " +"notification." -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution." +msgstr "" +"Earthquake early warning is the result of rapid calculation and may have " +"large errors. It should be understood and used with caution." -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "" -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Welcome to DPIP" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application." +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP is an app designed by a local Taiwanese team that integrates " +"information from TREM-Net (Taiwan Real-time Earthquake Observation Network) " +"and data from the Central Weather Administration to provide an integrated, " +"single and convenient disaster prevention information application." -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" -msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur" +msgstr "" +"Delivering real-time disaster prevention information via notifications when " +"major disasters occur" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information" - -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "Power saving" +msgstr "" +"Use location to automatically update location settings and provide local " +"real-time disaster prevention information" -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information." +msgstr "" +"Allow DPIP to run continuously in the background for real-time disaster " +"notification information." -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "Save" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "Used to store data visualization images provided by the Central Meteorological Administration or ExpTech" +msgstr "" +"Used to store data visualization images provided by the Central " +"Meteorological Administration or ExpTech" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "Users are required to manually go to settings to enable relevant permissions." +msgstr "" +"Users are required to manually go to settings to enable relevant permissions." -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "Permissions" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "We always stand with our users and work hard for their privacy." -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "Map Layers" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "Select the layer you want to display" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "Simple" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "Weather" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "Temperature" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "Precipitation" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "Wind/Gust" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "Long press to set the start point of playback" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "Current time" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "Play start" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "Today" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 min" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 d" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 d" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "Max PGA Image" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "Max PGV Image" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "There are currently no earthquake warnings in effect" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +#, fuzzy +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "" +"Estimated M{magnitude}, max intensity {intensity}" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "Estimated M{magnitude}, max intensity {intensity}" +msgstr "" +"Estimated M{magnitude}, max intensity {intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown} Arrived in seconds" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "Arrived" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "Recent Earthquake Reports" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "More" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "No. {number} Significantly Felt Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "Local Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "Magnitude" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "Depth" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Web" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "Event Time" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "Location" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "Observed Intensities" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "Earthquake Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "Max PGA Image" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "Max PGV Image" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "Mistake" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "Resolved" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "Impact: Small" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "Impact: Medium" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "Impact: Major" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "Test" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "Change" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "Done" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "Weather related" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "Unknown" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "Announcement Details" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "Unable to obtain permission" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "Please go to the app settings and allow the \"Photos and Media\" permissions and try again." +msgstr "" +"Please go to the app settings and allow the \"Photos and Media\" permissions " +"and try again." -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "Try again" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "Saved pictures" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "An error occurred while saving the image" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5-" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5+" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6-" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6+" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "Intensity 7" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Sunny" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "Sunny with Haze" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "Sunny with Mist" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "Sunny with Lightning" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "Sunny with Thunder" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "Sunny with Fog" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "Sunny with Rain" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "Sunny with Rain and Snow" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "Sunny with Heavy Snow" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "Sunny with Snow Grains" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "Sunny with Ice Pellets" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "Sunny with Snow Showers" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "Sunny with Rain and Snow Showers" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "Sunny with Hail" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "Sunny with Thunderstorm" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "Clear with thunder and hail" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "Clear sky with heavy thunder and hail" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "Partly cloudy" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "Cloudy with haze" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "Cloudy with haze" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "Cloudy with thunder" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "Cloudy with rain and snow" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "Cloudy with heavy snow" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "Cloudy with ice beads" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "Cloudy with snow showers" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "Cloudy with rain and snow" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "Cloudy with Hail" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "Cloudy with thunderstorm" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "Cloudy with thunder and snow" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "Cloudy with thunder and hail" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "Cloudy with heavy thunderstorm" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "Heavy thunder and hail" +#~ msgid "直轄市/縣市" +#~ msgstr "Special Municipality/County" + +#~ msgid "鄉鎮市區" +#~ msgstr "City/Town/District" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index d2299fc64..945aa49f7 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -12,1199 +12,1438 @@ msgstr "" "Language: ja_JP\n" "PO-Revision-Date: 2025-08-01 03:50\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "現在地" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "テーマ" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "言語" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "単位" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地図" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "緊急地震速報" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "強震モニター" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "地震情報" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "地震速報" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "雷雨注意情報" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天気警報" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "避難情報" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "津波情報" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "お知らせ" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "応援する" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "設定" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "すべて受信" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "オフ" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "受信カテゴリ" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "現在地震度 1 以上で受信" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "津波警報・情報" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "津波警報のみ受信" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "現地のみ受信" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "現在地震度 4 以上で受信" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "サウンドテスト" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "通知受信時" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイスが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイ" +"スが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "通知機能を使用する為に現在地を設定してください" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震速報" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天気" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "津波" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "その他" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "重大" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" -msgstr "津波警報が発令された時\n" +msgstr "" +"津波警報が発令された時\n" "沿岸地域" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "一般" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" -msgstr "津波警報が発令された時\n" +msgstr "" +"津波警報が発令された時\n" "沿岸地域を除いた地域" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "太平洋津波通信(音無しお知らせ)" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "太平洋津波情報発信された時" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "強震モニター(通常)" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "揺れを検出" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "震度速報(通常)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "現在地(郷/鎮)測りにより震度 3 超え" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "震度速報(音無し)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "現在地(郷/鎮)測りにより震度 1 超え" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "地震報告(通常)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "現在地(県/市)測りにより震度 3 超え" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "地震報告(音無し)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "現在地(県/市)測りにより震度 1 超え" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "通知設定が更新されました" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "通知設定の更新に失敗しました" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "緊急地震速報(非常)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 4 超え" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "緊急地震速報(通常)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 2 超え" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "緊急地震速報(音無し)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 1 超え" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "地震速報(非常)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "現在地(郷/鎮)測りにより震度 4 超え" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "地震速報(通常)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "現在地(郷/鎮)測りにより震度 2 超え" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "地震速報(音無し)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "現在地(郷/鎮)測りにより震度 1 超え" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "現在地(郷/鎮)に避難注意報が発令された時" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "現在地(郷/鎮)に避難情報が発信された時" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にレッドアラートの天気注意報/特報が発令され" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にその以外の天気注意報/特報が発令され" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" msgstr "現在地(郷/鎮)に雷雨/山地にわか雨リアルタイム情報が発信された時" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "華氏度を使う" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "温度の表示単位を華氏(℉)に変更する" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "表示言語" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "システム言語" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "翻訳を協力" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "DPIPの翻訳にご協力をお願いします!" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "言語を選択" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "{translated} 翻訳済み・{approved} 校正済み" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "ソース言語" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "ストアーへの接続異常" -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "該当商品が見つかりません" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "再読み込み" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "ストアーの商品読み込み中" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今までに広告や他の収益方法などはございません。サービスの品質をより高く保たれるため、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発やメンテナンスなどのコストを負担しております。\n\n" -"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理解、ご厚意に感謝しています!" - -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今まで" +"に広告や他の収益方法などはございません。サービスの品質をより高く保たれるた" +"め、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発や" +"メンテナンスなどのコストを負担しております。\n" +"\n" +"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用" +"しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理" +"解、ご厚意に感謝しています!" + +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "サブスクリプション" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/毎月" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "一回払い" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" -msgstr "{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しください。" +msgstr "" +"{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しくださ" +"い。" -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "ご購入内容を復元しています" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "購入を復元" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "利用規約" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "プライバシーポリシー" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "現在地を設定して地域のリアルタイム情報を受け取る" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "画面" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "DPIPのテーマを調整する" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "DPIPの表示言語を調整する" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" -msgstr "DPIP で数値をディスプレイする時の\n" +msgstr "" +"DPIP で数値をディスプレイする時の\n" "が現れる単位を調整する" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "DPIP 地図の設定を調整する" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "プッシュ通知の設定と通知音のテスト" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "情報" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "ExpTech Studio の最新のお知らせと情報をチェック" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "更新履歴" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "過去の更新履歴を見る" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "サーバーの安定性と長期的な運営の維持にご協力ください" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "外部ライブラリの使用許諾" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP の実現はオープンソース・コミュニティのおかげです" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "デバッグ" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "アプリバージョン" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "デバイス情報" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "通知トークンをコピー" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "アプリログ" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "すべての情報は、中央気象署(CWA)の公式発表を基準にしてください。" -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:76 +#, fuzzy +msgid "無法取得通知權限" +msgstr "権限を取得できませんでした" + +#: lib/app/settings/location/page.dart:78 +#, fuzzy +msgid "無法取得位置權限" +msgstr "権限を取得できませんでした" + +#: lib/app/settings/location/page.dart:79 +#, fuzzy +msgid "無法取得自啟動權限" +msgstr "権限を取得できませんでした" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "電力を守る策略" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "権限を取得できませんでした" + +#: lib/app/settings/location/page.dart:85 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" +"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" +"お願いします。" + +#: lib/app/settings/location/page.dart:86 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" +"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" +"お願いします。" + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" +"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" +"お願いします。" + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "キャンセル" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自動更新" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期的に現在地を更新する" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。" +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新" +"します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得しま" +"す。" + +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "直轄市/県市" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "未設定" +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "区町村" +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "県/市" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "現在地" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "強震モニター" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "レーダー" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "気温" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "降水量" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "風向・風速" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "線" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "ベースマップ" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "初期レイヤー" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "動画のフレームレート" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "速すぎたフレームレートはラッグや設備発熱に至る可能性があります" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "テーマモード" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "ライト" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "ダーク" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "システムに従う" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "テーマ色" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "システム色" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "システムの色を使う" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "キャンセル" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "確認" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。{time} まで続く見込みです。" +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。" +"{time} まで続く見込みです。" -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "台湾以外ではご利用いただけません" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "レーダー" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "未設定" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "体感温度 {apparent}°" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "現在地が設定されていません" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "第 {serial} 報" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" + +#: lib/app/map/_lib/managers/monitor.dart:926 +#, fuzzy +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "現在地の予想" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "地震波" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "到達" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "{version} に更新されました" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "天気の取得に失敗しました" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "変更履歴を読み込めませんでした。" -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "再試行" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "次" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "防災情報プラットフォーム" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "私たちについて?" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体" +"です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "私たちの初心" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めることでした。その後、活動は学外に広がり、現在の形になりました。" +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めるこ" +"とでした。その後、活動は学外に広がり、現在の形になりました。" -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事項" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があります。努力を込めてそのような状況を避けておりながら、発生しませんことには確保かねます。" +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があ" +"ります。努力を込めてそのような状況を避けておりながら、発生しませんことには確" +"保かねます。" -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "強い揺れが通知より早く到達する確率があります。" -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上謹慎にお使いください。" +msgstr "" +"地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上" +"謹慎にお使いください。" -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能でおりまして、規範を遵うことをお願いいたします。" +msgstr "" +"あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能" +"でおりまして、規範を遵うことをお願いいたします。" -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIPへようこそ" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報アプリケーションを提供しております。" +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観" +"測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報" +"アプリケーションを提供しております。" -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "非常災害が発生した時、通知で即時防災情報を伝えます" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "定位により自動的に現在地を更新し、当地である即時防災情報を受けられます" -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "電力を守る策略" - -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を受けられることになります。" +msgstr "" +"バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を" +"受けられることになります。" -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "保存" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用いることになります" +msgstr "" +"台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用" +"いることになります" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "権限を要求" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "ユーザー手動で設定まで相関な権限を開けることが必要です。" -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "権限" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めております。" +msgstr "" +"私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めておりま" +"す。" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地図レイヤー" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "表示する地図のレイヤーを選択してください" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "線" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "気象" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "気温" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "降水量" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "風向・風速" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "長タッチし、プレイ起点を設定する" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "今の時間" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "プレイ起点" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "プレイ進度" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今日" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10分間" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2日間" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3日間" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "地動最大加速度" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "地動最大速度" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "緊急地震速報は発表されていません" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +#, fuzzy +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "M{magnitude}、最大震度{intensity}" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "M{magnitude}、最大震度{intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "到達まであと{countdown}秒" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "到達し" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "最近の地震情報" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "さらに表示" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "ID #{number} の顕著な地震" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "局地的地震" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "マグニチュード" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "震源の深さ" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Webで見る" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "発生時刻" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "震源地" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "各地の震度" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "地震情報図" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "震度分布図" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "地動最大加速度" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "地動最大速度" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "エラーが発生した" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "解決済み" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "影響:小" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "影響:中" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "影響:大" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "メンテナンス" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "テスト" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "変更" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "完成" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "地震相関" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "気象相関" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "未知" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "現在お知らせはありません" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "お知らせの詳細" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "権限を取得できませんでした" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことをお願いします。" +msgstr "" +"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" +"お願いします。" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "再試行" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "保存しました" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "画像をセーブする時にエラーが発生しました" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5弱" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5強" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6弱" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6強" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "晴れ" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "晴れ・煙霧" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "晴れ時々霧" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "晴れ時々雷" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "晴れ時々雷" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "晴れ・霧" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "晴れ時々雨" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "晴れ時々雨雪" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "晴れ時々大雪" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "晴れ時々霧雪" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "晴れ時々氷雨" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "晴れ時々にわか雪" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "晴れ時々にわか雨や雪" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "晴れ時々雹" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "晴れ時々雷を伴う雨" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "晴れのち雪、雷あり" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "晴れのち雹、雷あり" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "晴れのち雨、大雷あり" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "晴れのち雹、大雷あり" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "多雲" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "多雲霧もやあり" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "多雲稲妻あり" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "多雲雷あり" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "多雲霧あり" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "多雲雨あり" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "多雲のち雨、雪あり" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "多雲のち大雪" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "多雲のち雪粒" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "多雲のち氷粒" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "多雲のち時々雪" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "多雲のち時々雨、雪あり" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "多雲のち雹" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "多雲のち雨、雷あり" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "多雲のち雪、雷あり" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "多雲のち雹、雷あり" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "多雲のち雨、大雷あり" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "多雲のち雹、大雷あり" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "曇り" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "曇り霧もやあり" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "曇り靄あり" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "曇り稲妻あり" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "曇り雷あり" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "曇り霧あり" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "曇りのち雨" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "曇りのち雨、雪あり" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "曇りのち大雪" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "曇りのち雪粒" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "曇りのち氷粒" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "曇りのち時々雪" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "曇りのち時々雨、雪あり" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "曇りのち雹" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "曇りのち雨、雷あり" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "曇りのち雪、雷あり" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "曇りのち雹、雷あり" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "曇りのち雨、大雷あり" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "曇りのち大雹、大雷あり" +#~ msgid "直轄市/縣市" +#~ msgstr "直轄市/県市" + +#~ msgid "鄉鎮市區" +#~ msgstr "区町村" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index b975053b0..04947246b 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -12,1193 +12,1430 @@ msgstr "" "Language: ko_KR\n" "PO-Revision-Date: 2025-08-02 16:35\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "현재 지역" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "주제" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "언어" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "단위" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "지도" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "알림" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "긴급 지진 속보" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "강진 모니터" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "지진 보고" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "진도 속보" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "실시간 뇌우 정보" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "기상특보" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "피난 정보" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "해일 정보" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "공지" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "저희를 후원해주세요" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "설정" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "모두 수신" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "닫기" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "수신 카테고리" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "현재 위치 진도 1 이상" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "해일 정보, 해일 경보" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "해일 경보만 수신" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "현재 위치 수신" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "현재 위치 진도 4 이상" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "사운드 테스트" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "공지 발송 시" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트는 요청을 서버에 전송하지 않습니다" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 " +"음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트" +"는 요청을 서버에 전송하지 않습니다" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "알림 기능을 사용하시려면 먼저 위치를 설정해 주세요" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "지진 속보" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "지진" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "날씨" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "해일" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "기타" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "중대" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" msgstr "해일 경보 발령 시, 해안 지역(향, 진)" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "일반" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" msgstr "해일 경보 발령 시, 위의 언급 지역 외" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "태평양 해일 정보(무음 알림)" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "태평양 해일 정보 발령 시" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "강진 모니터(일반)" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "흔들림 감지" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "진도 속보(일반)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "현재 위치(향, 진) 실측 진도 3 이상" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "진도 속보(무음 알림)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "현재 위치(향, 진) 실측 진도 1 이상" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "지진 보고(일반)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "현재 위치(현, 시) 실측 진도 3 이상" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "지진 보고(무음 알림)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "현재 위치(현, 시) 실측 진도 1 이상" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "알림 설정 갱신" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "알림 설정 갱신 실패" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "긴급 지진 속보(중대)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "​최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 4 이상" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "긴급 지진 속보(일반)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 2 이상" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "긴급 지진 속보(무음)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 1 이상" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "지진 속보(중대)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "현재 위치(향, 진) 예상 진도 4 이상" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "지진 속보(일반)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "현재 위치(향, 진) 예상 진도 2 이상" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "지진 속보(무음)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "현재 위치(향, 진) 예상 진도 1 이상" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "현재 위치(향, 진) 피난 경보 발령 시" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "현재 위치(향, 진) 피난 정보 발령 시" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 적색 기상 경보 특보를 발령" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 기상 경보를 발령" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" msgstr "현재 위치(향, 진)에 실시간 뇌우 정보 또는 산간 지역 폭우 발령 시" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "화씨 사용" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "온도 표시를 화씨(°F)로 전환" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "표시 언어" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "시스템 언어" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "번역 돕기" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "여기를 눌러 DPIP 번역 개선을 도와주세요" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "언어 선택" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "번역됨 {translated}・승인됨 {approved}" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "출처 언어" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "스토어에 연결할 수 없습니다, 잠시 후 다시 시도해 주세요" -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "상품을 찾을 수 없습니다, 잠시 후 다시 시도해 주세요" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "새로 고침" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "스토어 상품 로드 중" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합니다.\n" -"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" - -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수" +"익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이" +"터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합" +"니다.\n" +"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용" +"되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입" +"니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" + +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "정기 구독" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/월" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "일회성 후원" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "{store}에 연결할 수 없습니다, 잠시 후 다시 시도해 주세요." -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "구매했던 구독 복원" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "구매 기록 복원" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "이용 약관" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "개인 정보 보호 정책" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "위치" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "현재 위치를 설정하여 해당 지역 실시간 정보 수신" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "인터페이스" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "DPIP 전체의 외관과 색상을 조정합니다" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "DPIP 표시 언어 조정" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "DPIP의 표시 단위 조정" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "DPIP 지도 설정 조정" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "푸시 알림 설정 및 알림음 테스트" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "정보" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "ExpTech Studio의 최신 공지 및 정보 확인" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "업데이트 로그" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "DPIP 이전 업데이트 기록" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "서버의 안정과 장기적인 발전 돕기" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "제3자 라이브러리 라이선스" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP의 구현은 오픈 소스에 힘입었습니다" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "오류 수정" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "앱 버전" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "기기 정보" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "알림 토큰 복사" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "앱 로그" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "모든 정보는 대만 기상청에서 발표한 내용을 기준으로 합니다." -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:76 +#, fuzzy +msgid "無法取得通知權限" +msgstr "권한 획득 불가" + +#: lib/app/settings/location/page.dart:78 +#, fuzzy +msgid "無法取得位置權限" +msgstr "권한 획득 불가" + +#: lib/app/settings/location/page.dart:79 +#, fuzzy +msgid "無法取得自啟動權限" +msgstr "권한 획득 불가" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "전원 절약 설정" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "권한 획득 불가" + +#: lib/app/settings/location/page.dart:85 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" +"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" +"세요." + +#: lib/app/settings/location/page.dart:86 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" +"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" +"세요." + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" +"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" +"세요." + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "취소" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "자동 업데이트" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "현재 위치 정기적으로 업데이트" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 수 있도록 합니다." +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때" +"도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통" +"해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 " +"수 있도록 합니다." -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "직할시/현시" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "설정되지 않음" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "향/진/시/구" +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" + +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "현/시" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "현재 위치" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "강진 모니터" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "레이더" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "기온" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "강우" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "풍향/풍속" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "선" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "배경 레이어" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "기본 지도" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "애니메이션 주사율" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니다" +msgstr "" +"지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니" +"다" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "테마 모드" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "밝은" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "어두운" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "시스템 테마 따르기" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "테마 색상" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "시스템 색상" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "시스템 색상 사용" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "취소" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "확인" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주의." +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주" +"의." -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "서비스 지역 외에서는 사용할 수 없으며, 대만에서만 이용 가능합니다" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "레이더" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "설정되지 않음" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "체감 온도 {apparent}" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "현재 위치가 설정되지 않았습니다" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "제 {serial} 보" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " +"M{magnitude}, 현재 위치 최대 진도 {intensity}." -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:926 +#, fuzzy +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " +"M{magnitude}, 현재 위치 최대 진도 {intensity}." + +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "현재 위치 예상" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "지진파" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 초" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "도착" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "{version} 업데이트" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "날씨 이상 정보 확인" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "업데이트 로그를 불러올 수 없습니다. 나중에 다시 시도해 주세요." -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "다시 시도" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "다음 단계" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "방재 정보 플랫폼" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "저희에 관하여?" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 이루어져 있습니다." +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 " +"명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 " +"이루어져 있습니다." -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "우리의 목표" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이" +"었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "주의 사항" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 " +"정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 " +"다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "강한 흔들림이 알림보다 먼저 사용자 위치에 도착할 가능성이 있습니다." -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 신중하게 사용해야 합니다." +msgstr "" +"지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 " +"신중하게 사용해야 합니다." -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정을 반드시 준수해 주십시오." +msgstr "" +"공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정" +"을 반드시 준수해 주십시오." -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIP에 오신 것을 환영합니다" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀이 설계한 앱입니다." +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 " +"통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀" +"이 설계한 앱입니다." -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "중대 재해 발생 시 알림으로 즉각 재난 대비 정보를 전달합니다" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다" - -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "전원 절약 설정" +msgstr "" +"GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보" +"를 제공합니다" -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니다." +msgstr "" +"실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니" +"다." -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "이미지 저장" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" +msgstr "" +"대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "권한 요청" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "사용자가 수동으로 설정에서 관련 권한을 활성화해야 합니다." -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "권한" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." +msgstr "" +"우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "지도 레이어" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "표시 지도 레이더 선택" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "선" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "기상" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "기온" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "강우" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "풍향/풍속" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "길게 눌러 재생 시작 지점 설정" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "현재 시간" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "재생 시작 지점" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "재생 진행도" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "오늘" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 분" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 일" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 일" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "최대 지반 가속도" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "최대 지반 속도" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "현재 유효 지진 속보 없음" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +#, fuzzy +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "" +"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" +msgstr "" +"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}초 후 도착" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "도착" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "최근 지진 현황" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "더 보기" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "번호 {number} 강한 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "소구역 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "지진 규모" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "진원 깊이" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "보고 페이지" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "지진 발생 시간" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "에 위치" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "각 지역 진도" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "지진 보고" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "진도" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "최대 지반 가속도" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "최대 지반 속도" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "오류" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "해결 완료" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "영향:작음" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "영향:보통" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "영향:큼" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "유지 보수" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "테스트" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "변경" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "완성" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "지진 관련" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "기상 관련" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "알 수 없음" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "현재 공지 없음" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "공지 내용" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "권한 획득 불가" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주세요." +msgstr "" +"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" +"세요." -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "다시 시도해 주세요" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "이미지 저장 완료" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "이미지 저장 중 오류" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0급" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1급" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2급" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3급" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4급" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5약" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5강" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6약" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6강" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7급" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "맑음" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "맑음・연무" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "맑음・옅은 안개" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "맑음・번개" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "맑음・천둥" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "맑음・짙은 안개" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "맑음・비" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "맑음・비/눈" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "맑음・폭설" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "맑음・싸라기 눈" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "맑음・진눈깨비" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "맑음・소나기 눈" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "맑음・소나기 비/눈" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "맑음・우박" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "맑음・뇌우" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "맑음・천둥 눈" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "맑음・천둥 우박" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "맑음・강한 뇌우" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "맑음・강한 천둥 우박" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "구름 많음" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "구름 많음・연무" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "구름 많음・옅은 안개" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "구름 많음・번개" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "구름 많음・천둥" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "구름 많음・짙은 안개" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "구름 많음・비" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "구름 많음・비/눈" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "구름 많음・폭설" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "구름 많음・싸라기눈" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "구름 많음・진눈깨비" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "구름 많음・소나기 눈" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "구름 많음・소나기 눈/비" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "구름 많음・우박" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "구름 많음・뇌우" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "구름 많음・천둥/눈" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "구름 많음・천둥/우박" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "구름 많음・강한 뇌우" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "구름 많음・강한 천둥/우박" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "흐림" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "흐림・연무" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "흐림・안개" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "흐림・번개" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "흐림・천둥" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "흐림・옅은 안개" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "흐림・비" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "흐림・눈/비" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "흐림・폭설" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "흐림・싸라기눈" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "흐림・진눈깨비" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "흐림・소나기 눈" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "흐림・소나기 눈/비" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "맑음・우박" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "흐림・뇌우" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "흐림・천둥/눈" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "흐림・천둥/우박" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "흐림・강한 뇌우" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "흐림・강한 천둥/우박" +#~ msgid "直轄市/縣市" +#~ msgstr "직할시/현시" + +#~ msgid "鄉鎮市區" +#~ msgstr "향/진/시/구" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 04b222f55..3abf23f3c 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -12,1192 +12,1360 @@ msgstr "" "Language: ru_RU\n" "PO-Revision-Date: 2025-07-23 03:45\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" msgstr "" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" msgstr "" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Переведено {translated}・Утверждено {approved}" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "" -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" msgstr "" -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "" -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "" -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:76 +msgid "無法取得通知權限" +msgstr "" + +#: lib/app/settings/location/page.dart:78 +msgid "無法取得位置權限" +msgstr "" + +#: lib/app/settings/location/page.dart:79 +msgid "無法取得自啟動權限" +msgstr "" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "" + +#: lib/app/settings/location/page.dart:85 +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:86 +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" msgstr "" -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +msgid "監視器" +msgstr "" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" msgstr "" -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" msgstr "" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:926 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "" -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" msgstr "" -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" msgstr "" -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "" -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "" - -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +msgid "地動加速度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:274 +msgid "地動速度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Ясно" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "Ясно, дымка" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "Ясно, туман" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "Ясно, молния" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "Ясно, гром" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "Ясно, туман" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "Ясно, дождь" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "Ясно, дождь со снегом" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "Ясно, сильный снег" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "Ясно, снежная крупа" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "Ясно, ледяной дождь" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "Ясно, снежные заряды" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "Ясно, дождь со снегом" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "Ясно, град" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "Ясно, гроза" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "Ясно, дымка" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "Ясно, туман" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "Ясно, гром" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "Ясно, туман" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "Ясно, дождь" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "Ясно, град" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "" - diff --git a/assets/translations/strings.pot b/assets/translations/strings.pot index 1fb51a144..56288bd44 100644 --- a/assets/translations/strings.pot +++ b/assets/translations/strings.pot @@ -1,4 +1,4 @@ -#: ./lib/app/settings/location/page.dart:555 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "" @@ -14,27 +14,27 @@ msgstr "" msgid "單位" msgstr "" -#: ./lib/app/settings/map/page.dart:24 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "" -#: ./lib/app/settings/notify/page.dart:192 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "" @@ -42,15 +42,15 @@ msgstr "" msgid "雷雨即時訊息" msgstr "" -#: ./lib/app/settings/notify/page.dart:223 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/page.dart:236 +#: ./lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "" @@ -110,27 +110,27 @@ msgstr "" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:135 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:142 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:204 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:248 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:266 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "" @@ -326,23 +326,23 @@ msgstr "" msgid "來源語言" msgstr "" -#: ./lib/app/settings/donate/page.dart:38 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "" -#: ./lib/app/settings/donate/page.dart:44 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "" -#: ./lib/app/settings/donate/page.dart:105 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "" -#: ./lib/app/settings/donate/page.dart:115 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "" -#: ./lib/app/settings/donate/page.dart:132 +#: ./lib/app/settings/donate/page.dart:161 msgid "" "DPIP 作為一款致力於提供即時地震資訊的 " "App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n" @@ -350,39 +350,39 @@ msgid "" "您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" -#: ./lib/app/settings/donate/page.dart:141 +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "" -#: ./lib/app/settings/donate/page.dart:150 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "" -#: ./lib/app/settings/donate/page.dart:162 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "" -#: ./lib/app/settings/donate/page.dart:197 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "" -#: ./lib/app/settings/donate/page.dart:202 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "" -#: ./lib/app/settings/donate/page.dart:205 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "" -#: ./lib/app/settings/donate/page.dart:216 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "" -#: ./lib/app/settings/donate/page.dart:223 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "" @@ -466,30 +466,110 @@ msgstr "" msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "" -#: ./lib/app/settings/location/page.dart:422 +#: ./lib/app/settings/location/page.dart:76 +msgid "無法取得通知權限" +msgstr "" + +#: ./lib/app/settings/location/page.dart:78 +msgid "無法取得位置權限" +msgstr "" + +#: ./lib/app/settings/location/page.dart:79 +msgid "無法取得自啟動權限" +msgstr "" + +#: ./lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "" + +#: ./lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "" + +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgstr "" + +#: ./lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "" + +#: ./lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: ./lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "" -#: ./lib/app/settings/location/page.dart:423 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "" -#: ./lib/app/settings/location/page.dart:433 +#: ./lib/app/settings/location/page.dart:242 msgid "" "自動定位功能將使用您的裝置上的 GPS,即使 DPIP " "關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" msgstr "" -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" +#: ./lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" +#: ./lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" +#: ./lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" + +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" msgstr "" #: ./lib/app/settings/location/select/page.dart:26 @@ -500,19 +580,55 @@ msgstr "" msgid "目前所在地" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: ./lib/app/settings/map/page.dart:47 +msgid "監視器" +msgstr "" + +#: ./lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "" + +#: ./lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "" + +#: ./lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "" + +#: ./lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "" + +#: ./lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: ./lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "" -#: ./lib/app/settings/map/page.dart:49 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:71 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:99 +#: ./lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" @@ -544,10 +660,6 @@ msgstr "" msgid "使用系統顏色" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "" - #: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "" @@ -560,8 +672,8 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" +#: ./lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" msgstr "" #: ./lib/app/home/_widgets/weather_header.dart:127 @@ -572,33 +684,39 @@ msgstr "" msgid "尚未設定所在地" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:889 +#: ./lib/app/map/_lib/managers/monitor.dart:1100 msgid "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "" -#: ./lib/app/home/page.dart:55 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "" @@ -614,7 +732,7 @@ msgstr "" msgid "重試" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "" @@ -668,19 +786,15 @@ msgid "" "之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "" - -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "" @@ -688,175 +802,187 @@ msgstr "" msgid "儲存" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" +#: ./lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "" - -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: ./lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:267 +msgid "地動加速度:" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:274 +msgid "地動速度:" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: ./lib/app/map/_lib/managers/monitor.dart:865 +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "" @@ -916,10 +1042,6 @@ msgstr "" msgid "公告詳情" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "" - #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "" diff --git a/assets/translations/vi.po b/assets/translations/vi.po index 76601b952..a44f1078e 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -12,1197 +12,1424 @@ msgstr "" "Language: vi_VN\n" "PO-Revision-Date: 2025-07-23 03:45\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Vị Trí Hiện Tại" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "Ngôn ngữ" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "Bản đồ" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "Thông báo đẩy" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "Cảnh báo động đất sớm" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "giám sát động đất" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "Báo cáo động đất" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "Cảnh báo nhanh về cường độ địa chấn" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "Thông báo giông sét" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "Cảnh báo thời tiết" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "Thông tin di tản" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "Thông tin sóng thần" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "Thông báo" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "quyên tặng" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "Cài đặt" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "Cường độ tại địa phương từ 1 trở lên" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "Cường độ tại địa phương từ 4 trở lên" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "Kiểm tra âm thanh" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "Khi gửi thông báo" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "Cảnh báo động đất sớm" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "Khác" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" -msgstr "Khi phát hành cảnh báo sóng thần\n" +msgstr "" +"Khi phát hành cảnh báo sóng thần\n" "các xã, thị trấn ven biển" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "Nói chung" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" -msgstr "Khi cảnh báo sóng thần được ban hành.\n" +msgstr "" +"Khi cảnh báo sóng thần được ban hành.\n" "Các khu vực bị loại trừ khỏi các mục trên." -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "Tin tức về sóng thần Thái Bình Dương (Thông báo im lặng)" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "Khi tin tức về sóng thần Thái Bình Dương được công bố" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "Giám sát động đất mạnh(Chung)" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "Phát hiện rung chuyển" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "Báo cáo chớp nhoáng cường độ địa chấn (Chung)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "Cường độ thực đo tại địa phương (thị trấn) từ 3 trở lên" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "Báo cáo chớp nhoáng cường độ địa chấn (Thông báo im lặng)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "Cường độ thực đo tại địa phương (thị trấn) từ 1 trở lên" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "Báo cáo động đất (Chung)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "Cường độ thực đo tại địa phương (Quận và thành phố) từ 3 trở lên" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "Báo cáo động đất (Thông báo im lặng)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "Cường độ thực đo tại địa phương (Quận và thành phố) từ 1 trở lên" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "Cảnh báo động đất khẩn cấp (Lớn)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 4 trở lên" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Cảnh báo động đất (Nhỏ)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 2 trở lên" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Cảnn báo động đất (Im Lặng)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 1 trở lên" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "Báo cáo chớp nhoáng động đất (Lớn)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 4 trở lên" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "Cảnh báo sớm về động đất (Chung)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 2 trở lên" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "Báo cáo nhanh về động đất (im lặng)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 1 trở lên" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "Khi khu vực địa phương (thị trấn) ban hành cảnh báo sơ tán" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "Khi khu vực địa phương (thị trấn) thông báo thông tin sơ tán" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu đỏ" +msgstr "" +"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " +"tín hiệu đỏ" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu" +msgstr "" +"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " +"tín hiệu" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" msgstr "" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "Ngôn ngữ hiển thị" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "Ngôn ngữ hệ thống" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "Hỗ trợ biên dịch" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "Nhấp vào đây để giúp chúng tôi cải thiện bản dịch DPIP" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "Chọn ngôn ngữ" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Đã dịch {translated}・Đã hiệu đính {approved}" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "Ngôn ngữ nguồn" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "Không thể tải nhật ký thay đổi, vui lòng thử lại sau." -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" msgstr "" -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "" -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "Vị trí" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "Thiết lập vị trí để nhận thông tin địa phương theo thời gian thực" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "Nhật ký thay đổi" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" -msgstr "Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ của chúng tôi" +msgstr "" +"Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ " +"của chúng tôi" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "Giấy phép gói phần mềm của bên thứ ba" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "Gỡ lỗi" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "Đã sao chép Token thông báo" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "Nhật ký ứng dụng" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung ương (CWA) công bố." +msgstr "" +"Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung " +"ương (CWA) công bố." + +#: lib/app/settings/location/page.dart:76 +msgid "無法取得通知權限" +msgstr "" -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:78 +msgid "無法取得位置權限" +msgstr "" + +#: lib/app/settings/location/page.dart:79 +msgid "無法取得自啟動權限" +msgstr "" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "Chế độ nguồn điện thấp" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "" + +#: lib/app/settings/location/page.dart:85 +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:86 +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "Hủy bỏ" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "Cập nhật tự động" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "Cập nhật vị trí hiện tại định kỳ" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới nhất tại địa phương." +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động " +"cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết " +"và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới " +"nhất tại địa phương." -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "Thành phố trực thuộc trung ương/Tỉnh thành" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "Chưa đặt" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "Quận/Phường/Xã" +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "Quận" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "giám sát động đất" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "Hình ảnh radar" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "Nhiệt độ" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "Lượng mưa" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "Hướng gió/Tốc độ gió" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "Sáng" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "Tối" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "Theo chủ đề hệ thống" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "Chủ đề" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "Hủy bỏ" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "Xác nhận" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. Tình trạng này kéo dài đến {time}." +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. " +"Tình trạng này kéo dài đến {time}." -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" -msgstr "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài Loan." +msgstr "" +"Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài " +"Loan." -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "Hình ảnh radar" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "Chưa đặt" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "Bạn chưa thiết lập vị trí của mình" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:926 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "Ngoại lệ xảy ra khi thu thập thông tin thời tiết" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "Không thể tải nhật ký thay đổi, vui lòng thử lại sau." -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "Thử lại" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "Tiếp theo" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "Cổng thông tin phòng chống thiên tai" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "Chúng tôi là ai?" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và Nam), Nhật Bản, Hàn Quốc và Trung Quốc." +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có " +"độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và " +"Nam), Nhật Bản, Hàn Quốc và Trung Quốc." -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Chúng tôi đã bắt đầu với những gì" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra ngoài phạm vi trường học và trở thành nhóm như hiện nay." +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở " +"thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra " +"ngoài phạm vi trường học và trở thành nhóm như hiện nay." -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Những điều cần lưu ý" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, " +"trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin " +"có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như " +"vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." +msgstr "" +"Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do đó cần phải thận trọng và hiểu rõ." +msgstr "" +"Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do " +"đó cần phải thận trọng và hiểu rõ." -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân thủ các quy định có liên quan." +msgstr "" +"Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi " +"phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân " +"thủ các quy định có liên quan." -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Chào mừng đến với DPIP" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích " +"hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) " +"và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một " +"ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "Dịch vụ được sử dụng để gửi thông báo cảnh báo thiên tai khẩn cấp" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại khu vực hiện tại" - -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "Chế độ nguồn điện thấp" +msgstr "" +"Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại " +"khu vực hiện tại" -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm họa ngay lập tức." +msgstr "" +"Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm " +"họa ngay lập tức." -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "Lưu trữ hình" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) hoặc ExpTech." +msgstr "" +"Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung " +"ương (CWA) hoặc ExpTech." -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "Yêu cầu để xin phép" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." +msgstr "" +"Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "Sự cho phép" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của họ." +msgstr "" +"Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của " +"họ." -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "Nhiệt độ" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "Lượng mưa" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "Hướng gió/Tốc độ gió" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "Hôm nay" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 phút" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 ngày" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 ngày" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "Bản đồ gia tốc mặt đất tối đa" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "Bản đồ vận tốc mặt đất tối đa" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "Thêm" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "Động đất nhẹ, cảm nhận được ở khu vực nhỏ" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "Cường độ" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "Độ sâu chấn tiêu" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Trang báo cáo" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "Ngày giờ nhận biết động đất" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "nằm ở" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "Cường độ địa chấn tại các khu vực" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "Bản đồ báo cáo động đất" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "Bản đồ cường độ địa chấn" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "Bản đồ gia tốc mặt đất tối đa" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "Bản đồ vận tốc mặt đất tối đa" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Mùa hè" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "Đám mây" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "Ngày nhiều mây" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "" +#~ msgid "直轄市/縣市" +#~ msgstr "Thành phố trực thuộc trung ương/Tỉnh thành" + +#~ msgid "鄉鎮市區" +#~ msgstr "Quận/Phường/Xã" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index e8240ff30..3b80e1203 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -12,1201 +12,1418 @@ msgstr "" "Language: zh_CN\n" "PO-Revision-Date: 2025-08-11 02:40\n" -#: ./lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "所在地" -#: ./lib/app/settings/page.dart:52 +#: lib/app/settings/page.dart:52 msgid "主題" msgstr "主题" -#: ./lib/app/settings/page.dart:60 +#: lib/app/settings/page.dart:60 msgid "語言" msgstr "语言" -#: ./lib/app/settings/page.dart:68 +#: lib/app/settings/page.dart:68 msgid "單位" msgstr "单位" -#: ./lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地图" -#: ./lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: ./lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "紧急地震预警" -#: ./lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "强震监视器" -#: ./lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "地震报告" -#: ./lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "震度速报" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 +#: lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "雷雨即时信息" -#: ./lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天气警特报" -#: ./lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "避难信息" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "海啸信息" -#: ./lib/route/announcement/announcement.dart:82 +#: lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "公告" -#: ./lib/app/settings/page.dart:112 +#: lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "赞助我们" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "设置" -#: ./lib/app/settings/notify/page.dart:60 +#: lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "接收全部" -#: ./lib/app/settings/notify/page.dart:59 +#: lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "关闭" -#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "接收类别" -#: ./lib/app/settings/notify/page.dart:44 +#: lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "所在地震度1以上" -#: ./lib/app/settings/notify/page.dart:55 +#: lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "海啸信息、海啸警报" -#: ./lib/app/settings/notify/page.dart:54 +#: lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "只接收海啸警报" -#: ./lib/app/settings/notify/page.dart:50 +#: lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "接收所在地" -#: ./lib/app/settings/notify/page.dart:37 +#: lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "所在地震度4以上" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "音效测试" -#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "发送公告时" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音效。此测试不会向服务器发送任何请求" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音" +"效。此测试不会向服务器发送任何请求" -#: ./lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "请先设置所在地以使用通知功能" -#: ./lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震预警" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: ./lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天气" -#: ./lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "海啸" -#: ./lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "其他" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 msgid "重大" msgstr "重大" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +msgid "" +"海嘯警報發布時\n" "沿海地區鄉鎮" -msgstr "海啸警报发布时\n" +msgstr "" +"海啸警报发布时\n" "沿海地区乡镇" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "一般" msgstr "常规​​​​​" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "海嘯警報發布時\n" +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +msgid "" +"海嘯警報發布時\n" "上述除外地區" -msgstr "海啸警报发布时\n" +msgstr "" +"海啸警报发布时\n" "上述除外地区" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "太平洋海啸消息(无声通知)" -#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "太平洋海啸消息发布时" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "强震监视器(一般)" -#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "检测到晃动" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "震度速報(一般)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "所在地(乡镇)实测震度 3 以上" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "震度速報(无声通知)" -#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "所在地(乡镇)实测震度 1 以上" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "地震报告(一般)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "所在地(县市)实测震度 3 以上" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "地震报告(无声通知)" -#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "所在地(县市)实测震度 1 以上" -#: ./lib/app/settings/notify/_lib/utils.dart:13 +#: lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "已更新通知设定" -#: ./lib/app/settings/notify/_lib/utils.dart:17 +#: lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "更新通知设定失败" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "紧急地震预警(重大)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 4 以上" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "紧急地震预警(一般)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 2 以上" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "紧急地震预警(无声)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 1 以上" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "地震预警(重大)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "所在地(乡镇)预估震度 4 以上" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "地震预警(一般)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "所在地(乡镇)预估震度 2 以上" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "地震预警(无声)" -#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "所在地(乡镇)预估震度 1 以上" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布避難警訊時" msgstr "所在地(乡镇)发布避难警报时" -#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布避難資訊時" msgstr "所在地(乡镇)发布避难信息时" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "所在地(乡镇)发布红灯信号的\n" +msgstr "" +"所在地(乡镇)发布红灯信号的\n" "天气警特报" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "所在地(乡镇)发布上述除外灯信号的\n" +msgstr "" +"所在地(乡镇)发布上述除外灯信号的\n" "天气警特报" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "所在地(鄉鎮)發布雷雨即時訊息或\n" +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +msgid "" +"所在地(鄉鎮)發布雷雨即時訊息或\n" "山區暴雨時" -msgstr "所在地(乡镇)发布雷雨即时信息或\n" +msgstr "" +"所在地(乡镇)发布雷雨即时信息或\n" "山区暴雨时" -#: ./lib/app/settings/unit/page.dart:28 +#: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "使用华氏度" -#: ./lib/app/settings/unit/page.dart:29 +#: lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "切换温度显示单位为华氏度 (℉)" -#: ./lib/app/settings/locale/page.dart:31 +#: lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "显示语言" -#: ./lib/app/settings/locale/page.dart:32 +#: lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "系统语言" -#: ./lib/app/settings/locale/page.dart:40 +#: lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "协助翻译" -#: ./lib/app/settings/locale/page.dart:41 +#: lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "点击这里来帮助我们改进 DPIP 的翻译" -#: ./lib/app/settings/locale/select/page.dart:46 +#: lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "选择语言" -#: ./lib/app/settings/locale/select/page.dart:67 +#: lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "已翻译 {translated}・已校对 {approved}" -#: ./lib/app/settings/locale/select/page.dart:95 +#: lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "来源语言" -#: ./lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "无法连接到商店,请稍后再试" -#: ./lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "找不到商品,请稍后再试" -#: ./lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "重新加载" -#: ./lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "正在加载商店商品中" -#: ./lib/app/settings/donate/page.dart:132 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与维护的成本!\n\n" -"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定底,为您提供服务。感谢您的理解与慷慨!" - -#: ./lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:161 +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维" +"持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与" +"维护的成本!\n" +"\n" +"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定" +"底,为您提供服务。感谢您的理解与慷慨!" + +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "订阅制" -#: ./lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/月" -#: ./lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "单次支持" -#: ./lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "无法连接至 {store} ,请稍后再试。" -#: ./lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "正在恢复您购买的订阅" -#: ./lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "恢复购买" -#: ./lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "使用条款" -#: ./lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "隐私权政策" -#: ./lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" -#: ./lib/app/settings/page.dart:39 +#: lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "设置您的所在地,以接收本地的实时信息" -#: ./lib/app/settings/page.dart:48 +#: lib/app/settings/page.dart:48 msgid "介面" msgstr "界面" -#: ./lib/app/settings/page.dart:53 +#: lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "更改 DPIP 整体的外观与颜色" -#: ./lib/app/settings/page.dart:61 +#: lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "更改 DPIP 的显示语言" -#: ./lib/app/settings/page.dart:69 +#: lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "调整 DPIP 显示数值所使用的单位" -#: ./lib/app/settings/page.dart:75 +#: lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "调整 DPIP 地图的设置" -#: ./lib/app/settings/page.dart:87 +#: lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "设置推送通知及测试通知音效" -#: ./lib/app/settings/page.dart:94 +#: lib/app/settings/page.dart:94 msgid "資訊" msgstr "信息" -#: ./lib/app/settings/page.dart:99 +#: lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "掌握 ExpTech Studio 的最新公告与资讯" -#: ./lib/app/changelog/page.dart:54 +#: lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "更新日志" -#: ./lib/app/settings/page.dart:106 +#: lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "查看 DPIP 的更新记录" -#: ./lib/app/settings/page.dart:113 +#: lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "帮助我们维护服务器的稳定和长久发展" -#: ./lib/app/settings/page.dart:119 +#: lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "第三方套件授权" -#: ./lib/app/settings/page.dart:120 +#: lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP 的实现得益于开源项目的支持" -#: ./lib/app/settings/page.dart:162 +#: lib/app/settings/page.dart:162 msgid "除錯" msgstr "调试" -#: ./lib/app/settings/page.dart:166 +#: lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "应用程序版本" -#: ./lib/app/settings/page.dart:172 +#: lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "设备信息" -#: ./lib/app/settings/page.dart:178 +#: lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "复制通知 Token" -#: ./lib/app/debug/logs/page.dart:16 +#: lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "App 日志" -#: ./lib/app/welcome/3-notice/page.dart:58 +#: lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "任何信息应以中央气象署发布内容为准。" -#: ./lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:76 +#, fuzzy +msgid "無法取得通知權限" +msgstr "无法取得权限" + +#: lib/app/settings/location/page.dart:78 +#, fuzzy +msgid "無法取得位置權限" +msgstr "无法取得权限" + +#: lib/app/settings/location/page.dart:79 +#, fuzzy +msgid "無法取得自啟動權限" +msgstr "无法取得权限" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "省电策略" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "无法取得权限" + +#: lib/app/settings/location/page.dart:85 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" + +#: lib/app/settings/location/page.dart:86 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" + +#: lib/app/settings/location/page.dart:93 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "取消" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自动更新" -#: ./lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期更新当前位置" -#: ./lib/app/settings/location/page.dart:433 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新动态。" +#: lib/app/settings/location/page.dart:242 +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您" +"的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新" +"动态。" -#: ./lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "直辖市/县市" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "尚未设置" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "" -#: ./lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "乡镇市区" +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "县市" -#: ./lib/app/settings/location/select/page.dart:38 +#: lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "当前位置" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "强震监视器" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "雷达拼图" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "气温" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "降水" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "风向/风速" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "线条" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "底图" -#: ./lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "默认图层" -#: ./lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "动画帧率" -#: ./lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "过高的动画帧率可能会造成设备卡顿或发热" -#: ./lib/app/settings/theme/page.dart:30 +#: lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "主题模式" -#: ./lib/app/settings/theme/select/page.dart:57 +#: lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "浅色" -#: ./lib/app/settings/theme/select/page.dart:58 +#: lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "深色" -#: ./lib/app/settings/theme/select/page.dart:55 +#: lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "跟随系统主题" -#: ./lib/app/settings/theme/select/page.dart:22 +#: lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "主题色" -#: ./lib/app/settings/theme/page.dart:46 +#: lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "系统颜色" -#: ./lib/app/settings/theme/page.dart:88 +#: lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "使用系统颜色" -#: ./lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "取消" - -#: ./lib/route/image_viewer/image_viewer.dart:130 +#: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "确定" -#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" +#: lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" -#: ./lib/app/home/_widgets/location_out_of_service.dart:24 +#: lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "服务区域外,仅在台湾各地可用" -#: ./lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "雷达拼图" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "尚未设置" -#: ./lib/app/home/_widgets/weather_header.dart:127 +#: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "体感约 {apparent}°" -#: ./lib/app/home/_widgets/location_not_set_card.dart:30 +#: lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "尚未设定所在地" -#: ./lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "第 {serial} 报" -#: ./lib/app/map/_lib/managers/monitor.dart:889 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" +#: lib/app/map/_lib/managers/monitor.dart:1100 +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time} 左右,{location}附近发生有感地震,预计规模 " +"M{magnitude}、所在地最大震度{intensity}。" + +#: lib/app/map/_lib/managers/monitor.dart:926 +#, fuzzy +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time} 左右,{location}附近发生有感地震,预计规模 " +"M{magnitude}、所在地最大震度{intensity}。" -#: ./lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "所在地预估" -#: ./lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "震波" -#: ./lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: ./lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "抵达" -#: ./lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "已更新至 {version}" -#: ./lib/utils/weather_icon.dart:282 +#: lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "取得天气异常" -#: ./lib/app/changelog/page.dart:109 +#: lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "无法载入更新日志,请稍后再试。" -#: ./lib/app/changelog/page.dart:113 +#: lib/app/changelog/page.dart:113 msgid "重試" msgstr "重试" -#: ./lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "下一步" -#: ./lib/app/welcome/1-about/page.dart:60 +#: lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "防灾信息平台" -#: ./lib/app/welcome/2-exptech/page.dart:83 +#: lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "我们是谁?" -#: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的团体。成员来自台湾北中南、日本、韩国、中国的学生。" +#: lib/app/welcome/2-exptech/page.dart:88 +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的" +"团体。成员来自台湾北中南、日本、韩国、中国的学生。" -#: ./lib/app/welcome/2-exptech/page.dart:93 +#: lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "我们的初衷" -#: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形成现在的样子。" +#: lib/app/welcome/2-exptech/page.dart:98 +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形" +"成现在的样子。" -#: ./lib/app/welcome/3-notice/page.dart:38 +#: lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事项" -#: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可能性,我们会尽力避免此类情况,但不保证一定不会发生。" +#: lib/app/welcome/3-notice/page.dart:75 +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可" +"能性,我们会尽力避免此类情况,但不保证一定不会发生。" -#: ./lib/app/welcome/3-notice/page.dart:88 +#: lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "强烈摇晃有概率比通知早抵达用户所在地。" -#: ./lib/app/welcome/3-notice/page.dart:99 +#: lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" msgstr "地震速报为快速计算的结果,可能存在较大误差,应理解并谨慎使用。" -#: ./lib/app/welcome/3-notice/page.dart:110 +#: lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "任何不被官方所认可的行为均有可能承担法律风险,请务必遵守相关规范。" -#: ./lib/app/welcome/1-about/page.dart:40 +#: lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "欢迎使用 DPIP" -#: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" +#: lib/app/welcome/1-about/page.dart:81 +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信" +"息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" -#: ./lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "在重大灾害发生时以通知来传递即时防灾信息" -#: ./lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "使用定位来自动更新所在地设置,提供当地的即时防灾信息" -#: ./lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "省电策略" - -#: ./lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "允许DPIP在后台持续运行,以便获取实时防灾通知。" -#: ./lib/route/image_viewer/image_viewer.dart:228 +#: lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "储存" -#: ./lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "用于存储中央气象署或 ExpTech 提供的数据可视化图片" -#: ./lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "权限请求" -#: ./lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "需要用户手动前往设置开启相关权限。" -#: ./lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "权限" -#: ./lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "我们一直和用户站在一起,为用户的隐私而不断努力。" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地图图层" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "选择要显示的地图图层" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "线条" - -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "气象" -#: ./lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "气温" - -#: ./lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "降水" - -#: ./lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "风向/风速" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "长按设定播放起点" -#: ./lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "目前时间" -#: ./lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "播放起点" -#: ./lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "播放进度" -#: ./lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今天" -#: ./lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 分钟" -#: ./lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 天" -#: ./lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 天" -#: ./lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "峰值地震动加速度图" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "峰值最大地震动速度图" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "目前没有生效中的地震预警" -#: ./lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +#, fuzzy +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "规模 M{magnitude},所在地预估{intensity}" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "规模 M{magnitude},所在地预估{intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}秒后抵达" -#: ./lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "已抵达" -#: ./lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "近期地震报告" -#: ./lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "更多" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "序号 {number} 显著有感地震" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "小区域有感地震" -#: ./lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "地震震级" -#: ./lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "震源深度" -#: ./lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "报告详情" -#: ./lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "发震时刻" -#: ./lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "位于" -#: ./lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "各地震度" -#: ./lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "地震报告图" -#: ./lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "震度图" -#: ./lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "峰值地震动加速度图" -#: ./lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "峰值最大地震动速度图" -#: ./lib/route/announcement/announcement.dart:12 +#: lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "错误" -#: ./lib/route/announcement/announcement.dart:13 +#: lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "已解决" -#: ./lib/route/announcement/announcement.dart:14 +#: lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "影响:小" -#: ./lib/route/announcement/announcement.dart:15 +#: lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "影响:中" -#: ./lib/route/announcement/announcement.dart:16 +#: lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "影响:大" -#: ./lib/route/announcement/announcement.dart:18 +#: lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "维护" -#: ./lib/route/announcement/announcement.dart:19 +#: lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "测试" -#: ./lib/route/announcement/announcement.dart:20 +#: lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "变更" -#: ./lib/route/announcement/announcement.dart:21 +#: lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "完成" -#: ./lib/route/announcement/announcement.dart:22 +#: lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "地震相关信息" -#: ./lib/route/announcement/announcement.dart:23 +#: lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "气象相关信息" -#: ./lib/route/announcement/announcement.dart:29 +#: lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "未知" -#: ./lib/route/announcement/announcement.dart:103 +#: lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "目前没有通知" -#: ./lib/route/announcement/announcement.dart:223 +#: lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "通知详情" -#: ./lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "无法取得权限" - -#: ./lib/route/image_viewer/image_viewer.dart:59 +#: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" -#: ./lib/route/image_viewer/image_viewer.dart:70 +#: lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "再试一次" -#: ./lib/route/image_viewer/image_viewer.dart:110 +#: lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "已存储图片" -#: ./lib/route/image_viewer/image_viewer.dart:126 +#: lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "存储图片时发生错误" -#: ./lib/utils/extensions/int.dart:13 +#: lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0级" -#: ./lib/utils/extensions/int.dart:14 +#: lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1级" -#: ./lib/utils/extensions/int.dart:15 +#: lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2级" -#: ./lib/utils/extensions/int.dart:16 +#: lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3级" -#: ./lib/utils/extensions/int.dart:17 +#: lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4级" -#: ./lib/utils/extensions/int.dart:18 +#: lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5弱" -#: ./lib/utils/extensions/int.dart:19 +#: lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5强" -#: ./lib/utils/extensions/int.dart:20 +#: lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6弱" -#: ./lib/utils/extensions/int.dart:21 +#: lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6强" -#: ./lib/utils/extensions/int.dart:22 +#: lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7级" -#: ./lib/utils/weather_icon.dart:283 +#: lib/utils/weather_icon.dart:283 msgid "晴" msgstr "晴" -#: ./lib/utils/weather_icon.dart:284 +#: lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "晴天有霾" -#: ./lib/utils/weather_icon.dart:285 +#: lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "晴有霭" -#: ./lib/utils/weather_icon.dart:286 +#: lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "晴有闪电" -#: ./lib/utils/weather_icon.dart:302 +#: lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "晴天有雷" -#: ./lib/utils/weather_icon.dart:288 +#: lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "晴有雾" -#: ./lib/utils/weather_icon.dart:289 +#: lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "晴天有雨" -#: ./lib/utils/weather_icon.dart:290 +#: lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "晴天有雨夹雪" -#: ./lib/utils/weather_icon.dart:291 +#: lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "晴天有大雪" -#: ./lib/utils/weather_icon.dart:292 +#: lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "晴天有雪丸" -#: ./lib/utils/weather_icon.dart:293 +#: lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "晴天有冰丸" -#: ./lib/utils/weather_icon.dart:294 +#: lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "晴有阵雪" -#: ./lib/utils/weather_icon.dart:295 +#: lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "晴阵雨雪" -#: ./lib/utils/weather_icon.dart:296 +#: lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "晴天有冰雹" -#: ./lib/utils/weather_icon.dart:297 +#: lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "晴天有雷阵雨" -#: ./lib/utils/weather_icon.dart:298 +#: lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "晴天有雷雪" -#: ./lib/utils/weather_icon.dart:299 +#: lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "晴天有雷冰雹" -#: ./lib/utils/weather_icon.dart:300 +#: lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "晴天有强雷阵雨" -#: ./lib/utils/weather_icon.dart:301 +#: lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "晴天有强雷冰雹" -#: ./lib/utils/weather_icon.dart:303 +#: lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "局部多云" -#: ./lib/utils/weather_icon.dart:304 +#: lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "局部多云有霾" -#: ./lib/utils/weather_icon.dart:305 +#: lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "局部多云有薄雾" -#: ./lib/utils/weather_icon.dart:306 +#: lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "局部多云有闪电" -#: ./lib/utils/weather_icon.dart:322 +#: lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "局部多云有雷" -#: ./lib/utils/weather_icon.dart:308 +#: lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "局部多云有雾" -#: ./lib/utils/weather_icon.dart:309 +#: lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "局部多云有雨" -#: ./lib/utils/weather_icon.dart:310 +#: lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "局部多云有雨夹雪" -#: ./lib/utils/weather_icon.dart:311 +#: lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "局部多云有大雪" -#: ./lib/utils/weather_icon.dart:312 +#: lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "局部多云有雪丸" -#: ./lib/utils/weather_icon.dart:313 +#: lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "局部多云有冰丸" -#: ./lib/utils/weather_icon.dart:314 +#: lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "局部多云有阵雪" -#: ./lib/utils/weather_icon.dart:315 +#: lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "局部多云有阵雨夹雪" -#: ./lib/utils/weather_icon.dart:316 +#: lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "局部多云有冰雹" -#: ./lib/utils/weather_icon.dart:317 +#: lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "局部多云有雷阵雨" -#: ./lib/utils/weather_icon.dart:318 +#: lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "局部多云有雷雪" -#: ./lib/utils/weather_icon.dart:319 +#: lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "局部多云有雷冰雹" -#: ./lib/utils/weather_icon.dart:320 +#: lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "局部多云有强雷阵雨" -#: ./lib/utils/weather_icon.dart:321 +#: lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "局部多云有强雷冰雹" -#: ./lib/utils/weather_icon.dart:323 +#: lib/utils/weather_icon.dart:323 msgid "陰" msgstr "阴" -#: ./lib/utils/weather_icon.dart:324 +#: lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "晴有霾" -#: ./lib/utils/weather_icon.dart:325 +#: lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "晴有霭" -#: ./lib/utils/weather_icon.dart:326 +#: lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "阴天有闪电" -#: ./lib/utils/weather_icon.dart:342 +#: lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "晴天伴有雷" -#: ./lib/utils/weather_icon.dart:328 +#: lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "晴有雾" -#: ./lib/utils/weather_icon.dart:329 +#: lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "晴有雨" -#: ./lib/utils/weather_icon.dart:330 +#: lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "阴天有雨夹雪" -#: ./lib/utils/weather_icon.dart:331 +#: lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "阴天有雷雪" -#: ./lib/utils/weather_icon.dart:332 +#: lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "阴天有雪丸" -#: ./lib/utils/weather_icon.dart:333 +#: lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "阴天有冰丸" -#: ./lib/utils/weather_icon.dart:334 +#: lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "阴天有阵雪" -#: ./lib/utils/weather_icon.dart:335 +#: lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "阴天有阵雨夹雪" -#: ./lib/utils/weather_icon.dart:336 +#: lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "晴有雹" -#: ./lib/utils/weather_icon.dart:337 +#: lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "阴天有雷阵雨" -#: ./lib/utils/weather_icon.dart:338 +#: lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "阴天有雷雪" -#: ./lib/utils/weather_icon.dart:339 +#: lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "阴天有雷冰雹" -#: ./lib/utils/weather_icon.dart:340 +#: lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "阴天有强雷阵雨" -#: ./lib/utils/weather_icon.dart:341 +#: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "阴天有强雷冰雹" +#~ msgid "直轄市/縣市" +#~ msgstr "直辖市/县市" + +#~ msgid "鄉鎮市區" +#~ msgstr "乡镇市区" diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index e29eb0d2b..7588bc956 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -28,27 +28,27 @@ msgstr "語言" msgid "單位" msgstr "單位" -#: lib/app/settings/map/page.dart:24 +#: lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地圖" -#: lib/app/welcome/4-permissions/page.dart:155 +#: lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: lib/app/map/_lib/managers/monitor.dart:864 +#: lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "緊急地震速報" -#: lib/app/map/_lib/managers/monitor.dart:706 +#: lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "強震監視器" -#: lib/app/map/_lib/managers/report.dart:814 +#: lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "地震報告" -#: lib/app/settings/notify/page.dart:192 +#: lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "震度速報" @@ -56,15 +56,15 @@ msgstr "震度速報" msgid "雷雨即時訊息" msgstr "雷雨即時訊息" -#: lib/app/settings/notify/page.dart:223 +#: lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天氣警特報" -#: lib/app/settings/notify/page.dart:236 +#: lib/app/settings/notify/page.dart:235 msgid "避難資訊" msgstr "避難資訊" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:176 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "海嘯資訊" @@ -128,27 +128,27 @@ msgstr "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" -#: lib/app/settings/notify/page.dart:135 +#: lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "請先設定所在地來使用通知功能" -#: lib/app/settings/notify/page.dart:142 +#: lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震速報" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:160 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: lib/app/settings/notify/page.dart:204 +#: lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天氣" -#: lib/app/settings/notify/page.dart:248 +#: lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "海嘯" -#: lib/app/settings/notify/page.dart:266 +#: lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "其他" @@ -360,23 +360,23 @@ msgstr "已翻譯 {translated}・已校對 {approved}" msgid "來源語言" msgstr "來源語言" -#: lib/app/settings/donate/page.dart:38 +#: lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "無法連線至商店,請稍後再試" -#: lib/app/settings/donate/page.dart:44 +#: lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "找不到商品,請稍候再試" -#: lib/app/settings/donate/page.dart:105 +#: lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "重新載入" -#: lib/app/settings/donate/page.dart:115 +#: lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "正在載入商店物品中" -#: lib/app/settings/donate/page.dart:132 +#: lib/app/settings/donate/page.dart:161 msgid "" "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" "持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" @@ -392,40 +392,40 @@ msgstr "" "您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" "為您提供服務。感謝您的理解與慷慨!" -#: lib/app/settings/donate/page.dart:141 +#: lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "訂閱制" -#: lib/app/settings/donate/page.dart:150 +#: lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/月" -#: lib/app/settings/donate/page.dart:162 +#: lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "單次支援" -#: lib/app/settings/donate/page.dart:197 +#: lib/app/settings/donate/page.dart:284 #, fuzzy msgid "無法連線至 {store},請稍後再試。" msgstr "無法連線至 {store},請稍後再試。" -#: lib/app/settings/donate/page.dart:202 +#: lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "正在恢復您購買的訂閱" -#: lib/app/settings/donate/page.dart:205 +#: lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "恢復購買" -#: lib/app/settings/donate/page.dart:216 +#: lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "使用條款" -#: lib/app/settings/donate/page.dart:223 +#: lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "隱私權政策" -#: lib/app/welcome/4-permissions/page.dart:163 +#: lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" @@ -509,15 +509,129 @@ msgstr "App 日誌" msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "任何資訊應以中央氣象署發布之內容為準。" -#: lib/app/settings/location/page.dart:422 +#: lib/app/settings/location/page.dart:76 +#, fuzzy +msgid "無法取得通知權限" +msgstr "無法取得通知權限" + +#: lib/app/settings/location/page.dart:78 +#, fuzzy +msgid "無法取得位置權限" +msgstr "無法取得位置權限" + +#: lib/app/settings/location/page.dart:79 +#, fuzzy +msgid "無法取得自啟動權限" +msgstr "無法取得自啟動權限" + +#: lib/app/welcome/4-permissions/page.dart:167 +msgid "省電策略" +msgstr "省電策略" + +#: lib/route/image_viewer/image_viewer.dart:57 +msgid "無法取得權限" +msgstr "無法取得權限" + +#: lib/app/settings/location/page.dart:85 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" +msgstr "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" + +#: lib/app/settings/location/page.dart:86 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" +msgstr "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" + +#: lib/app/settings/location/page.dart:89 +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" + +#: lib/app/settings/location/page.dart:90 +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" + +#: lib/app/settings/location/page.dart:91 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" +msgstr "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" + +#: lib/app/settings/location/page.dart:92 +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" + +#: lib/app/settings/location/page.dart:93 +#, fuzzy +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" +msgstr "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" + +#: lib/route/image_viewer/image_viewer.dart:64 +msgid "取消" +msgstr "取消" + +#: lib/app/settings/location/page.dart:163 +msgid "自動啟動" +msgstr "自動啟動" + +#: lib/app/settings/location/page.dart:164 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" +msgstr "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" + +#: lib/app/settings/location/page.dart:186 +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" +msgstr "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" + +#: lib/app/settings/location/page.dart:220 +msgid "一律允許" +msgstr "一律允許" + +#: lib/app/settings/location/page.dart:220 +msgid "永遠" +msgstr "永遠" + +#: lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自動更新" -#: lib/app/settings/location/page.dart:423 +#: lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期更新目前的所在地" -#: lib/app/settings/location/page.dart:433 +#: lib/app/settings/location/page.dart:242 msgid "" "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" "地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" @@ -527,17 +641,25 @@ msgstr "" "地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" "狀況。" -#: lib/app/settings/location/page.dart:564 -msgid "直轄市/縣市" -msgstr "直轄市/縣市" +#: lib/app/settings/location/page.dart:301 +msgid "通知功能已被拒絕,請移至設定允許權限。" +msgstr "通知功能已被拒絕,請移至設定允許權限。" -#: lib/app/home/_widgets/location_button.dart:21 -msgid "尚未設定" -msgstr "尚未設定" +#: lib/app/settings/location/page.dart:326 +msgid "自啟動權限已被拒絕,請移至設定允許權限。" +msgstr "自啟動權限已被拒絕,請移至設定允許權限。" -#: lib/app/settings/location/page.dart:592 -msgid "鄉鎮市區" -msgstr "鄉鎮市區" +#: lib/app/settings/location/page.dart:352 +msgid "省電策略已被拒絕,請移至設定允許權限。" +msgstr "省電策略已被拒絕,請移至設定允許權限。" + +#: lib/app/settings/location/page.dart:413 +msgid "設定所在地時發生錯誤,請稍候再試一次。" +msgstr "設定所在地時發生錯誤,請稍候再試一次。" + +#: lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "新增地點" #: lib/app/settings/location/select/page.dart:26 msgid "縣市" @@ -547,19 +669,56 @@ msgstr "縣市" msgid "目前所在地" msgstr "目前所在地" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:138 +#: lib/app/settings/map/page.dart:47 +#, fuzzy +msgid "監視器" +msgstr "監視器" + +#: lib/app/map/_lib/managers/radar.dart:495 +msgid "雷達回波" +msgstr "雷達回波" + +#: lib/app/map/_lib/managers/temperature.dart:371 +msgid "氣溫" +msgstr "氣溫" + +#: lib/app/map/_lib/managers/precipitation.dart:457 +msgid "降水" +msgstr "降水" + +#: lib/app/map/_lib/managers/wind.dart:264 +msgid "風向/風速" +msgstr "風向/風速" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "線條" +msgstr "線條" + +#: lib/app/settings/map/page.dart:57 +msgid "OpenStreetMap" +msgstr "OpenStreetMap" + +#: lib/app/settings/map/page.dart:58 +msgid "Google" +msgstr "Google" + +#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "底圖" -#: lib/app/settings/map/page.dart:49 +#: lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "初始圖層" -#: lib/app/settings/map/page.dart:71 +#: lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "動畫幀率" -#: lib/app/settings/map/page.dart:99 +#: lib/app/settings/map/page.dart:110 +msgid "影響強震監視器的震波模擬動畫流暢度" +msgstr "影響強震監視器的震波模擬動畫流暢度" + +#: lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "過高的動畫幀率可能會造成卡頓或設備發熱" @@ -591,10 +750,6 @@ msgstr "系統色彩" msgid "使用系統顏色" msgstr "使用系統顏色" -#: lib/route/image_viewer/image_viewer.dart:64 -msgid "取消" -msgstr "取消" - #: lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "確定" @@ -609,9 +764,9 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "服務區域外,僅在臺灣各地可用" -#: lib/app/map/_lib/managers/radar.dart:499 -msgid "雷達回波" -msgstr "雷達回波" +#: lib/app/home/_widgets/location_button.dart:21 +msgid "尚未設定" +msgstr "尚未設定" #: lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" @@ -621,11 +776,11 @@ msgstr "體感約 {apparent}°" msgid "尚未設定所在地" msgstr "尚未設定所在地" -#: lib/app/map/_lib/managers/monitor.dart:874 +#: lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "第 {serial} 報" -#: lib/app/map/_lib/managers/monitor.dart:889 +#: lib/app/map/_lib/managers/monitor.dart:1100 msgid "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" @@ -633,23 +788,32 @@ msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" -#: lib/app/map/_lib/managers/monitor.dart:923 +#: lib/app/map/_lib/managers/monitor.dart:926 +#, fuzzy +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" + +#: lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "所在地預估" -#: lib/app/map/_lib/managers/monitor.dart:957 +#: lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "震波" -#: lib/app/map/_lib/managers/monitor.dart:978 +#: lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: lib/app/map/_lib/managers/monitor.dart:994 +#: lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "抵達" -#: lib/app/home/page.dart:55 +#: lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "已更新至 {version}" @@ -665,7 +829,7 @@ msgstr "無法載入更新日誌,請稍後再試。" msgid "重試" msgstr "重試" -#: lib/app/welcome/4-permissions/page.dart:366 +#: lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "下一步" @@ -733,19 +897,15 @@ msgstr "" "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" "訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -#: lib/app/welcome/4-permissions/page.dart:156 +#: lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "在重大災害發生時以通知來傳遞即時防災資訊" -#: lib/app/welcome/4-permissions/page.dart:164 +#: lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -#: lib/app/welcome/4-permissions/page.dart:169 -msgid "省電策略" -msgstr "省電策略" - -#: lib/app/welcome/4-permissions/page.dart:170 +#: lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" @@ -753,176 +913,191 @@ msgstr "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。 msgid "儲存" msgstr "儲存" -#: lib/app/welcome/4-permissions/page.dart:177 +#: lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -#: lib/app/welcome/4-permissions/page.dart:344 +#: lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "權限請求" -#: lib/app/welcome/4-permissions/page.dart:345 +#: lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "需要使用者手動到設定開啟相關權限。" -#: lib/app/welcome/4-permissions/page.dart:385 +#: lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "權限" -#: lib/app/welcome/4-permissions/page.dart:398 +#: lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:131 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地圖圖層" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:132 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "選擇要顯示的地圖圖層" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 -msgid "線條" -msgstr "線條" - -#: lib/app/map/_widgets/layer_toggle_sheet.dart:182 +#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "氣象" -#: lib/app/map/_lib/managers/temperature.dart:332 -msgid "氣溫" -msgstr "氣溫" - -#: lib/app/map/_lib/managers/precipitation.dart:445 -msgid "降水" -msgstr "降水" - -#: lib/app/map/_lib/managers/wind.dart:223 -msgid "風向/風速" -msgstr "風向/風速" +#: lib/app/map/_widgets/map_legend.dart:181 +msgid "單位:{unit}" +msgstr "單位:{unit}" -#: lib/app/map/_lib/managers/radar.dart:613 +#: lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "長按設定播放起點" -#: lib/app/map/_lib/managers/radar.dart:627 +#: lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "目前時間" -#: lib/app/map/_lib/managers/radar.dart:632 +#: lib/app/map/_lib/managers/radar.dart:628 #, fuzzy msgid "播放起點" msgstr "播放起點" -#: lib/app/map/_lib/managers/radar.dart:906 +#: lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "播放進度" -#: lib/app/map/_lib/managers/precipitation.dart:305 +#: lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今日" -#: lib/app/map/_lib/managers/precipitation.dart:306 +#: lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 分鐘" -#: lib/app/map/_lib/managers/precipitation.dart:307 +#: lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 小時" -#: lib/app/map/_lib/managers/precipitation.dart:308 +#: lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 小時" -#: lib/app/map/_lib/managers/precipitation.dart:309 +#: lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 小時" -#: lib/app/map/_lib/managers/precipitation.dart:310 +#: lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 小時" -#: lib/app/map/_lib/managers/precipitation.dart:311 +#: lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 小時" -#: lib/app/map/_lib/managers/precipitation.dart:312 +#: lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 天" -#: lib/app/map/_lib/managers/precipitation.dart:313 +#: lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 天" -#: lib/app/map/_lib/managers/monitor.dart:714 +#: lib/app/map/_lib/managers/monitor.dart:239 +msgid "海外測站" +msgstr "海外測站" + +#: lib/app/map/_lib/managers/monitor.dart:261 +msgid "即時震度:" +msgstr "即時震度:" + +#: lib/app/map/_lib/managers/monitor.dart:267 +#, fuzzy +msgid "地動加速度:" +msgstr "地動加速度:" + +#: lib/app/map/_lib/managers/monitor.dart:274 +#, fuzzy +msgid "地動速度:" +msgstr "地動速度:" + +#: lib/app/map/_lib/managers/monitor.dart:279 +msgid "無資料" +msgstr "無資料" + +#: lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "目前沒有生效中的地震速報" -#: lib/app/map/_lib/managers/monitor.dart:808 +#: lib/app/map/_lib/managers/monitor.dart:865 +#, fuzzy +msgid "規模 M{magnitude},深度{depth}公里" +msgstr "規模 M{magnitude},深度{depth}公里" + +#: lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "規模 M{magnitude},所在地預估{intensity}" -#: lib/app/map/_lib/managers/monitor.dart:824 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}秒後抵達" -#: lib/app/map/_lib/managers/monitor.dart:825 +#: lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "已抵達" -#: lib/app/map/_lib/managers/report.dart:371 +#: lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "近期的地震報告" -#: lib/app/map/_lib/managers/report.dart:376 +#: lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "更多" -#: lib/app/map/_lib/managers/report.dart:592 +#: lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "編號 {number} 顯著有感地震" -#: lib/app/map/_lib/managers/report.dart:593 +#: lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "小區域有感地震" -#: lib/app/map/_lib/managers/report.dart:652 +#: lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "地震規模" -#: lib/app/map/_lib/managers/report.dart:674 +#: lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "震源深度" -#: lib/app/map/_lib/managers/report.dart:611 +#: lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "報告頁面" -#: lib/app/map/_lib/managers/report.dart:635 +#: lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "發震時間" -#: lib/app/map/_lib/managers/report.dart:642 +#: lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "位於" -#: lib/app/map/_lib/managers/report.dart:698 +#: lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "各地震度" -#: lib/app/map/_lib/managers/report.dart:769 +#: lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "地震報告圖" -#: lib/app/map/_lib/managers/report.dart:779 +#: lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "震度圖" -#: lib/app/map/_lib/managers/report.dart:789 +#: lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "最大地動加速度圖" -#: lib/app/map/_lib/managers/report.dart:799 +#: lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "最大地動速度圖" @@ -983,10 +1158,6 @@ msgstr "目前沒有公告" msgid "公告詳情" msgstr "公告詳情" -#: lib/route/image_viewer/image_viewer.dart:57 -msgid "無法取得權限" -msgstr "無法取得權限" - #: lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" @@ -1271,6 +1442,12 @@ msgstr "陰大雷雨" msgid "陰大雷雹" msgstr "陰大雷雹" +#~ msgid "直轄市/縣市" +#~ msgstr "直轄市/縣市" + +#~ msgid "鄉鎮市區" +#~ msgstr "鄉鎮市區" + #, fuzzy #~ msgid "同步通知設定" #~ msgstr "同步通知設定" diff --git a/tools/update_translations.sh b/tools/update_translations.sh index 6b7d0b331..edaf206ce 100755 --- a/tools/update_translations.sh +++ b/tools/update_translations.sh @@ -39,13 +39,10 @@ fi PO_DIR="./assets/translations" POT_FILE="$PO_DIR/strings.pot" -# 檢查 .pot 檔案是否存在 -if [ ! -f "$POT_FILE" ]; then - # 執行 i18n 擴充功能匯入器 - echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot${RESET}" - dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot - echo -fi +# 執行 i18n 擴充功能匯入器 +echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot${RESET}" +dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot +echo # 更新每個 .po 檔案 for po_file in "$PO_DIR"/*.po; do From 9caac7a92bb8db9a0c67b3bca8c5acfe9ef64093 Mon Sep 17 00:00:00 2001 From: Lingling Date: Tue, 12 Aug 2025 17:15:51 +0800 Subject: [PATCH 21/59] fix: notify text (#371) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: text * fix: notify txet * i18n --- assets/notify_test.json | 2 +- assets/translations/en.po | 49 +++++++++----- assets/translations/ja.po | 51 +++++++++------ assets/translations/ko.po | 47 +++++++++----- assets/translations/ru.po | 28 ++++---- assets/translations/strings.pot | 28 ++++---- assets/translations/vi.po | 53 +++++++++------ assets/translations/zh-Hans.po | 53 +++++++++------ assets/translations/zh-Hant.po | 65 +++++++++++-------- docs/sound.mdx | 17 +++-- .../notify/(3.weather)/evacuation/page.dart | 4 +- .../notify/(3.weather)/thunderstorm/page.dart | 7 +- .../notify/(4.tsunami)/tsunami/page.dart | 4 +- lib/app/settings/notify/page.dart | 2 +- lib/core/notify.dart | 32 ++++++--- lib/router.dart | 2 +- 16 files changed, 272 insertions(+), 172 deletions(-) diff --git a/assets/notify_test.json b/assets/notify_test.json index 30f82ba6f..87169754e 100644 --- a/assets/notify_test.json +++ b/assets/notify_test.json @@ -1 +1 @@ -{"eew_alert-important-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-general-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-silent-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew-important-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-general-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-silence-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"int_report-general-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"int_report-silence-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"eq-v2":{"title":"📡 強震監視器","body":"臺南市歸仁區 偵測到晃動"},"report-general-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"report-silence-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"thunderstorm-general-v2":{"title":"⛈️ 雷雨即時訊息","body":"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至08/26 17:30"},"weather_major-important-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]超大豪雨特報"},"weather_minor-general-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]大雨特報\n對流雲系發展旺盛,易有短延時強降雨,新北市已有豪雨發生,今(7日)晚至明(8日)晨基隆北海岸、彰化、雲林、南投、東半部地區及大臺北山區有局部大雨發生的機率,請注意雷擊及強陣風,山區慎防坍方、落石及溪水暴漲。"},"evacuation_major-important-v2":{"title":"🚨 土石流及大規模崩塌警戒","body":"花蓮縣秀林鄉景美村三棧國小(花縣DF174),1小時累積雨量已達2mm、3小時累積雨量已達4.5mm、24小時累積雨量已達304mm,請提高警覺。"},"evacuation_minor-general-v2":{"title":"⚠️ 土石流及大規模崩塌警戒","body":"高雄市桃源區勤和里(玉穗溪)1小時累積雨量已達18.5mm、3小時累積雨量已達18.5mm、24小時累積雨量已達18.5mm,請提高警覺。"},"tsunami-important-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-general-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-silent-v2":{"title":"🌊 太平洋海嘯消息","body":"頃獲太平洋海嘯警報中心通報,2024年08月18日03時10分(臺灣時間),俄羅斯 堪察加半島東部外海發生規模7﹒4地震,震央位於東經160﹒10度、北緯52﹒70度。該中心研判可能在太平洋地區引發海嘯威脅,氣象署將嚴密監視海嘯的後續影響,隨時提供最新資訊。"},"announcement-general-v2":{"title":"📢 公告","body":"這是一則測試公告。"}} \ No newline at end of file +{"eew_alert-important-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-general-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-silent-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew-important-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-general-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-silence-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"int_report-general-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"int_report-silence-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"eq-v2":{"title":"📡 強震監視器","body":"臺南市歸仁區 偵測到晃動"},"report-general-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"report-silence-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"thunderstorm-important-v2":{"title":"⛈️ 山區暴雨","body":"您所在區域附近有暴雨發生的機率,留意溪水暴漲並儘速遠離溪流,持續至8/4 16:34"},"thunderstorm-general-v2":{"title":"⛈️ 雷雨即時訊息","body":"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至08/26 17:30"},"weather_major-important-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]超大豪雨特報"},"weather_minor-general-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]大雨特報\n對流雲系發展旺盛,易有短延時強降雨,新北市已有豪雨發生,今(7日)晚至明(8日)晨基隆北海岸、彰化、雲林、南投、東半部地區及大臺北山區有局部大雨發生的機率,請注意雷擊及強陣風,山區慎防坍方、落石及溪水暴漲。"},"evacuation_major-important-v2":{"title":"🌧️ 防災資訊(短時極端降雨紀錄)","body":"臺南市永康區(CAN040 國一N323K) 1 小時累積雨量達到 91.5 mm/hr,請注意自身安全。"},"evacuation_minor-general-v2":{"title":"⚠️ 防災資訊(河川水位-注意)","body":"北寮橋 (水位 73.5m) 已達二級警戒,提高警覺,並密切注意水情變化。"},"tsunami-important-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-general-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-silent-v2":{"title":"🌊 太平洋海嘯消息","body":"頃獲太平洋海嘯警報中心通報,2024年08月18日03時10分(臺灣時間),俄羅斯 堪察加半島東部外海發生規模7﹒4地震,震央位於東經160﹒10度、北緯52﹒70度。該中心研判可能在太平洋地區引發海嘯威脅,氣象署將嚴密監視海嘯的後續影響,隨時提供最新資訊。"},"announcement-general-v2":{"title":"📢 公告","body":"這是一則測試公告。"}} \ No newline at end of file diff --git a/assets/translations/en.po b/assets/translations/en.po index e62a484a2..0e49c6550 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "Weather Advisory" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "Evacuation information" +#, fuzzy +msgid "防災資訊" +msgstr "Disaster Prevention Information Platform" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "Sound Test" msgid "發送公告時" msgstr "When sending an announcement" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -153,25 +154,23 @@ msgstr "Tsunami" msgid "其他" msgstr "Other" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "Severe" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" msgstr "When a tsunami warning is issued for coastal towns and townships" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "General" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "When a tsunami warning is issued for non-coastal areas" +#, fuzzy +msgid "海嘯消息發布時" +msgstr "When the Pacific information is issued" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -290,11 +289,13 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 1" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "When the local area(township) issues an evacuating warning" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "When the local area(township) issues an evacuating warning" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -314,9 +315,15 @@ msgstr "" "Weather Warning" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "" +"The location (township) issues instant thunderstorm information or\n" +"Heavy rain in mountainous areas" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" "The location (township) issues instant thunderstorm information or\n" "Heavy rain in mountainous areas" @@ -1454,6 +1461,14 @@ msgstr "Cloudy with heavy thunderstorm" msgid "陰大雷雹" msgstr "Heavy thunder and hail" +#~ msgid "避難資訊" +#~ msgstr "Evacuation information" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "When a tsunami warning is issued for non-coastal areas" + #~ msgid "直轄市/縣市" #~ msgstr "Special Municipality/County" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index 945aa49f7..f412a25d9 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "天気警報" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "避難情報" +#, fuzzy +msgid "防災資訊" +msgstr "防災情報プラットフォーム" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "サウンドテスト" msgid "發送公告時" msgstr "通知受信時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -152,29 +153,25 @@ msgstr "津波" msgid "其他" msgstr "その他" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" msgstr "" "津波警報が発令された時\n" "沿岸地域" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "一般" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "" -"津波警報が発令された時\n" -"沿岸地域を除いた地域" +#, fuzzy +msgid "海嘯消息發布時" +msgstr "太平洋津波情報発信された時" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -293,11 +290,13 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "現在地(郷/鎮)測りにより震度 1 超え" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "現在地(郷/鎮)に避難注意報が発令された時" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "現在地(郷/鎮)に避難情報が発信された時" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -313,9 +312,13 @@ msgid "" msgstr "現在地(郷/鎮)にその以外の天気注意報/特報が発令され" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "現在地(郷/鎮)に雷雨/山地にわか雨リアルタイム情報が発信された時" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "現在地(郷/鎮)に雷雨/山地にわか雨リアルタイム情報が発信された時" #: lib/app/settings/unit/page.dart:28 @@ -1442,6 +1445,16 @@ msgstr "曇りのち雨、大雷あり" msgid "陰大雷雹" msgstr "曇りのち大雹、大雷あり" +#~ msgid "避難資訊" +#~ msgstr "避難情報" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "" +#~ "津波警報が発令された時\n" +#~ "沿岸地域を除いた地域" + #~ msgid "直轄市/縣市" #~ msgstr "直轄市/県市" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 04947246b..405d0557a 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "기상특보" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "피난 정보" +#, fuzzy +msgid "防災資訊" +msgstr "방재 정보 플랫폼" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "사운드 테스트" msgid "發送公告時" msgstr "공지 발송 시" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -153,25 +154,23 @@ msgstr "해일" msgid "其他" msgstr "기타" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "중대" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" msgstr "해일 경보 발령 시, 해안 지역(향, 진)" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "일반" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "해일 경보 발령 시, 위의 언급 지역 외" +#, fuzzy +msgid "海嘯消息發布時" +msgstr "태평양 해일 정보 발령 시" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -284,11 +283,13 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "현재 위치(향, 진) 예상 진도 1 이상" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "현재 위치(향, 진) 피난 경보 발령 시" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "현재 위치(향, 진) 피난 정보 발령 시" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -304,9 +305,13 @@ msgid "" msgstr "현재 위치(향, 진)에 기상 경보를 발령" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "현재 위치(향, 진)에 실시간 뇌우 정보 또는 산간 지역 폭우 발령 시" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "현재 위치(향, 진)에 실시간 뇌우 정보 또는 산간 지역 폭우 발령 시" #: lib/app/settings/unit/page.dart:28 @@ -1434,6 +1439,14 @@ msgstr "흐림・강한 뇌우" msgid "陰大雷雹" msgstr "흐림・강한 천둥/우박" +#~ msgid "避難資訊" +#~ msgstr "피난 정보" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "해일 경보 발령 시, 위의 언급 지역 외" + #~ msgid "直轄市/縣市" #~ msgstr "직할시/현시" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 3abf23f3c..4e045d5c6 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -61,7 +61,7 @@ msgid "天氣警特報" msgstr "" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" +msgid "防災資訊" msgstr "" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 @@ -120,7 +120,7 @@ msgstr "" msgid "發送公告時" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -150,24 +150,20 @@ msgstr "" msgid "其他" msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +msgid "海嘯警報發布時" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" +msgid "海嘯消息發布時" msgstr "" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 @@ -281,11 +277,11 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -301,9 +297,11 @@ msgid "" msgstr "" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" #: lib/app/settings/unit/page.dart:28 diff --git a/assets/translations/strings.pot b/assets/translations/strings.pot index 56288bd44..bd5a7f79b 100644 --- a/assets/translations/strings.pot +++ b/assets/translations/strings.pot @@ -47,7 +47,7 @@ msgid "天氣警特報" msgstr "" #: ./lib/app/settings/notify/page.dart:235 -msgid "避難資訊" +msgid "防災資訊" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 @@ -106,7 +106,7 @@ msgstr "" msgid "發送公告時" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" @@ -134,24 +134,20 @@ msgstr "" msgid "其他" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +msgid "海嘯警報發布時" msgstr "" -#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" +msgid "海嘯消息發布時" msgstr "" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 @@ -265,11 +261,11 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "" #: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -285,9 +281,11 @@ msgid "" msgstr "" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "" + +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" #: ./lib/app/settings/unit/page.dart:28 diff --git a/assets/translations/vi.po b/assets/translations/vi.po index a44f1078e..d148a2e48 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "Cảnh báo thời tiết" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "Thông tin di tản" +#, fuzzy +msgid "防災資訊" +msgstr "Cổng thông tin phòng chống thiên tai" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "Kiểm tra âm thanh" msgid "發送公告時" msgstr "Khi gửi thông báo" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -150,29 +151,25 @@ msgstr "" msgid "其他" msgstr "Khác" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" msgstr "" "Khi phát hành cảnh báo sóng thần\n" "các xã, thị trấn ven biển" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "Nói chung" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "" -"Khi cảnh báo sóng thần được ban hành.\n" -"Các khu vực bị loại trừ khỏi các mục trên." +#, fuzzy +msgid "海嘯消息發布時" +msgstr "Khi tin tức về sóng thần Thái Bình Dương được công bố" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -291,11 +288,13 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 1 trở lên" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "Khi khu vực địa phương (thị trấn) ban hành cảnh báo sơ tán" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "Khi khu vực địa phương (thị trấn) thông báo thông tin sơ tán" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -315,10 +314,14 @@ msgstr "" "tín hiệu" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" -msgstr "" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "Khi khu vực địa phương (thị trấn) ban hành cảnh báo sơ tán" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" +msgstr "Khi khu vực địa phương (thị trấn) thông báo thông tin sơ tán" #: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" @@ -1428,6 +1431,16 @@ msgstr "" msgid "陰大雷雹" msgstr "" +#~ msgid "避難資訊" +#~ msgstr "Thông tin di tản" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "" +#~ "Khi cảnh báo sóng thần được ban hành.\n" +#~ "Các khu vực bị loại trừ khỏi các mục trên." + #~ msgid "直轄市/縣市" #~ msgstr "Thành phố trực thuộc trung ương/Tỉnh thành" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index 3b80e1203..babab2795 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "天气警特报" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "避难信息" +#, fuzzy +msgid "防災資訊" +msgstr "防灾信息平台" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "音效测试" msgid "發送公告時" msgstr "发送公告时" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -152,29 +153,25 @@ msgstr "海啸" msgid "其他" msgstr "其他" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" msgstr "" "海啸警报发布时\n" "沿海地区乡镇" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "常规​​​​​" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "" -"海啸警报发布时\n" -"上述除外地区" +#, fuzzy +msgid "海嘯消息發布時" +msgstr "太平洋海啸消息发布时" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -293,11 +290,13 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "所在地(乡镇)预估震度 1 以上" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" msgstr "所在地(乡镇)发布避难警报时" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" msgstr "所在地(乡镇)发布避难信息时" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 @@ -317,9 +316,15 @@ msgstr "" "天气警特报" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "" +"所在地(乡镇)发布雷雨即时信息或\n" +"山区暴雨时" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" "所在地(乡镇)发布雷雨即时信息或\n" "山区暴雨时" @@ -1422,6 +1427,16 @@ msgstr "阴天有强雷阵雨" msgid "陰大雷雹" msgstr "阴天有强雷冰雹" +#~ msgid "避難資訊" +#~ msgstr "避难信息" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "" +#~ "海啸警报发布时\n" +#~ "上述除外地区" + #~ msgid "直轄市/縣市" #~ msgstr "直辖市/县市" diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index 7588bc956..700fd3fbb 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -12,7 +12,7 @@ msgstr "" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -#: lib/app/settings/location/page.dart:555 +#: lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "所在地" @@ -61,8 +61,9 @@ msgid "天氣警特報" msgstr "天氣警特報" #: lib/app/settings/notify/page.dart:235 -msgid "避難資訊" -msgstr "避難資訊" +#, fuzzy +msgid "防災資訊" +msgstr "防災資訊" #: lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" @@ -120,7 +121,7 @@ msgstr "音效測試" msgid "發送公告時" msgstr "發送公告時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:42 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 msgid "" "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" "效。此測試不會向伺服器發送任何請求" @@ -152,29 +153,23 @@ msgstr "海嘯" msgid "其他" msgstr "其他" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -msgid "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" -msgstr "" -"海嘯警報發布時\n" -"沿海地區鄉鎮" +#, fuzzy +msgid "海嘯警報發布時" +msgstr "海嘯警報發布時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "一般" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -msgid "" -"海嘯警報發布時\n" -"上述除外地區" -msgstr "" -"海嘯警報發布時\n" -"上述除外地區" +#, fuzzy +msgid "海嘯消息發布時" +msgstr "海嘯消息發布時" #: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -293,12 +288,14 @@ msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "所在地(鄉鎮)預估震度 1 以上" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -msgid "所在地(鄉鎮)發布避難警訊時" -msgstr "所在地(鄉鎮)發布避難警訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災警訊時" +msgstr "所在地(鄉鎮)發布防災警訊時" #: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -msgid "所在地(鄉鎮)發布避難資訊時" -msgstr "所在地(鄉鎮)發布避難資訊時" +#, fuzzy +msgid "所在地(鄉鎮)發布防災資訊時" +msgstr "所在地(鄉鎮)發布防災資訊時" #: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 msgid "" @@ -317,12 +314,14 @@ msgstr "" "天氣警特報" #: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -msgid "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" -msgstr "" -"所在地(鄉鎮)發布雷雨即時訊息或\n" -"山區暴雨時" +#, fuzzy +msgid "所在地(鄉鎮)發布山區暴雨時" +msgstr "所在地(鄉鎮)發布山區暴雨時" + +#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#, fuzzy +msgid "所在地(鄉鎮)發布雷雨即時訊息時" +msgstr "所在地(鄉鎮)發布雷雨即時訊息時" #: lib/app/settings/unit/page.dart:28 msgid "使用華氏度" @@ -1442,6 +1441,16 @@ msgstr "陰大雷雨" msgid "陰大雷雹" msgstr "陰大雷雹" +#~ msgid "避難資訊" +#~ msgstr "避難資訊" + +#~ msgid "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" +#~ msgstr "" +#~ "海嘯警報發布時\n" +#~ "上述除外地區" + #~ msgid "直轄市/縣市" #~ msgstr "直轄市/縣市" diff --git a/docs/sound.mdx b/docs/sound.mdx index 594af7122..636a7f211 100644 --- a/docs/sound.mdx +++ b/docs/sound.mdx @@ -59,9 +59,14 @@ # 雷雨即時訊息 +## 重大 + +- 條件:所在地(鄉鎮)發布山區暴雨時。 +- 音效:rain + ## 一般 -- 條件:所在地(鄉鎮)發布雷雨即時訊息或山區暴雨時。 +- 條件:所在地(鄉鎮)發布雷雨即時訊息時。 - 音效:rain # 天氣警特報 @@ -76,28 +81,28 @@ - 條件:所在地(鄉鎮)發布上述除外燈號之天氣警特報。 - 音效:weather -# 避難資訊(防空、土石流、淹水、堰塞湖) +# 防災資訊(防空、土石流、淹水、堰塞湖) ## 重大 -- 條件:所在地(鄉鎮)發布避難警訊時。 +- 條件:所在地(鄉鎮)發布防災警訊時。 - 音效:warn ## 一般 -- 條件:所在地(鄉鎮)發布避難資訊時。 +- 條件:所在地(鄉鎮)發布防災資訊時。 - 音效:warn # 海嘯資訊 ## 重大 -- 條件:海嘯警報發布時,沿海地區鄉鎮。 +- 條件:海嘯警報發布時。 - 音效:tsunami ## 一般 -- 條件:海嘯警報發布時,上述除外地區。 +- 條件:海嘯消息發布時。 - 音效:normal ## 太平洋海嘯消息(無聲) diff --git a/lib/app/settings/notify/(3.weather)/evacuation/page.dart b/lib/app/settings/notify/(3.weather)/evacuation/page.dart index c1b211c68..d8085d450 100644 --- a/lib/app/settings/notify/(3.weather)/evacuation/page.dart +++ b/lib/app/settings/notify/(3.weather)/evacuation/page.dart @@ -30,8 +30,8 @@ class SettingsNotifyEvacuationPage extends StatelessWidget { ListSection( title: '音效測試'.i18n, children: [ - SoundListTile(title: '重大'.i18n, subtitle: Text('所在地(鄉鎮)發布避難警訊時'.i18n), type: 'evacuation_major-important-v2'), - SoundListTile(title: '一般'.i18n, subtitle: Text('所在地(鄉鎮)發布避難資訊時'.i18n), type: 'evacuation_minor-general-v2'), + SoundListTile(title: '重大'.i18n, subtitle: Text('所在地(鄉鎮)發布防災警訊時'.i18n), type: 'evacuation_major-important-v2'), + SoundListTile(title: '一般'.i18n, subtitle: Text('所在地(鄉鎮)發布防災資訊時'.i18n), type: 'evacuation_minor-general-v2'), ], ), SettingsListTextSection( diff --git a/lib/app/settings/notify/(3.weather)/thunderstorm/page.dart b/lib/app/settings/notify/(3.weather)/thunderstorm/page.dart index a9e979e50..27fc3eb3d 100644 --- a/lib/app/settings/notify/(3.weather)/thunderstorm/page.dart +++ b/lib/app/settings/notify/(3.weather)/thunderstorm/page.dart @@ -30,9 +30,14 @@ class SettingsNotifyThunderstormPage extends StatelessWidget { ListSection( title: '音效測試'.i18n, children: [ + SoundListTile( + title: '重大'.i18n, + subtitle: Text('所在地(鄉鎮)發布山區暴雨時'.i18n), + type: 'thunderstorm-important-v2', + ), SoundListTile( title: '一般'.i18n, - subtitle: Text('所在地(鄉鎮)發布雷雨即時訊息或\n山區暴雨時'.i18n), + subtitle: Text('所在地(鄉鎮)發布雷雨即時訊息時'.i18n), type: 'thunderstorm-general-v2', ), ], diff --git a/lib/app/settings/notify/(4.tsunami)/tsunami/page.dart b/lib/app/settings/notify/(4.tsunami)/tsunami/page.dart index 1cbf94721..5a698ddc8 100644 --- a/lib/app/settings/notify/(4.tsunami)/tsunami/page.dart +++ b/lib/app/settings/notify/(4.tsunami)/tsunami/page.dart @@ -30,8 +30,8 @@ class SettingsNotifyTsunamiPage extends StatelessWidget { ListSection( title: '音效測試'.i18n, children: [ - SoundListTile(title: '重大'.i18n, subtitle: Text('海嘯警報發布時\n沿海地區鄉鎮'.i18n), type: 'tsunami-important-v2'), - SoundListTile(title: '一般'.i18n, subtitle: Text('海嘯警報發布時\n上述除外地區'.i18n), type: 'tsunami-general-v2'), + SoundListTile(title: '重大'.i18n, subtitle: Text('海嘯警報發布時'.i18n), type: 'tsunami-important-v2'), + SoundListTile(title: '一般'.i18n, subtitle: Text('海嘯消息發布時'.i18n), type: 'tsunami-general-v2'), SoundListTile(title: '太平洋海嘯消息(無聲通知)'.i18n, subtitle: Text('太平洋海嘯消息發布時'.i18n), type: 'tsunami-silent-v2'), ], ), diff --git a/lib/app/settings/notify/page.dart b/lib/app/settings/notify/page.dart index d652ac3d6..82378cfdd 100644 --- a/lib/app/settings/notify/page.dart +++ b/lib/app/settings/notify/page.dart @@ -232,7 +232,7 @@ class _SettingsNotifyPageState extends State { selector: (_, model) => model.evacuation, builder: (context, evacuation, child) { return ListSectionTile( - title: '避難資訊'.i18n, + title: '防災資訊'.i18n, subtitle: Text(getWeatherNotifyTypeName(evacuation)), trailing: const Icon(Symbols.chevron_right_rounded), icon: Symbols.directions_run_rounded, diff --git a/lib/core/notify.dart b/lib/core/notify.dart index 864a28408..d7bfc22d0 100644 --- a/lib/core/notify.dart +++ b/lib/core/notify.dart @@ -176,7 +176,7 @@ Future notifyInit() async { defaultColor: Colors.red, ledColor: Colors.red, enableVibration: true, - vibrationPattern: highVibrationPattern, + vibrationPattern: mediumVibrationPattern, ), NotificationChannel( channelGroupKey: 'group_eq', @@ -232,11 +232,27 @@ Future notifyInit() async { ledColor: Colors.red, enableVibration: false, ), + NotificationChannel( + channelGroupKey: 'group_rain', + channelKey: 'thunderstorm-important-v2', + channelName: '山區暴雨(重大)', + channelDescription: '所在地(鄉鎮)發布山區暴雨時', + importance: NotificationImportance.Max, + defaultPrivacy: NotificationPrivacy.Public, + criticalAlerts: true, + playSound: true, + soundSource: 'resource://raw/rain', + defaultColor: Colors.red, + ledColor: Colors.red, + enableVibration: true, + vibrationPattern: highVibrationPattern, + locked: true, + ), NotificationChannel( channelGroupKey: 'group_rain', channelKey: 'thunderstorm-general-v2', channelName: '雷雨即時訊息(一般)', - channelDescription: '所在地(鄉鎮)發布雷雨即時訊息或山區暴雨時', + channelDescription: '所在地(鄉鎮)發布雷雨即時訊息時', importance: NotificationImportance.High, defaultPrivacy: NotificationPrivacy.Public, playSound: true, @@ -280,8 +296,8 @@ Future notifyInit() async { NotificationChannel( channelGroupKey: 'group_evacuation', channelKey: 'evacuation_major-important-v2', - channelName: '避難資訊(重大)', - channelDescription: '所在地(鄉鎮)發布防空、土石流、淹水或堰塞湖避難警訊時', + channelName: '防災資訊(重大)', + channelDescription: '所在地(鄉鎮)發布土石流、淹水或堰塞湖防災警訊時', importance: NotificationImportance.Max, defaultPrivacy: NotificationPrivacy.Public, criticalAlerts: true, @@ -297,8 +313,8 @@ Future notifyInit() async { NotificationChannel( channelGroupKey: 'group_evacuation', channelKey: 'evacuation_minor-general-v2', - channelName: '避難資訊(一般)', - channelDescription: '所在地(鄉鎮)發布防空、土石流、淹水或堰塞湖避難資訊時', + channelName: '防災資訊(一般)', + channelDescription: '所在地(鄉鎮)發布土石流、淹水或堰塞湖防災資訊時', importance: NotificationImportance.High, defaultPrivacy: NotificationPrivacy.Public, playSound: true, @@ -312,7 +328,7 @@ Future notifyInit() async { channelGroupKey: 'group_tsunami', channelKey: 'tsunami-important-v2', channelName: '海嘯資訊(重大)', - channelDescription: '海嘯警報發布時,沿海地區鄉鎮', + channelDescription: '海嘯警報發布時', importance: NotificationImportance.Max, defaultPrivacy: NotificationPrivacy.Public, criticalAlerts: true, @@ -329,7 +345,7 @@ Future notifyInit() async { channelGroupKey: 'group_tsunami', channelKey: 'tsunami-general-v2', channelName: '海嘯資訊(一般)', - channelDescription: '海嘯警報發布時,上述除外地區', + channelDescription: '海嘯消息發布時', importance: NotificationImportance.Default, defaultPrivacy: NotificationPrivacy.Public, playSound: true, diff --git a/lib/router.dart b/lib/router.dart index 76f5c2de6..197c549c9 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -104,7 +104,7 @@ final router = GoRouter( SettingsNotifyIntensityPage.route => '震度速報'.i18n, SettingsNotifyThunderstormPage.route => '雷雨即時訊息'.i18n, SettingsNotifyAdvisoryPage.route => '天氣警特報'.i18n, - SettingsNotifyEvacuationPage.route => '避難資訊'.i18n, + SettingsNotifyEvacuationPage.route => '防災資訊'.i18n, SettingsNotifyTsunamiPage.route => '海嘯資訊'.i18n, SettingsNotifyAnnouncementPage.route => '公告'.i18n, From 62581efe755a5433b579628c18f0eb4e19a78019 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Tue, 12 Aug 2025 17:49:13 +0800 Subject: [PATCH 22/59] fix: ios service (#373) --- lib/core/service.dart | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/core/service.dart b/lib/core/service.dart index 1a133f713..33899d370 100644 --- a/lib/core/service.dart +++ b/lib/core/service.dart @@ -71,8 +71,10 @@ class LocationServiceManager { /// preferences and updates device location. /// /// Will starts the service if automatic location updates are enabled. + /// + /// This method is Android specific. static Future initalize() async { - if (instance != null || !avaliable) return; + if (instance != null || !Platform.isAndroid) return; TalkerManager.instance.info('👷 initializing location service'); @@ -91,11 +93,7 @@ class LocationServiceManager { foregroundServiceNotificationId: kNotificationId, ), // iOS is handled in native code - iosConfiguration: IosConfiguration( - autoStart: false, - onForeground: LocationService._$onStartIOS, - onBackground: LocationService._$onStartIOS, - ), + iosConfiguration: IosConfiguration(autoStart: false), ); // Reloads the UI isolate's preference cache when a new position is set in the background service. @@ -119,14 +117,14 @@ class LocationServiceManager { TalkerManager.instance.info('👷 starting location service'); try { - final service = instance; - if (service == null) throw Exception('Not initialized.'); - if (Platform.isIOS) { await platform.invokeMethod('toggleLocation', {'isEnabled': true}); return; } + final service = instance; + if (service == null) throw Exception('Not initialized.'); + if (await service.isRunning()) { TalkerManager.instance.warning('👷 location service is already running, skipping...'); return; @@ -145,14 +143,14 @@ class LocationServiceManager { TalkerManager.instance.info('👷 stopping location service'); try { - final service = instance; - if (service == null) throw Exception('Not initialized.'); - if (Platform.isIOS) { await platform.invokeMethod('toggleLocation', {'isEnabled': false}); return; } + final service = instance; + if (service == null) throw Exception('Not initialized.'); + service.invoke(LocationServiceEvent.stop); } catch (e, s) { TalkerManager.instance.error('👷 stopping location service FAILED', e, s); @@ -244,15 +242,6 @@ class LocationService { await _$task(); } - /// Entry point for ios background service. - /// - /// iOS background service is handled in native code. - @pragma('vm:entry-point') - static Future _$onStartIOS(ServiceInstance service) async { - DartPluginRegistrant.ensureInitialized(); - return true; - } - /// The main tick function of the service. /// /// This function is used to get the current location of the device and update the notification. It is called From d152700e4dcb8edebdfe11b4d679e9497c9628ce Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 17:31:52 +0800 Subject: [PATCH 23/59] feat: locations and weather stations i18n (#377) * feat: locations and weather stations i18n * fix: current location * fix: current location --- assets/location.json | 2 +- assets/location_names.csv | 385 +++++++++ assets/translations/en.po | 28 +- assets/translations/ja.po | 28 +- assets/translations/ko.po | 28 +- assets/translations/ru.po | 32 +- assets/translations/strings.pot | 18 +- assets/translations/vi.po | 28 +- assets/translations/zh-Hans.po | 28 +- assets/translations/zh-Hant.po | 29 +- assets/weather_station_names.csv | 818 ++++++++++++++++++ lib/api/model/location/location.dart | 285 +++++- lib/app/home/_widgets/location_button.dart | 15 +- lib/app/home/_widgets/weather_header.dart | 2 +- lib/app/home/page.dart | 1 - lib/app/map/_lib/managers/report.dart | 75 +- lib/app/settings/location/page.dart | 2 +- .../settings/location/select/[city]/page.dart | 4 +- lib/app/settings/location/select/page.dart | 37 +- lib/core/i18n.dart | 121 +++ lib/main.dart | 2 + lib/utils/extensions/string.dart | 5 + pubspec.yaml | 6 +- 23 files changed, 1872 insertions(+), 107 deletions(-) create mode 100644 assets/location_names.csv create mode 100644 assets/weather_station_names.csv diff --git a/assets/location.json b/assets/location.json index bcd89f005..514fdf932 100644 --- a/assets/location.json +++ b/assets/location.json @@ -1 +1 @@ -{"100":{"city":"臺北市","town":"中正區","lat":25.0443212,"lng":121.5247613},"103":{"city":"臺北市","town":"大同區","lat":25.0661934,"lng":121.515268},"104":{"city":"臺北市","town":"中山區","lat":25.0642771,"lng":121.5335776},"105":{"city":"臺北市","town":"松山區","lat":25.049847,"lng":121.577241},"106":{"city":"臺北市","town":"大安區","lat":25.02642,"lng":121.534511},"108":{"city":"臺北市","town":"萬華區","lat":25.034839,"lng":121.4997957},"110":{"city":"臺北市","town":"信義區","lat":25.0331574,"lng":121.5668777},"111":{"city":"臺北市","town":"士林區","lat":25.0927548,"lng":121.519565},"112":{"city":"臺北市","town":"北投區","lat":25.1323666,"lng":121.5029268},"114":{"city":"臺北市","town":"內湖區","lat":25.06929,"lng":121.588949},"115":{"city":"臺北市","town":"南港區","lat":25.0547059,"lng":121.6066929},"116":{"city":"臺北市","town":"文山區","lat":24.98964,"lng":121.5700826},"200":{"city":"基隆市","town":"仁愛區","lat":25.125069,"lng":121.736754},"201":{"city":"基隆市","town":"信義區","lat":25.1294717,"lng":121.7512671},"202":{"city":"基隆市","town":"中正區","lat":25.1407924,"lng":121.7592534},"203":{"city":"基隆市","town":"中山區","lat":25.152899,"lng":121.729552},"204":{"city":"基隆市","town":"安樂區","lat":25.121176,"lng":121.7230804},"205":{"city":"基隆市","town":"暖暖區","lat":25.1001834,"lng":121.735933},"206":{"city":"基隆市","town":"七堵區","lat":25.097653,"lng":121.7165013},"207":{"city":"新北市","town":"萬里區","lat":25.178066,"lng":121.689548},"208":{"city":"新北市","town":"金山區","lat":25.222241,"lng":121.636629},"209":{"city":"連江縣","town":"南竿鄉","lat":26.1529312,"lng":119.9387995},"210":{"city":"連江縣","town":"北竿鄉","lat":26.223938,"lng":119.997139},"211":{"city":"連江縣","town":"莒光鄉","lat":25.9687384,"lng":119.9369689},"212":{"city":"連江縣","town":"東引鄉","lat":26.3672636,"lng":120.4898789},"220":{"city":"新北市","town":"板橋區","lat":25.0096156,"lng":121.4592358},"221":{"city":"新北市","town":"汐止區","lat":25.064261,"lng":121.65869},"222":{"city":"新北市","town":"深坑區","lat":25.0025007,"lng":121.615944},"223":{"city":"新北市","town":"石碇區","lat":24.9914859,"lng":121.6579019},"224":{"city":"新北市","town":"瑞芳區","lat":25.1087635,"lng":121.8098935},"226":{"city":"新北市","town":"平溪區","lat":25.026689,"lng":121.73819},"227":{"city":"新北市","town":"雙溪區","lat":25.0337322,"lng":121.8657341},"228":{"city":"新北市","town":"貢寮區","lat":25.021812,"lng":121.910293},"231":{"city":"新北市","town":"新店區","lat":24.9749713,"lng":121.5431673},"232":{"city":"新北市","town":"坪林區","lat":24.9361367,"lng":121.7117653},"233":{"city":"新北市","town":"烏來區","lat":24.8717802,"lng":121.5478634},"234":{"city":"新北市","town":"永和區","lat":25.0091768,"lng":121.5202731},"235":{"city":"新北市","town":"中和區","lat":24.9985208,"lng":121.5007413},"236":{"city":"新北市","town":"土城區","lat":24.9723361,"lng":121.4429389},"237":{"city":"新北市","town":"三峽區","lat":24.9341863,"lng":121.369083},"238":{"city":"新北市","town":"樹林區","lat":24.9899673,"lng":121.4246321},"239":{"city":"新北市","town":"鶯歌區","lat":24.9560294,"lng":121.3544312},"241":{"city":"新北市","town":"三重區","lat":25.0607692,"lng":121.4884178},"242":{"city":"新北市","town":"新莊區","lat":25.035976,"lng":121.450478},"243":{"city":"新北市","town":"泰山區","lat":25.059291,"lng":121.431495},"244":{"city":"新北市","town":"林口區","lat":25.0768252,"lng":121.3886134},"247":{"city":"新北市","town":"蘆洲區","lat":25.0847112,"lng":121.4737354},"248":{"city":"新北市","town":"五股區","lat":25.0830393,"lng":121.4380781},"249":{"city":"新北市","town":"八里區","lat":25.1537592,"lng":121.4064305},"251":{"city":"新北市","town":"淡水區","lat":25.1696463,"lng":121.4409722},"252":{"city":"新北市","town":"三芝區","lat":25.257748,"lng":121.5009345},"253":{"city":"新北市","town":"石門區","lat":25.291248,"lng":121.567631},"260":{"city":"宜蘭縣","town":"宜蘭市","lat":24.7520373,"lng":121.7531493},"261":{"city":"宜蘭縣","town":"頭城鎮","lat":24.8548387,"lng":121.8213189},"262":{"city":"宜蘭縣","town":"礁溪鄉","lat":24.8234257,"lng":121.7711725},"263":{"city":"宜蘭縣","town":"壯圍鄉","lat":24.746832,"lng":121.785759},"264":{"city":"宜蘭縣","town":"員山鄉","lat":24.7433944,"lng":121.7232538},"265":{"city":"宜蘭縣","town":"羅東鎮","lat":24.6769245,"lng":121.7669529},"266":{"city":"宜蘭縣","town":"三星鄉","lat":24.665483,"lng":121.654047},"267":{"city":"宜蘭縣","town":"大同鄉","lat":24.677412,"lng":121.6090927},"268":{"city":"宜蘭縣","town":"五結鄉","lat":24.684772,"lng":121.7982898},"269":{"city":"宜蘭縣","town":"冬山鄉","lat":24.634338,"lng":121.792851},"270":{"city":"宜蘭縣","town":"蘇澳鎮","lat":24.594315,"lng":121.8421903},"272":{"city":"宜蘭縣","town":"南澳鄉","lat":24.465996,"lng":121.803714},"300":{"city":"新竹市","town":"北區","lat":24.8163726,"lng":120.9703141},"301":{"city":"新竹市","town":"東區","lat":24.8051881,"lng":120.9732327},"309":{"city":"新竹市","town":"香山區","lat":24.7940445,"lng":120.9422678},"302":{"city":"新竹縣","town":"竹北市","lat":24.8395807,"lng":121.0040235},"303":{"city":"新竹縣","town":"湖口鄉","lat":24.9010068,"lng":121.0478749},"304":{"city":"新竹縣","town":"新豐鄉","lat":24.9007026,"lng":120.9852313},"305":{"city":"新竹縣","town":"新埔鎮","lat":24.8256201,"lng":121.0740799},"306":{"city":"新竹縣","town":"關西鎮","lat":24.7922806,"lng":121.1759547},"307":{"city":"新竹縣","town":"芎林鄉","lat":24.773309,"lng":121.081855},"308":{"city":"新竹縣","town":"寶山鄉","lat":24.7654715,"lng":120.9913066},"310":{"city":"新竹縣","town":"竹東鎮","lat":24.7366942,"lng":121.0916513},"311":{"city":"新竹縣","town":"五峰鄉","lat":24.6320786,"lng":121.119596},"312":{"city":"新竹縣","town":"橫山鄉","lat":24.7167807,"lng":121.1414985},"313":{"city":"新竹縣","town":"尖石鄉","lat":24.705004,"lng":121.2020864},"314":{"city":"新竹縣","town":"北埔鄉","lat":24.7019901,"lng":121.0563354},"315":{"city":"新竹縣","town":"峨眉鄉","lat":24.6887921,"lng":121.0195946},"320":{"city":"桃園市","town":"中壢區","lat":24.9656124,"lng":121.2249927},"324":{"city":"桃園市","town":"平鎮區","lat":24.9456694,"lng":121.2181884},"325":{"city":"桃園市","town":"龍潭區","lat":24.8704855,"lng":121.2224472},"326":{"city":"桃園市","town":"楊梅區","lat":24.9128508,"lng":121.1444587},"327":{"city":"桃園市","town":"新屋區","lat":24.9725439,"lng":121.105533},"328":{"city":"桃園市","town":"觀音區","lat":25.0276516,"lng":121.0836028},"330":{"city":"桃園市","town":"桃園區","lat":24.993919,"lng":121.3016657},"333":{"city":"桃園市","town":"龜山區","lat":24.9925139,"lng":121.337824},"334":{"city":"桃園市","town":"八德區","lat":24.9289862,"lng":121.2846406},"335":{"city":"桃園市","town":"大溪區","lat":24.880548,"lng":121.287142},"336":{"city":"桃園市","town":"復興區","lat":24.8147989,"lng":121.3511305},"337":{"city":"桃園市","town":"大園區","lat":25.0638556,"lng":121.1954603},"338":{"city":"桃園市","town":"蘆竹區","lat":25.046925,"lng":121.295077},"350":{"city":"苗栗縣","town":"竹南鎮","lat":24.6838448,"lng":120.8733503},"351":{"city":"苗栗縣","town":"頭份市","lat":24.6865276,"lng":120.9132454},"352":{"city":"苗栗縣","town":"三灣鄉","lat":24.6531425,"lng":120.9566265},"353":{"city":"苗栗縣","town":"南庄鄉","lat":24.5970648,"lng":121.000339},"354":{"city":"苗栗縣","town":"獅潭鄉","lat":24.539419,"lng":120.920496},"356":{"city":"苗栗縣","town":"後龍鎮","lat":24.613682,"lng":120.792046},"357":{"city":"苗栗縣","town":"通霄鎮","lat":24.4912805,"lng":120.684249},"358":{"city":"苗栗縣","town":"苑裡鎮","lat":24.4396522,"lng":120.653261},"360":{"city":"苗栗縣","town":"苗栗市","lat":24.5616772,"lng":120.8190175},"361":{"city":"苗栗縣","town":"造橋鄉","lat":24.638552,"lng":120.8651632},"362":{"city":"苗栗縣","town":"頭屋鄉","lat":24.5778158,"lng":120.8511057},"363":{"city":"苗栗縣","town":"公館鄉","lat":24.5058646,"lng":120.8284935},"364":{"city":"苗栗縣","town":"大湖鄉","lat":24.4234081,"lng":120.8661781},"365":{"city":"苗栗縣","town":"泰安鄉","lat":24.4471976,"lng":120.9081718},"366":{"city":"苗栗縣","town":"銅鑼鄉","lat":24.4870514,"lng":120.7878718},"367":{"city":"苗栗縣","town":"三義鄉","lat":24.4129179,"lng":120.7702392},"368":{"city":"苗栗縣","town":"西湖鄉","lat":24.5567613,"lng":120.7570814},"369":{"city":"苗栗縣","town":"卓蘭鎮","lat":24.3130501,"lng":120.8245152},"400":{"city":"臺中市","town":"中區","lat":24.1439458,"lng":120.6794414},"401":{"city":"臺中市","town":"東區","lat":24.1366469,"lng":120.7037332},"402":{"city":"臺中市","town":"南區","lat":24.1171412,"lng":120.6635905},"403":{"city":"臺中市","town":"西區","lat":24.1413252,"lng":120.6710753},"404":{"city":"臺中市","town":"北區","lat":24.1658534,"lng":120.6822936},"406":{"city":"臺中市","town":"北屯區","lat":24.1826848,"lng":120.686403},"407":{"city":"臺中市","town":"西屯區","lat":24.1658213,"lng":120.6336717},"408":{"city":"臺中市","town":"南屯區","lat":24.1345298,"lng":120.6442903},"411":{"city":"臺中市","town":"太平區","lat":24.1266572,"lng":120.7185562},"412":{"city":"臺中市","town":"大里區","lat":24.0994693,"lng":120.6778413},"413":{"city":"臺中市","town":"霧峰區","lat":24.0613153,"lng":120.7000868},"414":{"city":"臺中市","town":"烏日區","lat":24.104605,"lng":120.6238467},"420":{"city":"臺中市","town":"豐原區","lat":24.2419087,"lng":120.7181281},"421":{"city":"臺中市","town":"后里區","lat":24.3049377,"lng":120.7107454},"422":{"city":"臺中市","town":"石岡區","lat":24.274898,"lng":120.7803458},"423":{"city":"臺中市","town":"東勢區","lat":24.2585728,"lng":120.8279546},"424":{"city":"臺中市","town":"和平區","lat":24.1752225,"lng":120.8835809},"426":{"city":"臺中市","town":"新社區","lat":24.233957,"lng":120.809416},"427":{"city":"臺中市","town":"潭子區","lat":24.2031708,"lng":120.7228978},"428":{"city":"臺中市","town":"大雅區","lat":24.2291463,"lng":120.6478436},"429":{"city":"臺中市","town":"神岡區","lat":24.2579749,"lng":120.6614216},"432":{"city":"臺中市","town":"大肚區","lat":24.1511295,"lng":120.5457643},"433":{"city":"臺中市","town":"沙鹿區","lat":24.2333313,"lng":120.566317},"434":{"city":"臺中市","town":"龍井區","lat":24.1924488,"lng":120.5457999},"435":{"city":"臺中市","town":"梧棲區","lat":24.2549063,"lng":120.5317002},"436":{"city":"臺中市","town":"清水區","lat":24.2681562,"lng":120.559717},"437":{"city":"臺中市","town":"大甲區","lat":24.349083,"lng":120.622468},"438":{"city":"臺中市","town":"外埔區","lat":24.3321248,"lng":120.654334},"439":{"city":"臺中市","town":"大安區","lat":24.346126,"lng":120.5866075},"500":{"city":"彰化縣","town":"彰化市","lat":24.0809056,"lng":120.5422565},"502":{"city":"彰化縣","town":"芬園鄉","lat":24.013628,"lng":120.628964},"503":{"city":"彰化縣","town":"花壇鄉","lat":24.0296582,"lng":120.5382578},"504":{"city":"彰化縣","town":"秀水鄉","lat":24.035321,"lng":120.5028098},"505":{"city":"彰化縣","town":"鹿港鎮","lat":24.0572566,"lng":120.4350548},"506":{"city":"彰化縣","town":"福興鄉","lat":24.0478713,"lng":120.4439546},"507":{"city":"彰化縣","town":"線西鄉","lat":24.1306678,"lng":120.470656},"508":{"city":"彰化縣","town":"和美鎮","lat":24.1085584,"lng":120.4941497},"509":{"city":"彰化縣","town":"伸港鄉","lat":24.1596067,"lng":120.4861141},"510":{"city":"彰化縣","town":"員林市","lat":23.9589162,"lng":120.5743943},"511":{"city":"彰化縣","town":"社頭鄉","lat":23.8968186,"lng":120.5858074},"512":{"city":"彰化縣","town":"永靖鄉","lat":23.9245962,"lng":120.5477204},"513":{"city":"彰化縣","town":"埔心鄉","lat":23.952988,"lng":120.54354},"514":{"city":"彰化縣","town":"溪湖鎮","lat":23.9664245,"lng":120.4832787},"515":{"city":"彰化縣","town":"大村鄉","lat":23.9934239,"lng":120.547268},"516":{"city":"彰化縣","town":"埔鹽鄉","lat":24.000442,"lng":120.4636578},"520":{"city":"彰化縣","town":"田中鎮","lat":23.8614831,"lng":120.5809585},"521":{"city":"彰化縣","town":"北斗鎮","lat":23.8713826,"lng":120.5218625},"522":{"city":"彰化縣","town":"田尾鄉","lat":23.8922407,"lng":120.5259709},"523":{"city":"彰化縣","town":"埤頭鄉","lat":23.8914618,"lng":120.4621725},"524":{"city":"彰化縣","town":"溪州鄉","lat":23.8516188,"lng":120.498976},"525":{"city":"彰化縣","town":"竹塘鄉","lat":23.8605045,"lng":120.4277961},"526":{"city":"彰化縣","town":"二林鎮","lat":23.8998045,"lng":120.3742654},"527":{"city":"彰化縣","town":"大城鄉","lat":23.852314,"lng":120.3208972},"528":{"city":"彰化縣","town":"芳苑鄉","lat":23.924354,"lng":120.320389},"530":{"city":"彰化縣","town":"二水鄉","lat":23.8066858,"lng":120.6190203},"540":{"city":"南投縣","town":"南投市","lat":23.9116414,"lng":120.6874199},"541":{"city":"南投縣","town":"中寮鄉","lat":23.8790067,"lng":120.7660301},"542":{"city":"南投縣","town":"草屯鎮","lat":23.9736845,"lng":120.6802819},"544":{"city":"南投縣","town":"國姓鄉","lat":24.040019,"lng":120.8575192},"545":{"city":"南投縣","town":"埔里鎮","lat":23.9665377,"lng":120.9691809},"546":{"city":"南投縣","town":"仁愛鄉","lat":24.021544,"lng":121.1320616},"551":{"city":"南投縣","town":"名間鄉","lat":23.8382161,"lng":120.702985},"552":{"city":"南投縣","town":"集集鎮","lat":23.8283683,"lng":120.7864885},"553":{"city":"南投縣","town":"水里鄉","lat":23.8113991,"lng":120.8560852},"555":{"city":"南投縣","town":"魚池鄉","lat":23.8957849,"lng":120.9356849},"556":{"city":"南投縣","town":"信義鄉","lat":23.696797,"lng":120.854557},"557":{"city":"南投縣","town":"竹山鎮","lat":23.7578635,"lng":120.6716995},"558":{"city":"南投縣","town":"鹿谷鄉","lat":23.7458415,"lng":120.7534428},"600":{"city":"嘉義市","town":"東區","lat":23.4786578,"lng":120.4534596},"601":{"city":"嘉義市","town":"西區","lat":23.4646967,"lng":120.4352822},"602":{"city":"嘉義縣","town":"番路鄉","lat":23.4644973,"lng":120.554286},"603":{"city":"嘉義縣","town":"梅山鄉","lat":23.5850678,"lng":120.5554676},"604":{"city":"嘉義縣","town":"竹崎鄉","lat":23.5230788,"lng":120.5513988},"605":{"city":"嘉義縣","town":"阿里山鄉","lat":23.4712117,"lng":120.7135217},"606":{"city":"嘉義縣","town":"中埔鄉","lat":23.425139,"lng":120.522952},"607":{"city":"嘉義縣","town":"大埔鄉","lat":23.2986941,"lng":120.5869311},"608":{"city":"嘉義縣","town":"水上鄉","lat":23.428531,"lng":120.398035},"611":{"city":"嘉義縣","town":"鹿草鄉","lat":23.4113835,"lng":120.3082682},"612":{"city":"嘉義縣","town":"太保市","lat":23.458967,"lng":120.3323479},"613":{"city":"嘉義縣","town":"朴子市","lat":23.4575288,"lng":120.2459226},"614":{"city":"嘉義縣","town":"東石鄉","lat":23.4587147,"lng":120.1537883},"615":{"city":"嘉義縣","town":"六腳鄉","lat":23.4940922,"lng":120.2907962},"616":{"city":"嘉義縣","town":"新港鄉","lat":23.5519744,"lng":120.3478039},"621":{"city":"嘉義縣","town":"民雄鄉","lat":23.5516417,"lng":120.4283616},"622":{"city":"嘉義縣","town":"大林鎮","lat":23.603931,"lng":120.471178},"623":{"city":"嘉義縣","town":"溪口鄉","lat":23.6025304,"lng":120.392323},"624":{"city":"嘉義縣","town":"義竹鄉","lat":23.3361064,"lng":120.2430475},"625":{"city":"嘉義縣","town":"布袋鎮","lat":23.3781734,"lng":120.1669564},"630":{"city":"雲林縣","town":"斗南鎮","lat":23.680105,"lng":120.47772},"631":{"city":"雲林縣","town":"大埤鄉","lat":23.6460343,"lng":120.4314818},"632":{"city":"雲林縣","town":"虎尾鎮","lat":23.7083539,"lng":120.4451923},"633":{"city":"雲林縣","town":"土庫鎮","lat":23.6820621,"lng":120.3899062},"634":{"city":"雲林縣","town":"褒忠鄉","lat":23.691007,"lng":120.3037335},"635":{"city":"雲林縣","town":"東勢鄉","lat":23.6753034,"lng":120.2525936},"636":{"city":"雲林縣","town":"臺西鄉","lat":23.700477,"lng":120.1957632},"637":{"city":"雲林縣","town":"崙背鄉","lat":23.7619087,"lng":120.3591424},"638":{"city":"雲林縣","town":"麥寮鄉","lat":23.7539853,"lng":120.2513078},"640":{"city":"雲林縣","town":"斗六市","lat":23.6971143,"lng":120.5269987},"643":{"city":"雲林縣","town":"林內鄉","lat":23.7562156,"lng":120.6129427},"646":{"city":"雲林縣","town":"古坑鄉","lat":23.6426312,"lng":120.5619595},"647":{"city":"雲林縣","town":"莿桐鄉","lat":23.7610077,"lng":120.5025072},"648":{"city":"雲林縣","town":"西螺鎮","lat":23.7977736,"lng":120.465685},"649":{"city":"雲林縣","town":"二崙鄉","lat":23.7711012,"lng":120.4129596},"651":{"city":"雲林縣","town":"北港鎮","lat":23.5759236,"lng":120.302446},"652":{"city":"雲林縣","town":"水林鄉","lat":23.5727035,"lng":120.2459507},"653":{"city":"雲林縣","town":"口湖鄉","lat":23.5827378,"lng":120.1858552},"654":{"city":"雲林縣","town":"四湖鄉","lat":23.6378317,"lng":120.2242949},"655":{"city":"雲林縣","town":"元長鄉","lat":23.6497447,"lng":120.3148349},"700":{"city":"臺南市","town":"中西區","lat":22.9922364,"lng":120.2056571},"701":{"city":"臺南市","town":"東區","lat":22.9802421,"lng":120.224004},"702":{"city":"臺南市","town":"南區","lat":22.9611326,"lng":120.1885687},"704":{"city":"臺南市","town":"北區","lat":22.9997522,"lng":120.2030341},"708":{"city":"臺南市","town":"安平區","lat":22.9945789,"lng":120.1688523},"709":{"city":"臺南市","town":"安南區","lat":23.0472321,"lng":120.184714},"710":{"city":"臺南市","town":"永康區","lat":23.0260699,"lng":120.2570647},"711":{"city":"臺南市","town":"歸仁區","lat":22.967286,"lng":120.2940045},"712":{"city":"臺南市","town":"新化區","lat":23.0385411,"lng":120.310896},"713":{"city":"臺南市","town":"左鎮區","lat":23.0567783,"lng":120.408708},"714":{"city":"臺南市","town":"玉井區","lat":23.1237866,"lng":120.4601109},"715":{"city":"臺南市","town":"楠西區","lat":23.174143,"lng":120.486337},"716":{"city":"臺南市","town":"南化區","lat":23.042988,"lng":120.477816},"717":{"city":"臺南市","town":"仁德區","lat":22.97243,"lng":120.251685},"718":{"city":"臺南市","town":"關廟區","lat":22.9630039,"lng":120.3278144},"719":{"city":"臺南市","town":"龍崎區","lat":22.9632926,"lng":120.3649712},"720":{"city":"臺南市","town":"官田區","lat":23.1930442,"lng":120.3154967},"721":{"city":"臺南市","town":"麻豆區","lat":23.1849449,"lng":120.2584456},"722":{"city":"臺南市","town":"佳里區","lat":23.1652648,"lng":120.1770306},"723":{"city":"臺南市","town":"西港區","lat":23.1229825,"lng":120.203413},"724":{"city":"臺南市","town":"七股區","lat":23.1403809,"lng":120.1391359},"725":{"city":"臺南市","town":"將軍區","lat":23.19905,"lng":120.158702},"726":{"city":"臺南市","town":"學甲區","lat":23.2304835,"lng":120.1822926},"727":{"city":"臺南市","town":"北門區","lat":23.267723,"lng":120.125445},"730":{"city":"臺南市","town":"新營區","lat":23.3101426,"lng":120.3167031},"731":{"city":"臺南市","town":"後壁區","lat":23.3659836,"lng":120.3619362},"732":{"city":"臺南市","town":"白河區","lat":23.3512886,"lng":120.415752},"733":{"city":"臺南市","town":"東山區","lat":23.3261625,"lng":120.4045009},"734":{"city":"臺南市","town":"六甲區","lat":23.2318098,"lng":120.3474201},"735":{"city":"臺南市","town":"下營區","lat":23.2356921,"lng":120.2643838},"736":{"city":"臺南市","town":"柳營區","lat":23.278395,"lng":120.311673},"737":{"city":"臺南市","town":"鹽水區","lat":23.320027,"lng":120.266097},"741":{"city":"臺南市","town":"善化區","lat":23.1324288,"lng":120.2967849},"742":{"city":"臺南市","town":"大內區","lat":23.1192073,"lng":120.3568212},"743":{"city":"臺南市","town":"山上區","lat":23.1036173,"lng":120.3526487},"744":{"city":"臺南市","town":"新市區","lat":23.0789967,"lng":120.2951827},"745":{"city":"臺南市","town":"安定區","lat":23.121593,"lng":120.237118},"800":{"city":"高雄市","town":"新興區","lat":22.6310347,"lng":120.3101095},"801":{"city":"高雄市","town":"前金區","lat":22.6275276,"lng":120.2942181},"802":{"city":"高雄市","town":"苓雅區","lat":22.621759,"lng":120.312194},"803":{"city":"高雄市","town":"鹽埕區","lat":22.6247166,"lng":120.2868098},"804":{"city":"高雄市","town":"鼓山區","lat":22.636776,"lng":120.2809626},"805":{"city":"高雄市","town":"旗津區","lat":22.5900263,"lng":120.28471},"806":{"city":"高雄市","town":"前鎮區","lat":22.5865658,"lng":120.318307},"807":{"city":"高雄市","town":"三民區","lat":22.647684,"lng":120.299851},"811":{"city":"高雄市","town":"楠梓區","lat":22.7283655,"lng":120.3263681},"812":{"city":"高雄市","town":"小港區","lat":22.5652134,"lng":120.3380368},"813":{"city":"高雄市","town":"左營區","lat":22.6899834,"lng":120.2950135},"814":{"city":"高雄市","town":"仁武區","lat":22.7013806,"lng":120.3479837},"815":{"city":"高雄市","town":"大社區","lat":22.730156,"lng":120.346671},"820":{"city":"高雄市","town":"岡山區","lat":22.7974649,"lng":120.2950724},"821":{"city":"高雄市","town":"路竹區","lat":22.8547435,"lng":120.2592442},"822":{"city":"高雄市","town":"阿蓮區","lat":22.8832024,"lng":120.3274131},"823":{"city":"高雄市","town":"田寮區","lat":22.8698825,"lng":120.3594334},"824":{"city":"高雄市","town":"燕巢區","lat":22.7881575,"lng":120.3619685},"825":{"city":"高雄市","town":"橋頭區","lat":22.757591,"lng":120.305809},"826":{"city":"高雄市","town":"梓官區","lat":22.7606303,"lng":120.2671523},"827":{"city":"高雄市","town":"彌陀區","lat":22.7814893,"lng":120.2507011},"828":{"city":"高雄市","town":"永安區","lat":22.818298,"lng":120.224189},"829":{"city":"高雄市","town":"湖內區","lat":22.9083136,"lng":120.211713},"830":{"city":"高雄市","town":"鳳山區","lat":22.627075,"lng":120.362525},"831":{"city":"高雄市","town":"大寮區","lat":22.6055196,"lng":120.3956199},"832":{"city":"高雄市","town":"林園區","lat":22.5129453,"lng":120.3946805},"833":{"city":"高雄市","town":"鳥松區","lat":22.6598339,"lng":120.364363},"840":{"city":"高雄市","town":"大樹區","lat":22.6839054,"lng":120.4143416},"842":{"city":"高雄市","town":"旗山區","lat":22.888642,"lng":120.48349},"843":{"city":"高雄市","town":"美濃區","lat":22.8947952,"lng":120.5419493},"844":{"city":"高雄市","town":"六龜區","lat":22.9984391,"lng":120.6327082},"845":{"city":"高雄市","town":"內門區","lat":22.9428391,"lng":120.462606},"846":{"city":"高雄市","town":"杉林區","lat":22.9717391,"lng":120.540058},"847":{"city":"高雄市","town":"甲仙區","lat":23.0839058,"lng":120.587695},"848":{"city":"高雄市","town":"桃源區","lat":23.1592827,"lng":120.7641372},"849":{"city":"高雄市","town":"那瑪夏區","lat":23.277092,"lng":120.720243},"851":{"city":"高雄市","town":"茂林區","lat":22.886187,"lng":120.663266},"852":{"city":"高雄市","town":"茄萣區","lat":22.9065231,"lng":120.1824729},"880":{"city":"澎湖縣","town":"馬公市","lat":23.566159,"lng":119.578692},"881":{"city":"澎湖縣","town":"西嶼鄉","lat":23.601088,"lng":119.5069847},"882":{"city":"澎湖縣","town":"望安鄉","lat":23.3576577,"lng":119.500894},"883":{"city":"澎湖縣","town":"七美鄉","lat":23.2067107,"lng":119.4244825},"884":{"city":"澎湖縣","town":"白沙鄉","lat":23.666538,"lng":119.598639},"885":{"city":"澎湖縣","town":"湖西鄉","lat":23.584072,"lng":119.6528318},"890":{"city":"金門縣","town":"金沙鎮","lat":24.488898,"lng":118.413132},"891":{"city":"金門縣","town":"金湖鎮","lat":24.4414641,"lng":118.4171018},"892":{"city":"金門縣","town":"金寧鄉","lat":24.450966,"lng":118.334887},"893":{"city":"金門縣","town":"金城鎮","lat":24.432824,"lng":118.320697},"894":{"city":"金門縣","town":"烈嶼鄉","lat":24.4295409,"lng":118.2445892},"896":{"city":"金門縣","town":"烏坵鄉","lat":24.9887062,"lng":119.4531826},"900":{"city":"屏東縣","town":"屏東市","lat":22.662498,"lng":120.4914295},"901":{"city":"屏東縣","town":"三地門鄉","lat":22.7162015,"lng":120.6541301},"902":{"city":"屏東縣","town":"霧臺鄉","lat":22.7490518,"lng":120.7282593},"903":{"city":"屏東縣","town":"瑪家鄉","lat":22.7086763,"lng":120.6494041},"904":{"city":"屏東縣","town":"九如鄉","lat":22.740429,"lng":120.4903298},"905":{"city":"屏東縣","town":"里港鄉","lat":22.7792625,"lng":120.4944974},"906":{"city":"屏東縣","town":"高樹鄉","lat":22.8267314,"lng":120.600241},"907":{"city":"屏東縣","town":"鹽埔鄉","lat":22.7543743,"lng":120.5727019},"908":{"city":"屏東縣","town":"長治鄉","lat":22.676538,"lng":120.5272963},"909":{"city":"屏東縣","town":"麟洛鄉","lat":22.6506473,"lng":120.5272056},"911":{"city":"屏東縣","town":"竹田鄉","lat":22.584724,"lng":120.543981},"912":{"city":"屏東縣","town":"內埔鄉","lat":22.6120045,"lng":120.5668293},"913":{"city":"屏東縣","town":"萬丹鄉","lat":22.5894894,"lng":120.4850182},"920":{"city":"屏東縣","town":"潮州鎮","lat":22.549845,"lng":120.5429633},"921":{"city":"屏東縣","town":"泰武鄉","lat":22.5919045,"lng":120.6319498},"922":{"city":"屏東縣","town":"來義鄉","lat":22.5261844,"lng":120.6315782},"923":{"city":"屏東縣","town":"萬巒鄉","lat":22.5726416,"lng":120.567841},"924":{"city":"屏東縣","town":"崁頂鄉","lat":22.5147343,"lng":120.5140493},"925":{"city":"屏東縣","town":"新埤鄉","lat":22.4701881,"lng":120.5498736},"926":{"city":"屏東縣","town":"南州鄉","lat":22.490404,"lng":120.509879},"927":{"city":"屏東縣","town":"林邊鄉","lat":22.431504,"lng":120.5097562},"928":{"city":"屏東縣","town":"東港鎮","lat":22.4666854,"lng":120.454361},"929":{"city":"屏東縣","town":"琉球鄉","lat":22.348635,"lng":120.3827309},"931":{"city":"屏東縣","town":"佳冬鄉","lat":22.419209,"lng":120.5524196},"932":{"city":"屏東縣","town":"新園鄉","lat":22.5438351,"lng":120.4614914},"940":{"city":"屏東縣","town":"枋寮鄉","lat":22.3655097,"lng":120.5934906},"941":{"city":"屏東縣","town":"枋山鄉","lat":22.2639616,"lng":120.6524803},"942":{"city":"屏東縣","town":"春日鄉","lat":22.3710005,"lng":120.6290908},"943":{"city":"屏東縣","town":"獅子鄉","lat":22.201775,"lng":120.705438},"944":{"city":"屏東縣","town":"車城鄉","lat":22.0739409,"lng":120.714276},"945":{"city":"屏東縣","town":"牡丹鄉","lat":22.1261502,"lng":120.7743059},"946":{"city":"屏東縣","town":"恆春鎮","lat":22.0037401,"lng":120.7472461},"947":{"city":"屏東縣","town":"滿州鄉","lat":22.020813,"lng":120.838632},"950":{"city":"臺東縣","town":"臺東市","lat":22.7548208,"lng":121.1465131},"951":{"city":"臺東縣","town":"綠島鄉","lat":22.6658421,"lng":121.4705314},"952":{"city":"臺東縣","town":"蘭嶼鄉","lat":22.0244984,"lng":121.5560627},"953":{"city":"臺東縣","town":"延平鄉","lat":22.9025753,"lng":121.0860671},"954":{"city":"臺東縣","town":"卑南鄉","lat":22.7827393,"lng":121.0870294},"955":{"city":"臺東縣","town":"鹿野鄉","lat":22.9393083,"lng":121.1519859},"956":{"city":"臺東縣","town":"關山鎮","lat":23.0474453,"lng":121.1630554},"957":{"city":"臺東縣","town":"海端鄉","lat":23.102057,"lng":121.176541},"958":{"city":"臺東縣","town":"池上鄉","lat":23.1223101,"lng":121.2151887},"959":{"city":"臺東縣","town":"東河鄉","lat":22.9689404,"lng":121.3028937},"961":{"city":"臺東縣","town":"成功鎮","lat":23.1050697,"lng":121.3808747},"962":{"city":"臺東縣","town":"長濱鄉","lat":23.3149961,"lng":121.4514207},"963":{"city":"臺東縣","town":"太麻里鄉","lat":22.615548,"lng":121.007607},"964":{"city":"臺東縣","town":"金峰鄉","lat":22.5946397,"lng":120.9607096},"965":{"city":"臺東縣","town":"大武鄉","lat":22.340518,"lng":120.890073},"966":{"city":"臺東縣","town":"達仁鄉","lat":22.296818,"lng":120.882973},"970":{"city":"花蓮縣","town":"花蓮市","lat":23.9820651,"lng":121.6067705},"971":{"city":"花蓮縣","town":"新城鄉","lat":24.0392994,"lng":121.6041173},"972":{"city":"花蓮縣","town":"秀林鄉","lat":24.1185835,"lng":121.6248326},"973":{"city":"花蓮縣","town":"吉安鄉","lat":23.9729455,"lng":121.5636438},"974":{"city":"花蓮縣","town":"壽豐鄉","lat":23.8703424,"lng":121.5088259},"975":{"city":"花蓮縣","town":"鳳林鎮","lat":23.7447637,"lng":121.4515822},"976":{"city":"花蓮縣","town":"光復鄉","lat":23.669342,"lng":121.4233065},"977":{"city":"花蓮縣","town":"豐濱鄉","lat":23.6012024,"lng":121.5211488},"978":{"city":"花蓮縣","town":"瑞穗鄉","lat":23.4964553,"lng":121.3757788},"979":{"city":"花蓮縣","town":"萬榮鄉","lat":23.714875,"lng":121.4109617},"981":{"city":"花蓮縣","town":"玉里鎮","lat":23.335527,"lng":121.315197},"982":{"city":"花蓮縣","town":"卓溪鄉","lat":23.346478,"lng":121.303451},"983":{"city":"花蓮縣","town":"富里鄉","lat":23.1794845,"lng":121.250233}} \ No newline at end of file +{"100":{"city":"臺北","town":"中正","lat":25.0443212,"lng":121.5247613,"cityLevel":"市","townLevel":"區"},"103":{"city":"臺北","town":"大同","lat":25.0661934,"lng":121.515268,"cityLevel":"市","townLevel":"區"},"104":{"city":"臺北","town":"中山","lat":25.0642771,"lng":121.5335776,"cityLevel":"市","townLevel":"區"},"105":{"city":"臺北","town":"松山","lat":25.049847,"lng":121.577241,"cityLevel":"市","townLevel":"區"},"106":{"city":"臺北","town":"大安","lat":25.02642,"lng":121.534511,"cityLevel":"市","townLevel":"區"},"108":{"city":"臺北","town":"萬華","lat":25.034839,"lng":121.4997957,"cityLevel":"市","townLevel":"區"},"110":{"city":"臺北","town":"信義","lat":25.0331574,"lng":121.5668777,"cityLevel":"市","townLevel":"區"},"111":{"city":"臺北","town":"士林","lat":25.0927548,"lng":121.519565,"cityLevel":"市","townLevel":"區"},"112":{"city":"臺北","town":"北投","lat":25.1323666,"lng":121.5029268,"cityLevel":"市","townLevel":"區"},"114":{"city":"臺北","town":"內湖","lat":25.06929,"lng":121.588949,"cityLevel":"市","townLevel":"區"},"115":{"city":"臺北","town":"南港","lat":25.0547059,"lng":121.6066929,"cityLevel":"市","townLevel":"區"},"116":{"city":"臺北","town":"文山","lat":24.98964,"lng":121.5700826,"cityLevel":"市","townLevel":"區"},"200":{"city":"基隆","town":"仁愛","lat":25.125069,"lng":121.736754,"cityLevel":"市","townLevel":"區"},"201":{"city":"基隆","town":"信義","lat":25.1294717,"lng":121.7512671,"cityLevel":"市","townLevel":"區"},"202":{"city":"基隆","town":"中正","lat":25.1407924,"lng":121.7592534,"cityLevel":"市","townLevel":"區"},"203":{"city":"基隆","town":"中山","lat":25.152899,"lng":121.729552,"cityLevel":"市","townLevel":"區"},"204":{"city":"基隆","town":"安樂","lat":25.121176,"lng":121.7230804,"cityLevel":"市","townLevel":"區"},"205":{"city":"基隆","town":"暖暖","lat":25.1001834,"lng":121.735933,"cityLevel":"市","townLevel":"區"},"206":{"city":"基隆","town":"七堵","lat":25.097653,"lng":121.7165013,"cityLevel":"市","townLevel":"區"},"207":{"city":"新北","town":"萬里","lat":25.178066,"lng":121.689548,"cityLevel":"市","townLevel":"區"},"208":{"city":"新北","town":"金山","lat":25.222241,"lng":121.636629,"cityLevel":"市","townLevel":"區"},"209":{"city":"連江","town":"南竿","lat":26.1529312,"lng":119.9387995,"cityLevel":"縣","townLevel":"鄉"},"210":{"city":"連江","town":"北竿","lat":26.223938,"lng":119.997139,"cityLevel":"縣","townLevel":"鄉"},"211":{"city":"連江","town":"莒光","lat":25.9687384,"lng":119.9369689,"cityLevel":"縣","townLevel":"鄉"},"212":{"city":"連江","town":"東引","lat":26.3672636,"lng":120.4898789,"cityLevel":"縣","townLevel":"鄉"},"220":{"city":"新北","town":"板橋","lat":25.0096156,"lng":121.4592358,"cityLevel":"市","townLevel":"區"},"221":{"city":"新北","town":"汐止","lat":25.064261,"lng":121.65869,"cityLevel":"市","townLevel":"區"},"222":{"city":"新北","town":"深坑","lat":25.0025007,"lng":121.615944,"cityLevel":"市","townLevel":"區"},"223":{"city":"新北","town":"石碇","lat":24.9914859,"lng":121.6579019,"cityLevel":"市","townLevel":"區"},"224":{"city":"新北","town":"瑞芳","lat":25.1087635,"lng":121.8098935,"cityLevel":"市","townLevel":"區"},"226":{"city":"新北","town":"平溪","lat":25.026689,"lng":121.73819,"cityLevel":"市","townLevel":"區"},"227":{"city":"新北","town":"雙溪","lat":25.0337322,"lng":121.8657341,"cityLevel":"市","townLevel":"區"},"228":{"city":"新北","town":"貢寮","lat":25.021812,"lng":121.910293,"cityLevel":"市","townLevel":"區"},"231":{"city":"新北","town":"新店","lat":24.9749713,"lng":121.5431673,"cityLevel":"市","townLevel":"區"},"232":{"city":"新北","town":"坪林","lat":24.9361367,"lng":121.7117653,"cityLevel":"市","townLevel":"區"},"233":{"city":"新北","town":"烏來","lat":24.8717802,"lng":121.5478634,"cityLevel":"市","townLevel":"區"},"234":{"city":"新北","town":"永和","lat":25.0091768,"lng":121.5202731,"cityLevel":"市","townLevel":"區"},"235":{"city":"新北","town":"中和","lat":24.9985208,"lng":121.5007413,"cityLevel":"市","townLevel":"區"},"236":{"city":"新北","town":"土城","lat":24.9723361,"lng":121.4429389,"cityLevel":"市","townLevel":"區"},"237":{"city":"新北","town":"三峽","lat":24.9341863,"lng":121.369083,"cityLevel":"市","townLevel":"區"},"238":{"city":"新北","town":"樹林","lat":24.9899673,"lng":121.4246321,"cityLevel":"市","townLevel":"區"},"239":{"city":"新北","town":"鶯歌","lat":24.9560294,"lng":121.3544312,"cityLevel":"市","townLevel":"區"},"241":{"city":"新北","town":"三重","lat":25.0607692,"lng":121.4884178,"cityLevel":"市","townLevel":"區"},"242":{"city":"新北","town":"新莊","lat":25.035976,"lng":121.450478,"cityLevel":"市","townLevel":"區"},"243":{"city":"新北","town":"泰山","lat":25.059291,"lng":121.431495,"cityLevel":"市","townLevel":"區"},"244":{"city":"新北","town":"林口","lat":25.0768252,"lng":121.3886134,"cityLevel":"市","townLevel":"區"},"247":{"city":"新北","town":"蘆洲","lat":25.0847112,"lng":121.4737354,"cityLevel":"市","townLevel":"區"},"248":{"city":"新北","town":"五股","lat":25.0830393,"lng":121.4380781,"cityLevel":"市","townLevel":"區"},"249":{"city":"新北","town":"八里","lat":25.1537592,"lng":121.4064305,"cityLevel":"市","townLevel":"區"},"251":{"city":"新北","town":"淡水","lat":25.1696463,"lng":121.4409722,"cityLevel":"市","townLevel":"區"},"252":{"city":"新北","town":"三芝","lat":25.257748,"lng":121.5009345,"cityLevel":"市","townLevel":"區"},"253":{"city":"新北","town":"石門","lat":25.291248,"lng":121.567631,"cityLevel":"市","townLevel":"區"},"260":{"city":"宜蘭","town":"宜蘭","lat":24.7520373,"lng":121.7531493,"cityLevel":"縣","townLevel":"市"},"261":{"city":"宜蘭","town":"頭城","lat":24.8548387,"lng":121.8213189,"cityLevel":"縣","townLevel":"鎮"},"262":{"city":"宜蘭","town":"礁溪","lat":24.8234257,"lng":121.7711725,"cityLevel":"縣","townLevel":"鄉"},"263":{"city":"宜蘭","town":"壯圍","lat":24.746832,"lng":121.785759,"cityLevel":"縣","townLevel":"鄉"},"264":{"city":"宜蘭","town":"員山","lat":24.7433944,"lng":121.7232538,"cityLevel":"縣","townLevel":"鄉"},"265":{"city":"宜蘭","town":"羅東","lat":24.6769245,"lng":121.7669529,"cityLevel":"縣","townLevel":"鎮"},"266":{"city":"宜蘭","town":"三星","lat":24.665483,"lng":121.654047,"cityLevel":"縣","townLevel":"鄉"},"267":{"city":"宜蘭","town":"大同","lat":24.677412,"lng":121.6090927,"cityLevel":"縣","townLevel":"鄉"},"268":{"city":"宜蘭","town":"五結","lat":24.684772,"lng":121.7982898,"cityLevel":"縣","townLevel":"鄉"},"269":{"city":"宜蘭","town":"冬山","lat":24.634338,"lng":121.792851,"cityLevel":"縣","townLevel":"鄉"},"270":{"city":"宜蘭","town":"蘇澳","lat":24.594315,"lng":121.8421903,"cityLevel":"縣","townLevel":"鎮"},"272":{"city":"宜蘭","town":"南澳","lat":24.465996,"lng":121.803714,"cityLevel":"縣","townLevel":"鄉"},"300":{"city":"新竹","town":"北","lat":24.8163726,"lng":120.9703141,"cityLevel":"市","townLevel":"區"},"301":{"city":"新竹","town":"東","lat":24.8051881,"lng":120.9732327,"cityLevel":"市","townLevel":"區"},"302":{"city":"新竹","town":"竹北","lat":24.8395807,"lng":121.0040235,"cityLevel":"縣","townLevel":"市"},"303":{"city":"新竹","town":"湖口","lat":24.9010068,"lng":121.0478749,"cityLevel":"縣","townLevel":"鄉"},"304":{"city":"新竹","town":"新豐","lat":24.9007026,"lng":120.9852313,"cityLevel":"縣","townLevel":"鄉"},"305":{"city":"新竹","town":"新埔","lat":24.8256201,"lng":121.0740799,"cityLevel":"縣","townLevel":"鎮"},"306":{"city":"新竹","town":"關西","lat":24.7922806,"lng":121.1759547,"cityLevel":"縣","townLevel":"鎮"},"307":{"city":"新竹","town":"芎林","lat":24.773309,"lng":121.081855,"cityLevel":"縣","townLevel":"鄉"},"308":{"city":"新竹","town":"寶山","lat":24.7654715,"lng":120.9913066,"cityLevel":"縣","townLevel":"鄉"},"309":{"city":"新竹","town":"香山","lat":24.7940445,"lng":120.9422678,"cityLevel":"市","townLevel":"區"},"310":{"city":"新竹","town":"竹東","lat":24.7366942,"lng":121.0916513,"cityLevel":"縣","townLevel":"鎮"},"311":{"city":"新竹","town":"五峰","lat":24.6320786,"lng":121.119596,"cityLevel":"縣","townLevel":"鄉"},"312":{"city":"新竹","town":"橫山","lat":24.7167807,"lng":121.1414985,"cityLevel":"縣","townLevel":"鄉"},"313":{"city":"新竹","town":"尖石","lat":24.705004,"lng":121.2020864,"cityLevel":"縣","townLevel":"鄉"},"314":{"city":"新竹","town":"北埔","lat":24.7019901,"lng":121.0563354,"cityLevel":"縣","townLevel":"鄉"},"315":{"city":"新竹","town":"峨眉","lat":24.6887921,"lng":121.0195946,"cityLevel":"縣","townLevel":"鄉"},"320":{"city":"桃園","town":"中壢","lat":24.9656124,"lng":121.2249927,"cityLevel":"市","townLevel":"區"},"324":{"city":"桃園","town":"平鎮","lat":24.9456694,"lng":121.2181884,"cityLevel":"市","townLevel":"區"},"325":{"city":"桃園","town":"龍潭","lat":24.8704855,"lng":121.2224472,"cityLevel":"市","townLevel":"區"},"326":{"city":"桃園","town":"楊梅","lat":24.9128508,"lng":121.1444587,"cityLevel":"市","townLevel":"區"},"327":{"city":"桃園","town":"新屋","lat":24.9725439,"lng":121.105533,"cityLevel":"市","townLevel":"區"},"328":{"city":"桃園","town":"觀音","lat":25.0276516,"lng":121.0836028,"cityLevel":"市","townLevel":"區"},"330":{"city":"桃園","town":"桃園","lat":24.993919,"lng":121.3016657,"cityLevel":"市","townLevel":"區"},"333":{"city":"桃園","town":"龜山","lat":24.9925139,"lng":121.337824,"cityLevel":"市","townLevel":"區"},"334":{"city":"桃園","town":"八德","lat":24.9289862,"lng":121.2846406,"cityLevel":"市","townLevel":"區"},"335":{"city":"桃園","town":"大溪","lat":24.880548,"lng":121.287142,"cityLevel":"市","townLevel":"區"},"336":{"city":"桃園","town":"復興","lat":24.8147989,"lng":121.3511305,"cityLevel":"市","townLevel":"區"},"337":{"city":"桃園","town":"大園","lat":25.0638556,"lng":121.1954603,"cityLevel":"市","townLevel":"區"},"338":{"city":"桃園","town":"蘆竹","lat":25.046925,"lng":121.295077,"cityLevel":"市","townLevel":"區"},"350":{"city":"苗栗","town":"竹南","lat":24.6838448,"lng":120.8733503,"cityLevel":"縣","townLevel":"鎮"},"351":{"city":"苗栗","town":"頭份","lat":24.6865276,"lng":120.9132454,"cityLevel":"縣","townLevel":"市"},"352":{"city":"苗栗","town":"三灣","lat":24.6531425,"lng":120.9566265,"cityLevel":"縣","townLevel":"鄉"},"353":{"city":"苗栗","town":"南庄","lat":24.5970648,"lng":121.000339,"cityLevel":"縣","townLevel":"鄉"},"354":{"city":"苗栗","town":"獅潭","lat":24.539419,"lng":120.920496,"cityLevel":"縣","townLevel":"鄉"},"356":{"city":"苗栗","town":"後龍","lat":24.613682,"lng":120.792046,"cityLevel":"縣","townLevel":"鎮"},"357":{"city":"苗栗","town":"通霄","lat":24.4912805,"lng":120.684249,"cityLevel":"縣","townLevel":"鎮"},"358":{"city":"苗栗","town":"苑裡","lat":24.4396522,"lng":120.653261,"cityLevel":"縣","townLevel":"鎮"},"360":{"city":"苗栗","town":"苗栗","lat":24.5616772,"lng":120.8190175,"cityLevel":"縣","townLevel":"市"},"361":{"city":"苗栗","town":"造橋","lat":24.638552,"lng":120.8651632,"cityLevel":"縣","townLevel":"鄉"},"362":{"city":"苗栗","town":"頭屋","lat":24.5778158,"lng":120.8511057,"cityLevel":"縣","townLevel":"鄉"},"363":{"city":"苗栗","town":"公館","lat":24.5058646,"lng":120.8284935,"cityLevel":"縣","townLevel":"鄉"},"364":{"city":"苗栗","town":"大湖","lat":24.4234081,"lng":120.8661781,"cityLevel":"縣","townLevel":"鄉"},"365":{"city":"苗栗","town":"泰安","lat":24.4471976,"lng":120.9081718,"cityLevel":"縣","townLevel":"鄉"},"366":{"city":"苗栗","town":"銅鑼","lat":24.4870514,"lng":120.7878718,"cityLevel":"縣","townLevel":"鄉"},"367":{"city":"苗栗","town":"三義","lat":24.4129179,"lng":120.7702392,"cityLevel":"縣","townLevel":"鄉"},"368":{"city":"苗栗","town":"西湖","lat":24.5567613,"lng":120.7570814,"cityLevel":"縣","townLevel":"鄉"},"369":{"city":"苗栗","town":"卓蘭","lat":24.3130501,"lng":120.8245152,"cityLevel":"縣","townLevel":"鎮"},"400":{"city":"臺中","town":"中","lat":24.1439458,"lng":120.6794414,"cityLevel":"市","townLevel":"區"},"401":{"city":"臺中","town":"東","lat":24.1366469,"lng":120.7037332,"cityLevel":"市","townLevel":"區"},"402":{"city":"臺中","town":"南","lat":24.1171412,"lng":120.6635905,"cityLevel":"市","townLevel":"區"},"403":{"city":"臺中","town":"西","lat":24.1413252,"lng":120.6710753,"cityLevel":"市","townLevel":"區"},"404":{"city":"臺中","town":"北","lat":24.1658534,"lng":120.6822936,"cityLevel":"市","townLevel":"區"},"406":{"city":"臺中","town":"北屯","lat":24.1826848,"lng":120.686403,"cityLevel":"市","townLevel":"區"},"407":{"city":"臺中","town":"西屯","lat":24.1658213,"lng":120.6336717,"cityLevel":"市","townLevel":"區"},"408":{"city":"臺中","town":"南屯","lat":24.1345298,"lng":120.6442903,"cityLevel":"市","townLevel":"區"},"411":{"city":"臺中","town":"太平","lat":24.1266572,"lng":120.7185562,"cityLevel":"市","townLevel":"區"},"412":{"city":"臺中","town":"大里","lat":24.0994693,"lng":120.6778413,"cityLevel":"市","townLevel":"區"},"413":{"city":"臺中","town":"霧峰","lat":24.0613153,"lng":120.7000868,"cityLevel":"市","townLevel":"區"},"414":{"city":"臺中","town":"烏日","lat":24.104605,"lng":120.6238467,"cityLevel":"市","townLevel":"區"},"420":{"city":"臺中","town":"豐原","lat":24.2419087,"lng":120.7181281,"cityLevel":"市","townLevel":"區"},"421":{"city":"臺中","town":"后里","lat":24.3049377,"lng":120.7107454,"cityLevel":"市","townLevel":"區"},"422":{"city":"臺中","town":"石岡","lat":24.274898,"lng":120.7803458,"cityLevel":"市","townLevel":"區"},"423":{"city":"臺中","town":"東勢","lat":24.2585728,"lng":120.8279546,"cityLevel":"市","townLevel":"區"},"424":{"city":"臺中","town":"和平","lat":24.1752225,"lng":120.8835809,"cityLevel":"市","townLevel":"區"},"426":{"city":"臺中","town":"新社","lat":24.233957,"lng":120.809416,"cityLevel":"市","townLevel":"區"},"427":{"city":"臺中","town":"潭子","lat":24.2031708,"lng":120.7228978,"cityLevel":"市","townLevel":"區"},"428":{"city":"臺中","town":"大雅","lat":24.2291463,"lng":120.6478436,"cityLevel":"市","townLevel":"區"},"429":{"city":"臺中","town":"神岡","lat":24.2579749,"lng":120.6614216,"cityLevel":"市","townLevel":"區"},"432":{"city":"臺中","town":"大肚","lat":24.1511295,"lng":120.5457643,"cityLevel":"市","townLevel":"區"},"433":{"city":"臺中","town":"沙鹿","lat":24.2333313,"lng":120.566317,"cityLevel":"市","townLevel":"區"},"434":{"city":"臺中","town":"龍井","lat":24.1924488,"lng":120.5457999,"cityLevel":"市","townLevel":"區"},"435":{"city":"臺中","town":"梧棲","lat":24.2549063,"lng":120.5317002,"cityLevel":"市","townLevel":"區"},"436":{"city":"臺中","town":"清水","lat":24.2681562,"lng":120.559717,"cityLevel":"市","townLevel":"區"},"437":{"city":"臺中","town":"大甲","lat":24.349083,"lng":120.622468,"cityLevel":"市","townLevel":"區"},"438":{"city":"臺中","town":"外埔","lat":24.3321248,"lng":120.654334,"cityLevel":"市","townLevel":"區"},"439":{"city":"臺中","town":"大安","lat":24.346126,"lng":120.5866075,"cityLevel":"市","townLevel":"區"},"500":{"city":"彰化","town":"彰化","lat":24.0809056,"lng":120.5422565,"cityLevel":"縣","townLevel":"市"},"502":{"city":"彰化","town":"芬園","lat":24.013628,"lng":120.628964,"cityLevel":"縣","townLevel":"鄉"},"503":{"city":"彰化","town":"花壇","lat":24.0296582,"lng":120.5382578,"cityLevel":"縣","townLevel":"鄉"},"504":{"city":"彰化","town":"秀水","lat":24.035321,"lng":120.5028098,"cityLevel":"縣","townLevel":"鄉"},"505":{"city":"彰化","town":"鹿港","lat":24.0572566,"lng":120.4350548,"cityLevel":"縣","townLevel":"鎮"},"506":{"city":"彰化","town":"福興","lat":24.0478713,"lng":120.4439546,"cityLevel":"縣","townLevel":"鄉"},"507":{"city":"彰化","town":"線西","lat":24.1306678,"lng":120.470656,"cityLevel":"縣","townLevel":"鄉"},"508":{"city":"彰化","town":"和美","lat":24.1085584,"lng":120.4941497,"cityLevel":"縣","townLevel":"鎮"},"509":{"city":"彰化","town":"伸港","lat":24.1596067,"lng":120.4861141,"cityLevel":"縣","townLevel":"鄉"},"510":{"city":"彰化","town":"員林","lat":23.9589162,"lng":120.5743943,"cityLevel":"縣","townLevel":"市"},"511":{"city":"彰化","town":"社頭","lat":23.8968186,"lng":120.5858074,"cityLevel":"縣","townLevel":"鄉"},"512":{"city":"彰化","town":"永靖","lat":23.9245962,"lng":120.5477204,"cityLevel":"縣","townLevel":"鄉"},"513":{"city":"彰化","town":"埔心","lat":23.952988,"lng":120.54354,"cityLevel":"縣","townLevel":"鄉"},"514":{"city":"彰化","town":"溪湖","lat":23.9664245,"lng":120.4832787,"cityLevel":"縣","townLevel":"鎮"},"515":{"city":"彰化","town":"大村","lat":23.9934239,"lng":120.547268,"cityLevel":"縣","townLevel":"鄉"},"516":{"city":"彰化","town":"埔鹽","lat":24.000442,"lng":120.4636578,"cityLevel":"縣","townLevel":"鄉"},"520":{"city":"彰化","town":"田中","lat":23.8614831,"lng":120.5809585,"cityLevel":"縣","townLevel":"鎮"},"521":{"city":"彰化","town":"北斗","lat":23.8713826,"lng":120.5218625,"cityLevel":"縣","townLevel":"鎮"},"522":{"city":"彰化","town":"田尾","lat":23.8922407,"lng":120.5259709,"cityLevel":"縣","townLevel":"鄉"},"523":{"city":"彰化","town":"埤頭","lat":23.8914618,"lng":120.4621725,"cityLevel":"縣","townLevel":"鄉"},"524":{"city":"彰化","town":"溪州","lat":23.8516188,"lng":120.498976,"cityLevel":"縣","townLevel":"鄉"},"525":{"city":"彰化","town":"竹塘","lat":23.8605045,"lng":120.4277961,"cityLevel":"縣","townLevel":"鄉"},"526":{"city":"彰化","town":"二林","lat":23.8998045,"lng":120.3742654,"cityLevel":"縣","townLevel":"鎮"},"527":{"city":"彰化","town":"大城","lat":23.852314,"lng":120.3208972,"cityLevel":"縣","townLevel":"鄉"},"528":{"city":"彰化","town":"芳苑","lat":23.924354,"lng":120.320389,"cityLevel":"縣","townLevel":"鄉"},"530":{"city":"彰化","town":"二水","lat":23.8066858,"lng":120.6190203,"cityLevel":"縣","townLevel":"鄉"},"540":{"city":"南投","town":"南投","lat":23.9116414,"lng":120.6874199,"cityLevel":"縣","townLevel":"市"},"541":{"city":"南投","town":"中寮","lat":23.8790067,"lng":120.7660301,"cityLevel":"縣","townLevel":"鄉"},"542":{"city":"南投","town":"草屯","lat":23.9736845,"lng":120.6802819,"cityLevel":"縣","townLevel":"鎮"},"544":{"city":"南投","town":"國姓","lat":24.040019,"lng":120.8575192,"cityLevel":"縣","townLevel":"鄉"},"545":{"city":"南投","town":"埔里","lat":23.9665377,"lng":120.9691809,"cityLevel":"縣","townLevel":"鎮"},"546":{"city":"南投","town":"仁愛","lat":24.021544,"lng":121.1320616,"cityLevel":"縣","townLevel":"鄉"},"551":{"city":"南投","town":"名間","lat":23.8382161,"lng":120.702985,"cityLevel":"縣","townLevel":"鄉"},"552":{"city":"南投","town":"集集","lat":23.8283683,"lng":120.7864885,"cityLevel":"縣","townLevel":"鎮"},"553":{"city":"南投","town":"水里","lat":23.8113991,"lng":120.8560852,"cityLevel":"縣","townLevel":"鄉"},"555":{"city":"南投","town":"魚池","lat":23.8957849,"lng":120.9356849,"cityLevel":"縣","townLevel":"鄉"},"556":{"city":"南投","town":"信義","lat":23.696797,"lng":120.854557,"cityLevel":"縣","townLevel":"鄉"},"557":{"city":"南投","town":"竹山","lat":23.7578635,"lng":120.6716995,"cityLevel":"縣","townLevel":"鎮"},"558":{"city":"南投","town":"鹿谷","lat":23.7458415,"lng":120.7534428,"cityLevel":"縣","townLevel":"鄉"},"600":{"city":"嘉義","town":"東","lat":23.4786578,"lng":120.4534596,"cityLevel":"市","townLevel":"區"},"601":{"city":"嘉義","town":"西","lat":23.4646967,"lng":120.4352822,"cityLevel":"市","townLevel":"區"},"602":{"city":"嘉義","town":"番路","lat":23.4644973,"lng":120.554286,"cityLevel":"縣","townLevel":"鄉"},"603":{"city":"嘉義","town":"梅山","lat":23.5850678,"lng":120.5554676,"cityLevel":"縣","townLevel":"鄉"},"604":{"city":"嘉義","town":"竹崎","lat":23.5230788,"lng":120.5513988,"cityLevel":"縣","townLevel":"鄉"},"605":{"city":"嘉義","town":"阿里山","lat":23.4712117,"lng":120.7135217,"cityLevel":"縣","townLevel":"鄉"},"606":{"city":"嘉義","town":"中埔","lat":23.425139,"lng":120.522952,"cityLevel":"縣","townLevel":"鄉"},"607":{"city":"嘉義","town":"大埔","lat":23.2986941,"lng":120.5869311,"cityLevel":"縣","townLevel":"鄉"},"608":{"city":"嘉義","town":"水上","lat":23.428531,"lng":120.398035,"cityLevel":"縣","townLevel":"鄉"},"611":{"city":"嘉義","town":"鹿草","lat":23.4113835,"lng":120.3082682,"cityLevel":"縣","townLevel":"鄉"},"612":{"city":"嘉義","town":"太保","lat":23.458967,"lng":120.3323479,"cityLevel":"縣","townLevel":"市"},"613":{"city":"嘉義","town":"朴子","lat":23.4575288,"lng":120.2459226,"cityLevel":"縣","townLevel":"市"},"614":{"city":"嘉義","town":"東石","lat":23.4587147,"lng":120.1537883,"cityLevel":"縣","townLevel":"鄉"},"615":{"city":"嘉義","town":"六腳","lat":23.4940922,"lng":120.2907962,"cityLevel":"縣","townLevel":"鄉"},"616":{"city":"嘉義","town":"新港","lat":23.5519744,"lng":120.3478039,"cityLevel":"縣","townLevel":"鄉"},"621":{"city":"嘉義","town":"民雄","lat":23.5516417,"lng":120.4283616,"cityLevel":"縣","townLevel":"鄉"},"622":{"city":"嘉義","town":"大林","lat":23.603931,"lng":120.471178,"cityLevel":"縣","townLevel":"鎮"},"623":{"city":"嘉義","town":"溪口","lat":23.6025304,"lng":120.392323,"cityLevel":"縣","townLevel":"鄉"},"624":{"city":"嘉義","town":"義竹","lat":23.3361064,"lng":120.2430475,"cityLevel":"縣","townLevel":"鄉"},"625":{"city":"嘉義","town":"布袋","lat":23.3781734,"lng":120.1669564,"cityLevel":"縣","townLevel":"鎮"},"630":{"city":"雲林","town":"斗南","lat":23.680105,"lng":120.47772,"cityLevel":"縣","townLevel":"鎮"},"631":{"city":"雲林","town":"大埤","lat":23.6460343,"lng":120.4314818,"cityLevel":"縣","townLevel":"鄉"},"632":{"city":"雲林","town":"虎尾","lat":23.7083539,"lng":120.4451923,"cityLevel":"縣","townLevel":"鎮"},"633":{"city":"雲林","town":"土庫","lat":23.6820621,"lng":120.3899062,"cityLevel":"縣","townLevel":"鎮"},"634":{"city":"雲林","town":"褒忠","lat":23.691007,"lng":120.3037335,"cityLevel":"縣","townLevel":"鄉"},"635":{"city":"雲林","town":"東勢","lat":23.6753034,"lng":120.2525936,"cityLevel":"縣","townLevel":"鄉"},"636":{"city":"雲林","town":"臺西","lat":23.700477,"lng":120.1957632,"cityLevel":"縣","townLevel":"鄉"},"637":{"city":"雲林","town":"崙背","lat":23.7619087,"lng":120.3591424,"cityLevel":"縣","townLevel":"鄉"},"638":{"city":"雲林","town":"麥寮","lat":23.7539853,"lng":120.2513078,"cityLevel":"縣","townLevel":"鄉"},"640":{"city":"雲林","town":"斗六","lat":23.6971143,"lng":120.5269987,"cityLevel":"縣","townLevel":"市"},"643":{"city":"雲林","town":"林內","lat":23.7562156,"lng":120.6129427,"cityLevel":"縣","townLevel":"鄉"},"646":{"city":"雲林","town":"古坑","lat":23.6426312,"lng":120.5619595,"cityLevel":"縣","townLevel":"鄉"},"647":{"city":"雲林","town":"莿桐","lat":23.7610077,"lng":120.5025072,"cityLevel":"縣","townLevel":"鄉"},"648":{"city":"雲林","town":"西螺","lat":23.7977736,"lng":120.465685,"cityLevel":"縣","townLevel":"鎮"},"649":{"city":"雲林","town":"二崙","lat":23.7711012,"lng":120.4129596,"cityLevel":"縣","townLevel":"鄉"},"651":{"city":"雲林","town":"北港","lat":23.5759236,"lng":120.302446,"cityLevel":"縣","townLevel":"鎮"},"652":{"city":"雲林","town":"水林","lat":23.5727035,"lng":120.2459507,"cityLevel":"縣","townLevel":"鄉"},"653":{"city":"雲林","town":"口湖","lat":23.5827378,"lng":120.1858552,"cityLevel":"縣","townLevel":"鄉"},"654":{"city":"雲林","town":"四湖","lat":23.6378317,"lng":120.2242949,"cityLevel":"縣","townLevel":"鄉"},"655":{"city":"雲林","town":"元長","lat":23.6497447,"lng":120.3148349,"cityLevel":"縣","townLevel":"鄉"},"700":{"city":"臺南","town":"中西","lat":22.9922364,"lng":120.2056571,"cityLevel":"市","townLevel":"區"},"701":{"city":"臺南","town":"東","lat":22.9802421,"lng":120.224004,"cityLevel":"市","townLevel":"區"},"702":{"city":"臺南","town":"南","lat":22.9611326,"lng":120.1885687,"cityLevel":"市","townLevel":"區"},"704":{"city":"臺南","town":"北","lat":22.9997522,"lng":120.2030341,"cityLevel":"市","townLevel":"區"},"708":{"city":"臺南","town":"安平","lat":22.9945789,"lng":120.1688523,"cityLevel":"市","townLevel":"區"},"709":{"city":"臺南","town":"安南","lat":23.0472321,"lng":120.184714,"cityLevel":"市","townLevel":"區"},"710":{"city":"臺南","town":"永康","lat":23.0260699,"lng":120.2570647,"cityLevel":"市","townLevel":"區"},"711":{"city":"臺南","town":"歸仁","lat":22.967286,"lng":120.2940045,"cityLevel":"市","townLevel":"區"},"712":{"city":"臺南","town":"新化","lat":23.0385411,"lng":120.310896,"cityLevel":"市","townLevel":"區"},"713":{"city":"臺南","town":"左鎮","lat":23.0567783,"lng":120.408708,"cityLevel":"市","townLevel":"區"},"714":{"city":"臺南","town":"玉井","lat":23.1237866,"lng":120.4601109,"cityLevel":"市","townLevel":"區"},"715":{"city":"臺南","town":"楠西","lat":23.174143,"lng":120.486337,"cityLevel":"市","townLevel":"區"},"716":{"city":"臺南","town":"南化","lat":23.042988,"lng":120.477816,"cityLevel":"市","townLevel":"區"},"717":{"city":"臺南","town":"仁德","lat":22.97243,"lng":120.251685,"cityLevel":"市","townLevel":"區"},"718":{"city":"臺南","town":"關廟","lat":22.9630039,"lng":120.3278144,"cityLevel":"市","townLevel":"區"},"719":{"city":"臺南","town":"龍崎","lat":22.9632926,"lng":120.3649712,"cityLevel":"市","townLevel":"區"},"720":{"city":"臺南","town":"官田","lat":23.1930442,"lng":120.3154967,"cityLevel":"市","townLevel":"區"},"721":{"city":"臺南","town":"麻豆","lat":23.1849449,"lng":120.2584456,"cityLevel":"市","townLevel":"區"},"722":{"city":"臺南","town":"佳里","lat":23.1652648,"lng":120.1770306,"cityLevel":"市","townLevel":"區"},"723":{"city":"臺南","town":"西港","lat":23.1229825,"lng":120.203413,"cityLevel":"市","townLevel":"區"},"724":{"city":"臺南","town":"七股","lat":23.1403809,"lng":120.1391359,"cityLevel":"市","townLevel":"區"},"725":{"city":"臺南","town":"將軍","lat":23.19905,"lng":120.158702,"cityLevel":"市","townLevel":"區"},"726":{"city":"臺南","town":"學甲","lat":23.2304835,"lng":120.1822926,"cityLevel":"市","townLevel":"區"},"727":{"city":"臺南","town":"北門","lat":23.267723,"lng":120.125445,"cityLevel":"市","townLevel":"區"},"730":{"city":"臺南","town":"新營","lat":23.3101426,"lng":120.3167031,"cityLevel":"市","townLevel":"區"},"731":{"city":"臺南","town":"後壁","lat":23.3659836,"lng":120.3619362,"cityLevel":"市","townLevel":"區"},"732":{"city":"臺南","town":"白河","lat":23.3512886,"lng":120.415752,"cityLevel":"市","townLevel":"區"},"733":{"city":"臺南","town":"東山","lat":23.3261625,"lng":120.4045009,"cityLevel":"市","townLevel":"區"},"734":{"city":"臺南","town":"六甲","lat":23.2318098,"lng":120.3474201,"cityLevel":"市","townLevel":"區"},"735":{"city":"臺南","town":"下營","lat":23.2356921,"lng":120.2643838,"cityLevel":"市","townLevel":"區"},"736":{"city":"臺南","town":"柳營","lat":23.278395,"lng":120.311673,"cityLevel":"市","townLevel":"區"},"737":{"city":"臺南","town":"鹽水","lat":23.320027,"lng":120.266097,"cityLevel":"市","townLevel":"區"},"741":{"city":"臺南","town":"善化","lat":23.1324288,"lng":120.2967849,"cityLevel":"市","townLevel":"區"},"742":{"city":"臺南","town":"大內","lat":23.1192073,"lng":120.3568212,"cityLevel":"市","townLevel":"區"},"743":{"city":"臺南","town":"山上","lat":23.1036173,"lng":120.3526487,"cityLevel":"市","townLevel":"區"},"744":{"city":"臺南","town":"新市","lat":23.0789967,"lng":120.2951827,"cityLevel":"市","townLevel":"區"},"745":{"city":"臺南","town":"安定","lat":23.121593,"lng":120.237118,"cityLevel":"市","townLevel":"區"},"800":{"city":"高雄","town":"新興","lat":22.6310347,"lng":120.3101095,"cityLevel":"市","townLevel":"區"},"801":{"city":"高雄","town":"前金","lat":22.6275276,"lng":120.2942181,"cityLevel":"市","townLevel":"區"},"802":{"city":"高雄","town":"苓雅","lat":22.621759,"lng":120.312194,"cityLevel":"市","townLevel":"區"},"803":{"city":"高雄","town":"鹽埕","lat":22.6247166,"lng":120.2868098,"cityLevel":"市","townLevel":"區"},"804":{"city":"高雄","town":"鼓山","lat":22.636776,"lng":120.2809626,"cityLevel":"市","townLevel":"區"},"805":{"city":"高雄","town":"旗津","lat":22.5900263,"lng":120.28471,"cityLevel":"市","townLevel":"區"},"806":{"city":"高雄","town":"前鎮","lat":22.5865658,"lng":120.318307,"cityLevel":"市","townLevel":"區"},"807":{"city":"高雄","town":"三民","lat":22.647684,"lng":120.299851,"cityLevel":"市","townLevel":"區"},"811":{"city":"高雄","town":"楠梓","lat":22.7283655,"lng":120.3263681,"cityLevel":"市","townLevel":"區"},"812":{"city":"高雄","town":"小港","lat":22.5652134,"lng":120.3380368,"cityLevel":"市","townLevel":"區"},"813":{"city":"高雄","town":"左營","lat":22.6899834,"lng":120.2950135,"cityLevel":"市","townLevel":"區"},"814":{"city":"高雄","town":"仁武","lat":22.7013806,"lng":120.3479837,"cityLevel":"市","townLevel":"區"},"815":{"city":"高雄","town":"大社","lat":22.730156,"lng":120.346671,"cityLevel":"市","townLevel":"區"},"820":{"city":"高雄","town":"岡山","lat":22.7974649,"lng":120.2950724,"cityLevel":"市","townLevel":"區"},"821":{"city":"高雄","town":"路竹","lat":22.8547435,"lng":120.2592442,"cityLevel":"市","townLevel":"區"},"822":{"city":"高雄","town":"阿蓮","lat":22.8832024,"lng":120.3274131,"cityLevel":"市","townLevel":"區"},"823":{"city":"高雄","town":"田寮","lat":22.8698825,"lng":120.3594334,"cityLevel":"市","townLevel":"區"},"824":{"city":"高雄","town":"燕巢","lat":22.7881575,"lng":120.3619685,"cityLevel":"市","townLevel":"區"},"825":{"city":"高雄","town":"橋頭","lat":22.757591,"lng":120.305809,"cityLevel":"市","townLevel":"區"},"826":{"city":"高雄","town":"梓官","lat":22.7606303,"lng":120.2671523,"cityLevel":"市","townLevel":"區"},"827":{"city":"高雄","town":"彌陀","lat":22.7814893,"lng":120.2507011,"cityLevel":"市","townLevel":"區"},"828":{"city":"高雄","town":"永安","lat":22.818298,"lng":120.224189,"cityLevel":"市","townLevel":"區"},"829":{"city":"高雄","town":"湖內","lat":22.9083136,"lng":120.211713,"cityLevel":"市","townLevel":"區"},"830":{"city":"高雄","town":"鳳山","lat":22.627075,"lng":120.362525,"cityLevel":"市","townLevel":"區"},"831":{"city":"高雄","town":"大寮","lat":22.6055196,"lng":120.3956199,"cityLevel":"市","townLevel":"區"},"832":{"city":"高雄","town":"林園","lat":22.5129453,"lng":120.3946805,"cityLevel":"市","townLevel":"區"},"833":{"city":"高雄","town":"鳥松","lat":22.6598339,"lng":120.364363,"cityLevel":"市","townLevel":"區"},"840":{"city":"高雄","town":"大樹","lat":22.6839054,"lng":120.4143416,"cityLevel":"市","townLevel":"區"},"842":{"city":"高雄","town":"旗山","lat":22.888642,"lng":120.48349,"cityLevel":"市","townLevel":"區"},"843":{"city":"高雄","town":"美濃","lat":22.8947952,"lng":120.5419493,"cityLevel":"市","townLevel":"區"},"844":{"city":"高雄","town":"六龜","lat":22.9984391,"lng":120.6327082,"cityLevel":"市","townLevel":"區"},"845":{"city":"高雄","town":"內門","lat":22.9428391,"lng":120.462606,"cityLevel":"市","townLevel":"區"},"846":{"city":"高雄","town":"杉林","lat":22.9717391,"lng":120.540058,"cityLevel":"市","townLevel":"區"},"847":{"city":"高雄","town":"甲仙","lat":23.0839058,"lng":120.587695,"cityLevel":"市","townLevel":"區"},"848":{"city":"高雄","town":"桃源","lat":23.1592827,"lng":120.7641372,"cityLevel":"市","townLevel":"區"},"849":{"city":"高雄","town":"那瑪夏","lat":23.277092,"lng":120.720243,"cityLevel":"市","townLevel":"區"},"851":{"city":"高雄","town":"茂林","lat":22.886187,"lng":120.663266,"cityLevel":"市","townLevel":"區"},"852":{"city":"高雄","town":"茄萣","lat":22.9065231,"lng":120.1824729,"cityLevel":"市","townLevel":"區"},"880":{"city":"澎湖","town":"馬公","lat":23.566159,"lng":119.578692,"cityLevel":"縣","townLevel":"市"},"881":{"city":"澎湖","town":"西嶼","lat":23.601088,"lng":119.5069847,"cityLevel":"縣","townLevel":"鄉"},"882":{"city":"澎湖","town":"望安","lat":23.3576577,"lng":119.500894,"cityLevel":"縣","townLevel":"鄉"},"883":{"city":"澎湖","town":"七美","lat":23.2067107,"lng":119.4244825,"cityLevel":"縣","townLevel":"鄉"},"884":{"city":"澎湖","town":"白沙","lat":23.666538,"lng":119.598639,"cityLevel":"縣","townLevel":"鄉"},"885":{"city":"澎湖","town":"湖西","lat":23.584072,"lng":119.6528318,"cityLevel":"縣","townLevel":"鄉"},"890":{"city":"金門","town":"金沙","lat":24.488898,"lng":118.413132,"cityLevel":"縣","townLevel":"鎮"},"891":{"city":"金門","town":"金湖","lat":24.4414641,"lng":118.4171018,"cityLevel":"縣","townLevel":"鎮"},"892":{"city":"金門","town":"金寧","lat":24.450966,"lng":118.334887,"cityLevel":"縣","townLevel":"鄉"},"893":{"city":"金門","town":"金城","lat":24.432824,"lng":118.320697,"cityLevel":"縣","townLevel":"鎮"},"894":{"city":"金門","town":"烈嶼","lat":24.4295409,"lng":118.2445892,"cityLevel":"縣","townLevel":"鄉"},"896":{"city":"金門","town":"烏坵","lat":24.9887062,"lng":119.4531826,"cityLevel":"縣","townLevel":"鄉"},"900":{"city":"屏東","town":"屏東","lat":22.662498,"lng":120.4914295,"cityLevel":"縣","townLevel":"市"},"901":{"city":"屏東","town":"三地門","lat":22.7162015,"lng":120.6541301,"cityLevel":"縣","townLevel":"鄉"},"902":{"city":"屏東","town":"霧臺","lat":22.7490518,"lng":120.7282593,"cityLevel":"縣","townLevel":"鄉"},"903":{"city":"屏東","town":"瑪家","lat":22.7086763,"lng":120.6494041,"cityLevel":"縣","townLevel":"鄉"},"904":{"city":"屏東","town":"九如","lat":22.740429,"lng":120.4903298,"cityLevel":"縣","townLevel":"鄉"},"905":{"city":"屏東","town":"里港","lat":22.7792625,"lng":120.4944974,"cityLevel":"縣","townLevel":"鄉"},"906":{"city":"屏東","town":"高樹","lat":22.8267314,"lng":120.600241,"cityLevel":"縣","townLevel":"鄉"},"907":{"city":"屏東","town":"鹽埔","lat":22.7543743,"lng":120.5727019,"cityLevel":"縣","townLevel":"鄉"},"908":{"city":"屏東","town":"長治","lat":22.676538,"lng":120.5272963,"cityLevel":"縣","townLevel":"鄉"},"909":{"city":"屏東","town":"麟洛","lat":22.6506473,"lng":120.5272056,"cityLevel":"縣","townLevel":"鄉"},"911":{"city":"屏東","town":"竹田","lat":22.584724,"lng":120.543981,"cityLevel":"縣","townLevel":"鄉"},"912":{"city":"屏東","town":"內埔","lat":22.6120045,"lng":120.5668293,"cityLevel":"縣","townLevel":"鄉"},"913":{"city":"屏東","town":"萬丹","lat":22.5894894,"lng":120.4850182,"cityLevel":"縣","townLevel":"鄉"},"920":{"city":"屏東","town":"潮州","lat":22.549845,"lng":120.5429633,"cityLevel":"縣","townLevel":"鎮"},"921":{"city":"屏東","town":"泰武","lat":22.5919045,"lng":120.6319498,"cityLevel":"縣","townLevel":"鄉"},"922":{"city":"屏東","town":"來義","lat":22.5261844,"lng":120.6315782,"cityLevel":"縣","townLevel":"鄉"},"923":{"city":"屏東","town":"萬巒","lat":22.5726416,"lng":120.567841,"cityLevel":"縣","townLevel":"鄉"},"924":{"city":"屏東","town":"崁頂","lat":22.5147343,"lng":120.5140493,"cityLevel":"縣","townLevel":"鄉"},"925":{"city":"屏東","town":"新埤","lat":22.4701881,"lng":120.5498736,"cityLevel":"縣","townLevel":"鄉"},"926":{"city":"屏東","town":"南州","lat":22.490404,"lng":120.509879,"cityLevel":"縣","townLevel":"鄉"},"927":{"city":"屏東","town":"林邊","lat":22.431504,"lng":120.5097562,"cityLevel":"縣","townLevel":"鄉"},"928":{"city":"屏東","town":"東港","lat":22.4666854,"lng":120.454361,"cityLevel":"縣","townLevel":"鎮"},"929":{"city":"屏東","town":"琉球","lat":22.348635,"lng":120.3827309,"cityLevel":"縣","townLevel":"鄉"},"931":{"city":"屏東","town":"佳冬","lat":22.419209,"lng":120.5524196,"cityLevel":"縣","townLevel":"鄉"},"932":{"city":"屏東","town":"新園","lat":22.5438351,"lng":120.4614914,"cityLevel":"縣","townLevel":"鄉"},"940":{"city":"屏東","town":"枋寮","lat":22.3655097,"lng":120.5934906,"cityLevel":"縣","townLevel":"鄉"},"941":{"city":"屏東","town":"枋山","lat":22.2639616,"lng":120.6524803,"cityLevel":"縣","townLevel":"鄉"},"942":{"city":"屏東","town":"春日","lat":22.3710005,"lng":120.6290908,"cityLevel":"縣","townLevel":"鄉"},"943":{"city":"屏東","town":"獅子","lat":22.201775,"lng":120.705438,"cityLevel":"縣","townLevel":"鄉"},"944":{"city":"屏東","town":"車城","lat":22.0739409,"lng":120.714276,"cityLevel":"縣","townLevel":"鄉"},"945":{"city":"屏東","town":"牡丹","lat":22.1261502,"lng":120.7743059,"cityLevel":"縣","townLevel":"鄉"},"946":{"city":"屏東","town":"恆春","lat":22.0037401,"lng":120.7472461,"cityLevel":"縣","townLevel":"鎮"},"947":{"city":"屏東","town":"滿州","lat":22.020813,"lng":120.838632,"cityLevel":"縣","townLevel":"鄉"},"950":{"city":"臺東","town":"臺東","lat":22.7548208,"lng":121.1465131,"cityLevel":"縣","townLevel":"市"},"951":{"city":"臺東","town":"綠島","lat":22.6658421,"lng":121.4705314,"cityLevel":"縣","townLevel":"鄉"},"952":{"city":"臺東","town":"蘭嶼","lat":22.0244984,"lng":121.5560627,"cityLevel":"縣","townLevel":"鄉"},"953":{"city":"臺東","town":"延平","lat":22.9025753,"lng":121.0860671,"cityLevel":"縣","townLevel":"鄉"},"954":{"city":"臺東","town":"卑南","lat":22.7827393,"lng":121.0870294,"cityLevel":"縣","townLevel":"鄉"},"955":{"city":"臺東","town":"鹿野","lat":22.9393083,"lng":121.1519859,"cityLevel":"縣","townLevel":"鄉"},"956":{"city":"臺東","town":"關山","lat":23.0474453,"lng":121.1630554,"cityLevel":"縣","townLevel":"鎮"},"957":{"city":"臺東","town":"海端","lat":23.102057,"lng":121.176541,"cityLevel":"縣","townLevel":"鄉"},"958":{"city":"臺東","town":"池上","lat":23.1223101,"lng":121.2151887,"cityLevel":"縣","townLevel":"鄉"},"959":{"city":"臺東","town":"東河","lat":22.9689404,"lng":121.3028937,"cityLevel":"縣","townLevel":"鄉"},"961":{"city":"臺東","town":"成功","lat":23.1050697,"lng":121.3808747,"cityLevel":"縣","townLevel":"鎮"},"962":{"city":"臺東","town":"長濱","lat":23.3149961,"lng":121.4514207,"cityLevel":"縣","townLevel":"鄉"},"963":{"city":"臺東","town":"太麻里","lat":22.615548,"lng":121.007607,"cityLevel":"縣","townLevel":"鄉"},"964":{"city":"臺東","town":"金峰","lat":22.5946397,"lng":120.9607096,"cityLevel":"縣","townLevel":"鄉"},"965":{"city":"臺東","town":"大武","lat":22.340518,"lng":120.890073,"cityLevel":"縣","townLevel":"鄉"},"966":{"city":"臺東","town":"達仁","lat":22.296818,"lng":120.882973,"cityLevel":"縣","townLevel":"鄉"},"970":{"city":"花蓮","town":"花蓮","lat":23.9820651,"lng":121.6067705,"cityLevel":"縣","townLevel":"市"},"971":{"city":"花蓮","town":"新城","lat":24.0392994,"lng":121.6041173,"cityLevel":"縣","townLevel":"鄉"},"972":{"city":"花蓮","town":"秀林","lat":24.1185835,"lng":121.6248326,"cityLevel":"縣","townLevel":"鄉"},"973":{"city":"花蓮","town":"吉安","lat":23.9729455,"lng":121.5636438,"cityLevel":"縣","townLevel":"鄉"},"974":{"city":"花蓮","town":"壽豐","lat":23.8703424,"lng":121.5088259,"cityLevel":"縣","townLevel":"鄉"},"975":{"city":"花蓮","town":"鳳林","lat":23.7447637,"lng":121.4515822,"cityLevel":"縣","townLevel":"鎮"},"976":{"city":"花蓮","town":"光復","lat":23.669342,"lng":121.4233065,"cityLevel":"縣","townLevel":"鄉"},"977":{"city":"花蓮","town":"豐濱","lat":23.6012024,"lng":121.5211488,"cityLevel":"縣","townLevel":"鄉"},"978":{"city":"花蓮","town":"瑞穗","lat":23.4964553,"lng":121.3757788,"cityLevel":"縣","townLevel":"鄉"},"979":{"city":"花蓮","town":"萬榮","lat":23.714875,"lng":121.4109617,"cityLevel":"縣","townLevel":"鄉"},"981":{"city":"花蓮","town":"玉里","lat":23.335527,"lng":121.315197,"cityLevel":"縣","townLevel":"鎮"},"982":{"city":"花蓮","town":"卓溪","lat":23.346478,"lng":121.303451,"cityLevel":"縣","townLevel":"鄉"},"983":{"city":"花蓮","town":"富里","lat":23.1794845,"lng":121.250233,"cityLevel":"縣","townLevel":"鄉"}} \ No newline at end of file diff --git a/assets/location_names.csv b/assets/location_names.csv new file mode 100644 index 000000000..7679b00aa --- /dev/null +++ b/assets/location_names.csv @@ -0,0 +1,385 @@ +key,zh-Hant,en,ja,ko,ru,vi,zh-Hans +連江,連江,Lienchiang,,,,, +宜蘭,宜蘭,Yilan,,,,, +彰化,彰化,Changhua,,,,, +南投,南投,Nantou,,,,, +雲林,雲林,Yunlin,,,,, +屏東,屏東,Pingtung,,,,, +基隆,基隆,Keelung,,,,, +臺北,臺北,Taipei,,,,, +新北,新北,New Taipei,,,,, +臺南,臺南,Tainan,,,,, +桃園,桃園,Taoyuan,,,,, +嘉義,嘉義,Chiayi,,,,, +嘉義,嘉義,Chiayi,,,,, +金門,金門,Kinmen,,,,, +高雄,高雄,Kaohsiung,,,,, +臺東,臺東,Taitung,,,,, +花蓮,花蓮,Hualien,,,,, +澎湖,澎湖,Penghu,,,,, +新竹,新竹,Hsinchu,,,,, +臺中,臺中,Taichung,,,,, +苗栗,苗栗,Miaoli,,,,, +新竹,新竹,Hsinchu,,,,, +成功,成功,Chenggong,,,,, +佳冬,佳冬,Jiadong,,,,, +麥寮,麥寮,Mailiao,,,,, +綠島,綠島,Lüdao,,,,, +蘭嶼,蘭嶼,Lanyu,,,,, +田中,田中,Tianzhong,,,,, +社頭,社頭,Shetou,,,,, +竹田,竹田,Zhutian,,,,, +萬丹,萬丹,Wandan,,,,, +三灣,三灣,Sanwan,,,,, +峨眉,峨眉,Emei,,,,, +南庄,南庄,Nanzhuang,,,,, +太保,太保,Taibao,,,,, +中埔,中埔,Zhongpu,,,,, +番路,番路,Fanlu,,,,, +水上,水上,Shuishang,,,,, +員林,員林,Yuanlin,,,,, +小港,小港,Xiaogang,,,,, +蘇澳,蘇澳,Su'ao,,,,, +五結,五結,Wujie,,,,, +宜蘭,宜蘭,Yilan,,,,, +壯圍,壯圍,Zhuangwei,,,,, +南竿,南竿,Nangan,,,,, +莒光,莒光,Juguang,,,,, +烏坵,烏坵,Wuqiu,,,,, +羅東,羅東,Luodong,,,,, +員山,員山,Yuanshan,,,,, +冬山,冬山,Dongshan,,,,, +三星,三星,Sanxing,,,,, +大同,大同,Datong,,,,, +竹東,竹東,Zhudong,,,,, +新埔,新埔,Xinpu,,,,, +關西,關西,Guanxi,,,,, +湖口,湖口,Hukou,,,,, +芎林,芎林,Qionglin,,,,, +橫山,橫山,Hengshan,,,,, +北埔,北埔,Beipu,,,,, +五峰,五峰,Wufeng,,,,, +龍井,龍井,Longjing,,,,, +大雅,大雅,Daya,,,,, +沙鹿,沙鹿,Shalu,,,,, +梧棲,梧棲,Wuqi,,,,, +湖西,湖西,Huxi,,,,, +金峰,金峰,Jinfeng,,,,, +太麻里,太麻里,Taimali,,,,, +苗栗,苗栗,Miaoli,,,,, +卓蘭,卓蘭,Zhuolan,,,,, +大湖,大湖,Dahu,,,,, +公館,公館,Gongguan,,,,, +銅鑼,銅鑼,Tongluo,,,,, +頭屋,頭屋,Touwu,,,,, +三義,三義,Sanyi,,,,, +西湖,西湖,Xihu,,,,, +造橋,造橋,Zaoqiao,,,,, +獅潭,獅潭,Shitan,,,,, +彰化,彰化,Changhua,,,,, +和美,和美,Hemei,,,,, +線西,線西,Xianxi,,,,, +伸港,伸港,Shengang,,,,, +秀水,秀水,Xiushui,,,,, +花壇,花壇,Huatan,,,,, +芬園,芬園,Fenyuan,,,,, +溪湖,溪湖,Xihu,,,,, +東石,東石,Dongshi,,,,, +大村,大村,Dacun,,,,, +埔鹽,埔鹽,Puyan,,,,, +埔心,埔心,Puxin,,,,, +永靖,永靖,Yongjing,,,,, +二水,二水,Ershui,,,,, +二林,二林,Erlin,,,,, +埤頭,埤頭,Pitou,,,,, +芳苑,芳苑,Fangyuan,,,,, +大城,大城,Dacheng,,,,, +竹塘,竹塘,Zhutang,,,,, +溪州,溪州,Xizhou,,,,, +南投,南投,Nantou,,,,, +埔里,埔里,Puli,,,,, +草屯,草屯,Caotun,,,,, +竹山,竹山,Zhushan,,,,, +集集,集集,Jiji,,,,, +名間,名間,Mingjian,,,,, +鹿谷,鹿谷,Lugu,,,,, +中寮,中寮,Zhongliao,,,,, +魚池,魚池,Yuchi,,,,, +國姓,國姓,Guoxing,,,,, +水里,水里,Shuili,,,,, +信義,信義,Xinyi,,,,, +仁愛,仁愛,Ren'ai,,,,, +斗六,斗六,Douliu,,,,, +斗南,斗南,Dounan,,,,, +虎尾,虎尾,Huwei,,,,, +西螺,西螺,Xiluo,,,,, +土庫,土庫,Tuku,,,,, +北港,北港,Beigang,,,,, +古坑,古坑,Gukeng,,,,, +大埤,大埤,Dapi,,,,, +莿桐,莿桐,Citong,,,,, +林內,林內,Linnei,,,,, +二崙,二崙,Erlun,,,,, +崙背,崙背,Lunbei,,,,, +東勢,東勢,Dongshi,,,,, +褒忠,褒忠,Baozhong,,,,, +元長,元長,Yuanchang,,,,, +水林,水林,Shuilin,,,,, +朴子,朴子,Puzi,,,,, +大林,大林,Dalin,,,,, +民雄,民雄,Minxiong,,,,, +溪口,溪口,Xikou,,,,, +新港,新港,Xingang,,,,, +六腳,六腳,Liujiao,,,,, +義竹,義竹,Yizhu,,,,, +鹿草,鹿草,Lucao,,,,, +竹崎,竹崎,Zhuqi,,,,, +梅山,梅山,Meishan,,,,, +大埔,大埔,Dapu,,,,, +阿里山,阿里山,Alishan,,,,, +屏東,屏東,Pingtung,,,,, +潮州,潮州,Chaozhou,,,,, +長治,長治,Changzhi,,,,, +麟洛,麟洛,Linluo,,,,, +九如,九如,Jiuru,,,,, +里港,里港,Ligang,,,,, +鹽埔,鹽埔,Yanpu,,,,, +高樹,高樹,Gaoshu,,,,, +萬巒,萬巒,Wanluan,,,,, +內埔,內埔,Neipu,,,,, +新埤,新埤,Xinpi,,,,, +崁頂,崁頂,Kanding,,,,, +南州,南州,Nanzhou,,,,, +琉球,琉球,Liuqiu,,,,, +三地門,三地門,Sandimen,,,,, +霧臺,霧臺,Wutai,,,,, +瑪家,瑪家,Majia,,,,, +泰武,泰武,Taiwu,,,,, +來義,來義,Laiyi,,,,, +春日,春日,Chunri,,,,, +獅子,獅子,Shizi,,,,, +鹿野,鹿野,Luye,,,,, +池上,池上,Chishang,,,,, +延平,延平,Yanping,,,,, +光復,光復,Guangfu,,,,, +瑞穗,瑞穗,Ruisui,,,,, +富里,富里,Fuli,,,,, +馬公,馬公,Magong,,,,, +白沙,白沙,Baisha,,,,, +西嶼,西嶼,Xiyu,,,,, +望安,望安,Wang'an,,,,, +七美,七美,Qimei,,,,, +暖暖,暖暖,Nuannuan,,,,, +大安,大安,Da'an,,,,, +文山,文山,Wenshan,,,,, +鹽埕,鹽埕,Yancheng,,,,, +新興,新興,Xinxing,,,,, +前金,前金,Qianjin,,,,, +前鎮,前鎮,Qianzhen,,,,, +頭城,頭城,Toucheng,,,,, +南澳,南澳,Nan'ao,,,,, +竹北,竹北,Zhubei,,,,, +新豐,新豐,Xinfeng,,,,, +苑裡,苑裡,Yuanli,,,,, +通霄,通霄,Tongxiao,,,,, +竹南,竹南,Zhunan,,,,, +後龍,後龍,Houlong,,,,, +鹿港,鹿港,Lukang,,,,, +福興,福興,Fuxing,,,,, +臺西,臺西,Taixi,,,,, +四湖,四湖,Sihu,,,,, +口湖,口湖,Kouhu,,,,, +布袋,布袋,Budai,,,,, +東港,東港,Donggang,,,,, +枋寮,枋寮,Fangliao,,,,, +新園,新園,Xinyuan,,,,, +林邊,林邊,Linbian,,,,, +車城,車城,Checheng,,,,, +滿州,滿州,Manzhou,,,,, +枋山,枋山,Fangshan,,,,, +牡丹,牡丹,Mudan,,,,, +臺東,臺東,Taitung,,,,, +卑南,卑南,Beinan,,,,, +東河,東河,Donghe,,,,, +吉安,吉安,Ji'an,,,,, +壽豐,壽豐,Shoufeng,,,,, +秀林,秀林,Xiulin,,,,, +楠梓,楠梓,Nanzi,,,,, +鳳山,鳳山,Fengshan,,,,, +大寮,大寮,Daliao,,,,, +大樹,大樹,Dashu,,,,, +大社,大社,Dashe,,,,, +仁武,仁武,Renwu,,,,, +鳥松,鳥松,Niaosong,,,,, +岡山,岡山,Gangshan,,,,, +橋頭,橋頭,Qiaotou,,,,, +燕巢,燕巢,Yanchao,,,,, +田寮,田寮,Tianliao,,,,, +阿蓮,阿蓮,Alian,,,,, +路竹,路竹,Luzhu,,,,, +湖內,湖內,Hunei,,,,, +旗山,旗山,Qishan,,,,, +美濃,美濃,Meinong,,,,, +六龜,六龜,Liugui,,,,, +甲仙,甲仙,Jiaxian,,,,, +杉林,杉林,Shanlin,,,,, +內門,內門,Neimen,,,,, +茂林,茂林,Maolin,,,,, +桃源,桃源,Taoyuan,,,,, +那瑪夏,那瑪夏,Namaxia,,,,, +永和,永和,Yonghe,,,,, +新店,新店,Xindian,,,,, +土城,土城,Tucheng,,,,, +蘆洲,蘆洲,Luzhou,,,,, +五股,五股,Wugu,,,,, +坪林,坪林,Pinglin,,,,, +平溪,平溪,Pingxi,,,,, +烏來,烏來,Wulai,,,,, +豐原,豐原,Fengyuan,,,,, +東勢,東勢,Dongshi,,,,, +后里,后里,Houli,,,,, +神岡,神岡,Shengang,,,,, +新社,新社,Xinshe,,,,, +石岡,石岡,Shigang,,,,, +外埔,外埔,Waipu,,,,, +大肚,大肚,Dadu,,,,, +新營,新營,Xinying,,,,, +鹽水,鹽水,Yanshui,,,,, +白河,白河,Baihe,,,,, +後壁,後壁,Houbi,,,,, +麻豆,麻豆,Madou,,,,, +下營,下營,Xiaying,,,,, +六甲,六甲,Liujia,,,,, +官田,官田,Guantian,,,,, +大內,大內,Danei,,,,, +佳里,佳里,Jiali,,,,, +學甲,學甲,Xuejia,,,,, +西港,西港,Xigang,,,,, +新化,新化,Xinhua,,,,, +新市,新市,Xinshi,,,,, +安定,安定,Anding,,,,, +玉井,玉井,Yujing,,,,, +楠西,楠西,Nanxi,,,,, +南化,南化,Nanhua,,,,, +左鎮,左鎮,Zuozhen,,,,, +仁德,仁德,Rende,,,,, +歸仁,歸仁,Guiren,,,,, +關廟,關廟,Guanmiao,,,,, +龍崎,龍崎,Longqi,,,,, +永康,永康,Yongkang,,,,, +北,北,North,,,,, +林園,林園,Linyuan,,,,, +茄萣,茄萣,Qieding,,,,, +永安,永安,Yong'an,,,,, +彌陀,彌陀,Mituo,,,,, +梓官,梓官,Ziguan,,,,, +淡水,淡水,Tamsui,,,,, +瑞芳,瑞芳,Ruifang,,,,, +林口,林口,Linkou,,,,, +三芝,三芝,Sanzhi,,,,, +八里,八里,Bali,,,,, +大甲,大甲,Dajia,,,,, +北門,北門,Beimen,,,,, +安南,安南,Annan,,,,, +蘆竹,蘆竹,Luzhu,,,,, +龜山,龜山,Guishan,,,,, +復興,復興,Fuxing,,,,, +東,東,East,,,,, +西,西,West,,,,, +達仁,達仁,Daren,,,,, +大武,大武,Dawu,,,,, +關山,關山,Guanshan,,,,, +海端,海端,Haiduan,,,,, +香山,香山,Xiangshan,,,,, +礁溪,礁溪,Jiaoxi,,,,, +玉里,玉里,Yuli,,,,, +卓溪,卓溪,Zhuoxi,,,,, +頭份,頭份,Toufen,,,,, +清水,清水,Qingshui,,,,, +南,南,South,,,,, +安平,安平,Anping,,,,, +中西,中西,West Central,,,,, +大溪,大溪,Daxi,,,,, +八德,八德,Bade,,,,, +桃園,桃園,Taoyuan,,,,, +大園,大園,Dayuan,,,,, +楊梅,楊梅,Yangmei,,,,, +七堵,七堵,Qidu,,,,, +仁愛,仁愛,Ren'ai,,,,, +信義,信義,Xinyi,,,,, +中正,中正,Zhongzheng,,,,, +中山,中山,Zhongshan,,,,, +安樂,安樂,Anle,,,,, +三峽,三峽,Sanxia,,,,, +鶯歌,鶯歌,Yingge,,,,, +中和,中和,Zhonghe,,,,, +樹林,樹林,Shulin,,,,, +深坑,深坑,Shenkeng,,,,, +板橋,板橋,Banqiao,,,,, +石碇,石碇,Shiding,,,,, +新莊,新莊,Xinzhuang,,,,, +泰山,泰山,Taishan,,,,, +三重,三重,Sanchong,,,,, +雙溪,雙溪,Shuangxi,,,,, +貢寮,貢寮,Gongliao,,,,, +汐止,汐止,Xizhi,,,,, +萬里,萬里,Wanli,,,,, +金山,金山,Jinshan,,,,, +石門,石門,Shimen,,,,, +苓雅,苓雅,Lingya,,,,, +三民,三民,Sanmin,,,,, +新屋,新屋,Xinwu,,,,, +觀音,觀音,Guanyin,,,,, +北竿,北竿,Beigan,,,,, +東引,東引,Dongyin,,,,, +烈嶼,烈嶼,Lieyu,,,,, +旗津,旗津,Qijin,,,,, +長濱,長濱,Changbin,,,,, +豐濱,豐濱,Fengbin,,,,, +霧峰,霧峰,Wufeng,,,,, +大里,大里,Dali,,,,, +烏日,烏日,Wuri,,,,, +中,中,Central,,,,, +南屯,南屯,Nantun,,,,, +西屯,西屯,Xitun,,,,, +北屯,北屯,Beitun,,,,, +潭子,潭子,Tanzi,,,,, +萬華,萬華,Wanhua,,,,, +松山,松山,Songshan,,,,, +大同,大同,Datong,,,,, +士林,士林,Shilin,,,,, +北投,北投,Beitou,,,,, +花蓮,花蓮,Hualien,,,,, +新城,新城,Xincheng,,,,, +善化,善化,Shanhua,,,,, +山上,山上,Shanshang,,,,, +北斗,北斗,Beidou,,,,, +田尾,田尾,Tianwei,,,,, +金沙,金沙,Jinsha,,,,, +金湖,金湖,Jinhu,,,,, +柳營,柳營,Liuying,,,,, +東山,東山,Dongshan,,,,, +七股,七股,Qigu,,,,, +將軍,將軍,Jiangjun,,,,, +鼓山,鼓山,Gushan,,,,, +左營,左營,Zuoying,,,,, +中壢,中壢,Zhongli,,,,, +寶山,寶山,Baoshan,,,,, +恆春,恆春,Hengchun,,,,, +太平,太平,Taiping,,,,, +鳳林,鳳林,Fenglin,,,,, +萬榮,萬榮,Wanrong,,,,, +龍潭,龍潭,Longtan,,,,, +平鎮,平鎮,Pingzhen,,,,, +南港,南港,Nangang,,,,, +內湖,內湖,Neihu,,,,, +金寧,金寧,Jinning,,,,, +金城,金城,Jincheng,,,,, +尖石,尖石,Jianshi,,,,, +泰安,泰安,Tai'an,,,,, +和平,和平,Heping,,,,, +縣,縣,County,,,,, +鄉,鄉,Township,,,,, +鎮,鎮,Town,,,,, +市,市,City,,,,, +區,區,District,,,,, \ No newline at end of file diff --git a/assets/translations/en.po b/assets/translations/en.po index 0e49c6550..71c28a3bf 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-11 02:40\n" +"Language-Team: English\n" +"Language: en_US\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: en\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: English\n" -"Language: en_US\n" -"PO-Revision-Date: 2025-08-11 02:40\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -763,7 +763,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "Out of service area. Available only in Taiwan" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "Not Set" @@ -1461,6 +1461,22 @@ msgstr "Cloudy with heavy thunderstorm" msgid "陰大雷雹" msgstr "Heavy thunder and hail" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "{town} {townLevel}, {city} {cityLevel}" + +#: lib/api/model/location/location.dart:93 +msgid "{city}{town}" +msgstr "{town}, {city}" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "{city} {cityLevel}" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "{town} {townLevel}" + #~ msgid "避難資訊" #~ msgstr "Evacuation information" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index f412a25d9..7beafc135 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-01 03:50\n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Japanese\n" -"Language: ja_JP\n" -"PO-Revision-Date: 2025-08-01 03:50\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -755,7 +755,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "台湾以外ではご利用いただけません" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "未設定" @@ -1445,6 +1445,22 @@ msgstr "曇りのち雨、大雷あり" msgid "陰大雷雹" msgstr "曇りのち大雹、大雷あり" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "" + #~ msgid "避難資訊" #~ msgstr "避難情報" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 405d0557a..3823e6b45 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-02 16:35\n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Korean\n" -"Language: ko_KR\n" -"PO-Revision-Date: 2025-08-02 16:35\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -746,7 +746,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "서비스 지역 외에서는 사용할 수 없으며, 대만에서만 이용 가능합니다" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "설정되지 않음" @@ -1439,6 +1439,22 @@ msgstr "흐림・강한 뇌우" msgid "陰大雷雹" msgstr "흐림・강한 천둥/우박" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "" + #~ msgid "避難資訊" #~ msgstr "피난 정보" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 4e045d5c6..aa638b9a0 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -1,16 +1,18 @@ msgid "" msgstr "" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-07-23 03:45\n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 " +"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 " +"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Russian\n" -"Language: ru_RU\n" -"PO-Revision-Date: 2025-07-23 03:45\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -708,7 +710,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "" @@ -1367,3 +1369,19 @@ msgstr "" #: lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "" + +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "" diff --git a/assets/translations/strings.pot b/assets/translations/strings.pot index bd5a7f79b..8c9ae0388 100644 --- a/assets/translations/strings.pot +++ b/assets/translations/strings.pot @@ -670,7 +670,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:21 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "" @@ -1322,4 +1322,20 @@ msgstr "" #: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" +msgstr "" + +#: ./lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: ./lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: ./lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: ./lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" msgstr "" \ No newline at end of file diff --git a/assets/translations/vi.po b/assets/translations/vi.po index d148a2e48..04c7ad25b 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-07-23 03:45\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: vi\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Vietnamese\n" -"Language: vi_VN\n" -"PO-Revision-Date: 2025-07-23 03:45\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -740,7 +740,7 @@ msgstr "" "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài " "Loan." -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "Chưa đặt" @@ -1431,6 +1431,22 @@ msgstr "" msgid "陰大雷雹" msgstr "" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "" + #~ msgid "避難資訊" #~ msgstr "Thông tin di tản" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index babab2795..fa38593e7 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-11 02:40\n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /main/assets/translations/strings.pot\n" "X-Crowdin-File-ID: 20\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Chinese Simplified\n" -"Language: zh_CN\n" -"PO-Revision-Date: 2025-08-11 02:40\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -751,7 +751,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "服务区域外,仅在台湾各地可用" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "尚未设置" @@ -1427,6 +1427,22 @@ msgstr "阴天有强雷阵雨" msgid "陰大雷雹" msgstr "阴天有强雷冰雹" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "" + #~ msgid "避難資訊" #~ msgstr "避难信息" diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index 700fd3fbb..15d3e8b55 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -1,16 +1,5 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-06-17 15:33\n" -"Language-Team: Chinese Traditional\n" -"Language: zh_TW\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Crowdin-Project: dpip\n" -"X-Crowdin-Project-ID: 696803\n" -"X-Crowdin-Language: zh-TW\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" #: lib/app/settings/location/page.dart:372 msgid "所在地" @@ -763,7 +752,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "服務區域外,僅在臺灣各地可用" -#: lib/app/home/_widgets/location_button.dart:21 +#: lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "尚未設定" @@ -1441,6 +1430,22 @@ msgstr "陰大雷雨" msgid "陰大雷雹" msgstr "陰大雷雹" +#: lib/api/model/location/location.dart:80 +msgid "{city}{cityLevel} {town}{townLevel}" +msgstr "{city}{cityLevel} {town}{townLevel}" + +#: lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "{city} {town}" + +#: lib/api/model/location/location.dart:102 +msgid "{city}{cityLevel}" +msgstr "{city}{cityLevel}" + +#: lib/api/model/location/location.dart:111 +msgid "{town}{townLevel}" +msgstr "{town}{townLevel}" + #~ msgid "避難資訊" #~ msgstr "避難資訊" diff --git a/assets/weather_station_names.csv b/assets/weather_station_names.csv new file mode 100644 index 000000000..2e5eaac0d --- /dev/null +++ b/assets/weather_station_names.csv @@ -0,0 +1,818 @@ +key,zh-Hant,en,ja,ko,ru,vi,zh-Hans +466850,五分山雷達站,Wufenshan,,,,, +466881,新北,New Taipei,,,,, +466900,淡水,Tamsui,,,,, +466910,鞍部,Anbu,,,,, +466920,臺北,Taipei,,,,, +466930,竹子湖,Zhuzihu,,,,, +466940,基隆,Keelung,,,,, +466950,彭佳嶼,Pengjiayu,,,,, +466990,花蓮,Hualien,,,,, +467050,新屋,Xinwu,,,,, +467080,宜蘭,Yilan,,,,, +467110,金門,Kinmen,,,,, +467270,田中,Tianzhong,,,,, +467280,後龍,Houlong,,,,, +467290,古坑,Gukeng,,,,, +467300,東吉島,Dongjidao,,,,, +467350,澎湖,Penghu,,,,, +467410,臺南,Tainan,,,,, +467420,永康,Yongkang,,,,, +467441,高雄,Kaohsiung,,,,, +467480,嘉義,Chiayi,,,,, +467490,臺中,Taichung,,,,, +467530,阿里山,Alishan,,,,, +467540,大武,Dawu,,,,, +467550,玉山,Yushan,,,,, +467571,新竹,Hsinchu,,,,, +467590,恆春,Hengchun,,,,, +467610,成功,Chenggong,,,,, +467620,蘭嶼,Lanyu,,,,, +467650,日月潭,Sun Moon Lake,,,,, +467660,臺東,Taitung,,,,, +467790,墾丁雷達站,Kenting,,,,, +467990,馬祖,Matsu,,,,, +12J990,口湖工作站,Kouhu Branch Station,,,,, +12Q970,東港工作站,Donggang Branch,,,,, +12Q980,恆春工作站,Hengchun Branch,,,,, +42HA10,萬大發電廠,Wanta Hydro,,,,, +72AI40,桃改樹林分場,Shulin Sub-station Of Taoyuan ARES,,,,, +72C440,桃園農改場,,,,,, +72D080,桃改五峰分場,Wufeng Sub-station Of Taoyuan ARES,,,,, +72D680,桃改新埔分場,Sinpu Sub-station Of Taoyuan ARES,,,,, +72G600,臺中農改場,Ta Tsun,,,,, +72HA00,中改埔里分場,Puli Sub-station Of Taichung ARES,,,,, +72K220,南改斗南分場,Dounan Sub-station Of Tainan ARES,,,,, +72M360,南改義竹分場,Yichu Sub-station Of Tainan ARES,,,,, +72M700,南改鹿草分場,Lucao Sub-station Of Tainan ARES,,,,, +72N100,臺南農改場,Tainan,,,,, +72N240,七股研究中心,Qigu Research Center,,,,, +72Q010,高雄農改場,Pingtung,,,,, +72S200,東改班鳩分場,Banjuou Sub-station Of Taitung ARES ,,,,, +72S590,東改賓朗果園,Binlung Orchard Sub-station Of Taitung ARES ,,,,, +72T250,花蓮農改場,Gi An,,,,, +72U480,花改蘭陽分場,Lanyang Sub-station Of Hualien ARES,,,,, +72V140,高改旗南分場,Chinan Sub-station Of Kaohsiung ARES,,,,, +82A750,茶改北部分場,North Branch Of TBRS,,,,, +82C160,茶改場,Tea And Beverage Research Station,,,,, +82H320,茶改中部分場,Middle Branch Of TRES,,,,, +82H840,茶改南部分場,South Branch Of TBRS,,,,, +82S580,茶改東部分場,East Branch Of TBRS,,,,, +A2C560,農工中心,,,,,, +A2K360,水試臺西試驗場,Taixi Experimental Fishing Ground,,,,, +A2K630,臺大雲林校區,Yunlin Branch Of NTU,,,,, +A2N290,臺南蘭花園區,Taiwan Orchid,,,,, +B2E890,畜試北區分所,North Branch Of TLRI,,,,, +B2N890,畜產試驗所,Hsin Hua,,,,, +B2Q810,畜試南區分所,South Branch Of TLRI,,,,, +B2U990,畜試東區分所,East Branch Of TLRI,,,,, +C2A540,四堵,Sihdu,,,,, +C2A560,福山,Fushan,,,,, +C2A650,火燒寮,Huoshaoliao,,,,, +C2A660,瑞芳,Rueifang,,,,, +C2A880,福隆,Fulong,,,,, +C2A920,富貴角,Fugueijiao,,,,, +C2C410,中央大學,Ncu,,,,, +C2D720,關西工作站,Guanxi Experiment Station,,,,, +C2D730,寶山農場,Baoshan Farm,,,,, +C2D740,屯原,Tunyuan,,,,, +C2E520,大湖,Dahu,,,,, +C2E540,龍溪,Longxi,,,,, +C2E880,三義,Sanyi,,,,, +C2E970,八甲,Bajia,,,,, +C2F000,大肚,Dadu,,,,, +C2F860,梨山,Lishan,,,,, +C2F930,大甲,Dajia,,,,, +C2F990,摩天嶺,Motianling,,,,, +C2F9A0,中竹林,Zhongzhulin,,,,, +C2FA00,烏石坑,Wushihkeng,,,,, +C2FB50,出雲,Chuyun,,,,, +C2FB60,頭櫃山,Touguishan,,,,, +C2G640,鹿港,Lukang,,,,, +C2G840,北斗,Beidou,,,,, +C2G870,芳苑,Fangyuan,,,,, +C2G980,田頭村,Toutian Village,,,,, +C2G9A0,畜試所彰化,Changhua Branch Of TLRI,,,,, +C2H950,中寮,Zhongliao,,,,, +C2H9D0,三隻寮,Sanziliao,,,,, +C2H9E0,國姓南港,Guoxing Nangang,,,,, +C2H9F0,柑林,Ganlin,,,,, +C2H9G0,百勝,Bosheng,,,,, +C2H9H0,苗改南投蜂場,Nantou Bee Farm Of Miaoli TARI,,,,, +C2H9J0,中台,Zhongtai,,,,, +C2H9L0,馬烈霸,Malieba,,,,, +C2H9M0,發祥,Faxiang,,,,, +C2H9N0,仁愛東眼,Renaidong,,,,, +C2H9P0,伊拿谷,Yinagu,,,,, +C2H9Q0,北東眼山,Beidongyanshan,,,,, +C2H9R0,卓社,Zhuoshe,,,,, +C2H9S0,龍南,Longnan,,,,, +C2H9T0,名間竹圍,Mingjianzhuwei,,,,, +C2H9U0,鳳鵬,Fengpeng,,,,, +C2H9W0,大坪頂農水,Dapingding Station,,,,, +C2I090,鳳凰,Fenghuang,,,,, +C2K240,草嶺,Caoling,,,,, +C2K610,草嶺石壁,Caolingshibi,,,,, +C2K620,馬光農場,Maguang Organic Agriculture Circular Park,,,,, +C2K630,荷苞,Hebao,,,,, +C2M410,馬頭山,Matoushan,,,,, +C2M620,瑞里,Ruili,,,,, +C2M910,嘉義大學,Chiayi University,,,,, +C2M920,朴子農改,Pozi DARES,,,,, +C2M930,石卓,Shizhuo,,,,, +C2M940,日野賀,Riyehe,,,,, +C2M950,太和,Taihe,,,,, +C2M960,外寮,Wailiao,,,,, +C2M970,碧湖,Bihu,,,,, +C2N160,西拉雅風管處,Siraya NSAH,,,,, +C2O810,曾文,Cengwen,,,,, +C2O930,玉井,Yujing,,,,, +C2O950,安南,Annan,,,,, +C2R170,屏東,Pingdong,,,,, +C2R970,屏科大,National Pingtung University,,,,, +C2V250,甲仙,Jiaxian,,,,, +C2V260,月眉,Yuemei,,,,, +C2V310,美濃,Meinong,,,,, +C2W030,金門農試所,Kimmann,,,,, +C2W230,畜試所澎湖,Penghu Field Area Of TLRI,,,,, +CAG100,王功漁港,Wanggong Fishing Port,,,,, +CAH030,茶改場竹圍站,TRES Chuwei Station,,,,, +CAJ050,海口故事園區,Haikou Story Camping Park,,,,, +CAL110,布袋國中,Budai Junior High School,,,,, +CAN130,水試所海水繁養殖中心,Mariculture Research Center,,,,, +CAN140,六官養殖協會,Liuguan Aquaculture,,,,, +CAQ030,崎峰國小,Cifong Elementary School,,,,, +E2H360,蓮華池,Lienhuchih,,,,, +E2HA20,林試畢祿溪站,Pilushi,,,,, +E2K600,四湖植物園,Sihu Botanical Garden,,,,, +E2P980,林試六龜中心,Lioukuei Research Center ,,,,, +E2P990,林試扇平站,Shanping,,,,, +E2S960,林試太麻里2,Taimalee2,,,,, +E2S980,林試太麻里1,Taimalee Research Center 1,,,,, +G2AI50,關渡,Guandu,,,,, +G2F820,農試所(霧峰),Taichung,,,,, +G2L020,農試嘉義分所,Chiayi Sub-station Of TARI,,,,, +G2M350,農試溪口農場,Xikou Farm Of TARI,,,,, +G2P820,農試鳳山分所,Fengshan Tropical Horticultural Of TARI,,,,, +K2E360,苗栗農改場,,,,,, +K2E710,苗改生物防治研究中心,Biological Control Branch Of Miaoli TARI,,,,, +K2F750,種苗改良場,Shin She,,,,, +U2H480,溪頭,Hsi Tou,,,,, +U2HA30,臺大和社,NTU Exfohoshe,,,,, +U2HA40,臺大內茅埔,NTU Exfoneimoupu,,,,, +U2HA50,臺大竹山,NTU Experimental Forest,,,,, +V2C250,八德合作社,Bade Cooperative,,,,, +V2C260,八德蔬果,Bade Fruit And Vegetable,,,,, +V2K610,大庄合作社,Dazhuang Cooperative,,,,, +V2K620,麥寮合作社,Mailiao Cooperative,,,,, +C0A520,山佳,Shanjia,,,,, +C0A530,坪林,Pinglin,,,,, +C0A550,泰平,Taiping,,,,, +C0A570,桶後,Tonghou,,,,, +C0A640,石碇,Shihding,,,,, +C0A770,科教館,Science Education Center ,,,,, +C0A860,大坪,Daping,,,,, +C0A870,五指山,Wujhihshan,,,,, +C0A890,雙溪,Shuangsi,,,,, +C0A931,三和,Sanhe,,,,, +C0A940,金山,Jinshan,,,,, +C0A950,鼻頭角,Bitoujiao,,,,, +C0A970,三貂角,Sandiaojiao,,,,, +C0A980,社子,Shezih,,,,, +C0A9C0,天母,Tianmu,,,,, +C0A9F0,內湖,Neihu,,,,, +C0AC40,大屯山,Datunshan,,,,, +C0AC60,三峽,Sanshia,,,,, +C0AC70,信義,Xinyi,,,,, +C0AC80,文山,Wenshan,,,,, +C0ACA0,新莊,Xinzhuang,,,,, +C0AD10,八里,Bali,,,,, +C0AD30,蘆洲,Lujhou,,,,, +C0AD40,土城,Tucheng,,,,, +C0AD50,鶯歌,Yingge,,,,, +C0AG80,中和,Zhonghe,,,,, +C0AH00,汐止,Xizhi,,,,, +C0AH10,永和,Yonghe,,,,, +C0AH30,五分山,Wufengshan,,,,, +C0AH40,平等,Pingdeng,,,,, +C0AH50,林口,Linkou,,,,, +C0AH70,松山,Songshan,,,,, +C0AH80,深坑,Shenkeng,,,,, +C0AH90,福山植物園,Fushan Botanical Garden,,,,, +C0AI00,五股,Wugu,,,,, +C0AI10,屈尺,Quchi,,,,, +C0AI20,白沙灣,Baishawan,,,,, +C0AI30,三重,Sanchong,,,,, +C0AI40,石牌,Shipai,,,,, +C0AJ20,野柳,Yehliou,,,,, +C0AJ30,淡水觀海,Danshuei Guanhai,,,,, +C0AJ40,石門,Shimen,,,,, +C0AJ50,水湳洞,Shuinandong,,,,, +C0AJ60,六塊厝,Lioukuaitsuo,,,,, +C0AJ70,田寮,Tianliao,,,,, +C0AJ80,板橋,Banchiao,,,,, +C0AJ90,澳底,Aodi,,,,, +C0AK10,太平里,Taiping Vil.,,,,, +C0AK30,硬漢嶺,Yinghanling,,,,, +C0B010,七堵,Qidu,,,,, +C0B020,基隆嶼,Keelung Islet,,,,, +C0B040,大武崙,Dawulun,,,,, +C0B050,八斗子,Badouzi,,,,, +C0B060,暖暖,Nuannuan,,,,, +C0C460,復興,Fuxing,,,,, +C0C480,桃園,Taoyuan,,,,, +C0C490,八德,Bade,,,,, +C0C590,觀音,Guanyin,,,,, +C0C620,蘆竹,Luzhu,,,,, +C0C630,大溪,Dasi,,,,, +C0C650,平鎮,Pingjhen,,,,, +C0C660,楊梅,Yangmei,,,,, +C0C670,龍潭,Longtan,,,,, +C0C680,龜山,Guishan,,,,, +C0C700,中壢,Zhongli,,,,, +C0C710,大溪永福,Yongfu Daxi,,,,, +C0C720,竹圍,Jhuwei,,,,, +C0C730,中大臨海站,Jhongda Coastal Station,,,,, +C0C740,觀音工業區,Guanyin Industrial Area,,,,, +C0C750,新興坑尾,Sinsingkengwei,,,,, +C0C790,東眼山,Dongyanshan,,,,, +C0C800,四稜,Sileng,,,,, +C0D360,梅花,Meihua,,,,, +C0D430,峨眉,Emei,,,,, +C0D480,打鐵坑,Datiekeng,,,,, +C0D540,橫山,Hengshan,,,,, +C0D550,雪霸,Xueba,,,,, +C0D560,竹東,Zhudong,,,,, +C0D580,寶山,Baoshan,,,,, +C0D590,新豐,Sinfong,,,,, +C0D650,湖口,Hukou,,,,, +C0D660,新竹市東區,Dongqu Hsinshu City,,,,, +C0D670,海天一線,Haitianyisian,,,,, +C0D680,香山濕地,Siangshan Wetland,,,,, +C0D690,外湖,Waihu,,,,, +C0D700,關西,Guanxi,,,,, +C0D750,樂山林道6k,Leshan 6k,,,,, +C0D760,大坪苗圃,Daping Nurserygarden,,,,, +C0E420,竹南,Jhunan,,,,, +C0E430,南庄,Nanzhuang,,,,, +C0E550,明德,Mingde,,,,, +C0E570,白沙屯,Baishatun,,,,, +C0E590,通霄,Tongxiao,,,,, +C0E610,馬都安,Madu-An,,,,, +C0E730,頭份,Toufen,,,,, +C0E740,造橋,Zaoqiao,,,,, +C0E750,苗栗,Miaoli,,,,, +C0E780,銅鑼,Tongluo,,,,, +C0E791,卓蘭,Zhuolan,,,,, +C0E810,西湖,Xihu,,,,, +C0E820,獅潭,Shitan,,,,, +C0E830,苑裡,Yuanli,,,,, +C0E850,大河,Dahe,,,,, +C0E870,高鐵苗栗,THSR Miaoli,,,,, +C0E910,海埔,Haipu,,,,, +C0E920,通霄漁港,Tongsiao Fishing Harbor,,,,, +C0E930,龍鳳,Longfong,,,,, +C0E940,雪見,Shiuejian,,,,, +C0E950,松安,Songan,,,,, +C0E960,觀霧分站,Guanwu,,,,, +C0F0A0,雪山圈谷,Xueshanjuangu,,,,, +C0F0B0,石岡,Shigang,,,,, +C0F0C0,中坑,Zhongkeng,,,,, +C0F0D0,審馬陣,Shenmazhen,,,,, +C0F0E0,南湖圈谷,Nanhuquangu,,,,, +C0F850,東勢,Dongshi,,,,, +C0F970,大坑,Dakeng,,,,, +C0F9I0,神岡,Shengang,,,,, +C0F9K0,大安,Da-An,,,,, +C0F9L0,后里,Houli,,,,, +C0F9M0,豐原,Fengyuan,,,,, +C0F9N0,大里,Dali,,,,, +C0F9O0,潭子,Tanzi,,,,, +C0F9P0,清水,Qingshui,,,,, +C0F9Q0,外埔,Waipu,,,,, +C0F9R0,龍井,Longjing,,,,, +C0F9S0,烏日,Wuri,,,,, +C0F9T0,西屯,Xitun,,,,, +C0F9U0,南屯,Nantun,,,,, +C0F9V0,新社,Xinshe,,,,, +C0F9X0,大雅(中科園區),Daya,,,,, +C0F9Y0,桃山,Taoshan,,,,, +C0F9Z0,雪山東峰,Xueshandongfeng,,,,, +C0FA10,松柏,Songbai,,,,, +C0FA20,溫寮,Wunliao,,,,, +C0FA30,梧棲,Wuqi,,,,, +C0FA40,臺中電廠,Taichung?Power Plant,,,,, +C0FA50,霧峰,Wufeng,,,,, +C0FA60,鞍馬山工作站,Anmashan Office,,,,, +C0FA70,大雪山埡口,Dashiueshan Yakou,,,,, +C0FA80,小雪山天池,Shiaushiueshan Tianchr,,,,, +C0FA90,小雪山林道,Shiaushiueshan,,,,, +C0FB00,大雪山,Dashiueshan,,,,, +C0FB10,出雲山苗圃,Chuyunshan,,,,, +C0FB20,雪山橋,Shiueshanchiau,,,,, +C0FB30,八仙山苗圃,Bashianshan,,,,, +C0FB40,中橫21.6k,Chungheng 21.6k,,,,, +C0FB70,大甲溪埔,"Dajia, Xipu",,,,, +C0G620,芬園,Fenyuan,,,,, +C0G650,員林,Yuanlin,,,,, +C0G660,溪湖,Xihu,,,,, +C0G720,溪州,Xizhou,,,,, +C0G730,二林,Erlin,,,,, +C0G740,大城,Dacheng,,,,, +C0G770,福興,Fuxing,,,,, +C0G780,秀水,Xiushui,,,,, +C0G800,埔鹽,Puyan,,,,, +C0G810,埔心,Puxin,,,,, +C0G820,田尾,Tianwei,,,,, +C0G830,埤頭,Pitou,,,,, +C0G860,社頭,Shetou,,,,, +C0G880,二水,Ershui,,,,, +C0G890,伸港,Shenggang,,,,, +C0G900,線西,Xianxi,,,,, +C0G910,花壇,Huatan,,,,, +C0G920,永靖,Yongjing ,,,,, +C0G940,竹塘,Zhutang,,,,, +C0G950,防潮門,Fangchaomen,,,,, +C0G960,福寶,Fubao,,,,, +C0G970,三豐,Sanfong,,,,, +C0G9B0,和美,Hemei,,,,, +C0H890,埔里,Puli,,,,, +C0H960,草屯,Caotun,,,,, +C0H990,昆陽,Kunyang,,,,, +C0H9A0,神木村,Shenmu Village,,,,, +C0H9C0,合歡山,Hehuan Mountain,,,,, +C0I010,廬山,Lushan,,,,, +C0I080,信義,Xinyi,,,,, +C0I110,竹山,Zhushan,,,,, +C0I360,水里,Shuili,,,,, +C0I370,魚池,Yuchi,,,,, +C0I380,集集,Jiji,,,,, +C0I390,仁愛,Ren'Ai,,,,, +C0I410,名間,Mingjian,,,,, +C0I420,國姓,Guoxing,,,,, +C0I460,南投,Nantou,,,,, +C0I480,梅峰,Meifeng,,,,, +C0I490,萬大林道,Wandalindao,,,,, +C0I520,玉山風口,Yushanfengkou,,,,, +C0I530,小奇萊,Xiaoqilai,,,,, +C0I540,奇萊稜線,Qilailengxian,,,,, +C0K250,崙背,Lunbei,,,,, +C0K280,四湖,Sihu,,,,, +C0K291,宜梧,Yiwu,,,,, +C0K330,虎尾,Huwei,,,,, +C0K390,土庫,Tuku,,,,, +C0K400,斗六,Douliu,,,,, +C0K410,北港,Beigang,,,,, +C0K420,西螺,Xiluo,,,,, +C0K430,褒忠,Baozhong,,,,, +C0K440,二崙,Erlun,,,,, +C0K450,大埤,Dapi,,,,, +C0K460,斗南,Dounan,,,,, +C0K470,林內,Linnei,,,,, +C0K480,莿桐,Citong,,,,, +C0K500,元長,Yuanchang,,,,, +C0K510,水林,Shuilin,,,,, +C0K530,臺西,Taixi,,,,, +C0K550,蔦松,Niaosong,,,,, +C0K560,棋山,Qishan,,,,, +C0K580,高鐵雲林,THSR Yunlin,,,,, +C0K590,雲林東勢,"Dongshi, Yunlin County",,,,, +C0K600,箔子寮,Bozihliao,,,,, +C0M520,東後寮,Donghouliao,,,,, +C0M530,奮起湖,Fenqihu,,,,, +C0M640,中埔,Zhongpu,,,,, +C0M650,朴子,Puzi,,,,, +C0M660,溪口,Xikou,,,,, +C0M670,大林,Dalin,,,,, +C0M680,太保,Taibao,,,,, +C0M690,水上,Shuishang,,,,, +C0M700,竹崎,Zhuqi,,,,, +C0M710,東石,Dongshi,,,,, +C0M720,番路,Fanlu,,,,, +C0M730,嘉義市東區,Dongqu Chiayi City,,,,, +C0M740,六腳,Liujiao,,,,, +C0M750,布袋,Budai,,,,, +C0M760,民雄,Minxiong,,,,, +C0M770,嘉義梅山,Meishan Chiayi County,,,,, +C0M780,鹿草,Lucao,,,,, +C0M790,新港,Xingang,,,,, +C0M800,茶山,Chashan,,,,, +C0M810,里佳,Lijia,,,,, +C0M820,達邦,Dabang,,,,, +C0M850,表湖,Biaohu,,,,, +C0M860,新美,Shinmei,,,,, +C0M880,好美里,Haomeili,,,,, +C0N010,鯤鯓國小,Kunshen Elementary School,,,,, +C0N020,城西,Chengsi,,,,, +C0N030,四草,Sihtsao,,,,, +C0N040,蘆竹溝,Lujhugou,,,,, +C0N050,蚵寮,Eliao,,,,, +C0O830,北寮,Beiliao,,,,, +C0O840,王爺宮,Wangyegong,,,,, +C0O860,大內,Danei,,,,, +C0O900,善化,Shanhua,,,,, +C0O960,崎頂,Qiding,,,,, +C0O970,虎頭埤,Hutoupi,,,,, +C0O980,新市,Xinshi,,,,, +C0O990,媽廟,Mamiao,,,,, +C0R100,尾寮山,Weiliaoshan,,,,, +C0R130,阿禮,Ali,,,,, +C0R140,瑪家,Majia,,,,, +C0R150,三地門,Sandimen,,,,, +C0R160,鹽埔,Yanpuxinwei,,,,, +C0R190,赤山,Chishan,,,,, +C0R220,潮州,Chaojhou,,,,, +C0R240,來義,Laiyi,,,,, +C0R260,春日,Chunri,,,,, +C0R270,琉球嶼,Liouciouyu,,,,, +C0R280,檳榔,Binlang,,,,, +C0R320,車城,Checheng,,,,, +C0R341,牡丹,Mudan,,,,, +C0R350,貓鼻頭,Maobitou,,,,, +C0R440,大漢山,Dahanshan,,,,, +C0R470,高樹,Gaoshu,,,,, +C0R480,長治,Changzhi,,,,, +C0R490,九如,Jiuru,,,,, +C0R520,崁頂,Kanding,,,,, +C0R540,佳冬,Jiadong,,,,, +C0R550,新埤,Xinpi,,,,, +C0R560,新園,Xinyuan,,,,, +C0R570,麟洛,Linluo,,,,, +C0R580,南州,Nanzhou,,,,, +C0R590,里港,Ligang,,,,, +C0R600,舊泰武,Jiutaiwu,,,,, +C0R620,墾雷,Kenlei,,,,, +C0R640,東港,Donggang,,,,, +C0R650,竹田,Zhutian,,,,, +C0R660,枋寮,Fangliao,,,,, +C0R670,楓港,Fenggang,,,,, +C0R680,佳樂水,Jialeshui,,,,, +C0R690,墾丁,Kenting,,,,, +C0R700,枋山,Fangshan,,,,, +C0R710,龍磐,Longpan,,,,, +C0R720,旭海,Xuhai,,,,, +C0R730,大坪頂,Dapingding,,,,, +C0R741,獅子,Shizi,,,,, +C0R750,四林格山,Silingeshan,,,,, +C0R760,南仁湖,Nanrenhu,,,,, +C0R770,保力,Baoli,,,,, +C0R780,滿州,Manzhou,,,,, +C0R790,九棚,Jiupeng,,,,, +C0R800,丹路,Danlu,,,,, +C0R810,內獅,Neishi,,,,, +C0R820,白鷺,Bailu,,,,, +C0R830,高士,Gaoshi,,,,, +C0R840,牡丹池山,Mudanchisahn,,,,, +C0R850,林邊,Linbian,,,,, +C0R860,鼻頭,Bitou,,,,, +C0R870,興海,Singhai,,,,, +C0R880,後壁湖,Houbihu,,,,, +C0R890,山海,Shanhai,,,,, +C0R900,竹坑,Jhukeng,,,,, +C0R910,下寮,Sialiao,,,,, +C0R920,塭仔,Wunzai,,,,, +C0R930,萬丹,Wandan,,,,, +C0R940,加祿堂,Jialutang,,,,, +C0R950,萬隆國小,Wanlongguoxiao,,,,, +C0R960,內埔,Neipu,,,,, +C0S660,下馬,Xiama,,,,, +C0S690,太麻里,Taimali,,,,, +C0S700,知本,Jhihben,,,,, +C0S710,鹿野,Luye,,,,, +C0S730,綠島,Ludao,,,,, +C0S740,池上,Chihshang,,,,, +C0S750,向陽,Siangyang,,,,, +C0S760,紅石,Hongshih,,,,, +C0S770,大溪山,Dasishan,,,,, +C0S790,金崙,Jinlun,,,,, +C0S810,東河,Donghe,,,,, +C0S830,長濱,Changbin,,,,, +C0S840,南田,Nantian,,,,, +C0S890,關山,Guanshan,,,,, +C0S900,蘭嶼高中,Lanyu High School,,,,, +C0S910,蘭嶼燈塔,Lanyu Lighthouse,,,,, +C0S920,金峰嘉蘭,Jialan Jinfeng,,,,, +C0S930,延平,Yanping,,,,, +C0S940,石寧山,Shiningshan,,,,, +C0S950,七塊厝,Qikuaicuo,,,,, +C0S960,香蘭,Xianglan,,,,, +C0S970,加津林,Jiajinlin,,,,, +C0S980,勝林山,Shenglinshan,,,,, +C0S990,山豬窟,Shanzhuku,,,,, +C0SA00,歷坵,Liqiu,,,,, +C0SA10,檳榔四格山,Binlangsigeshan,,,,, +C0SA20,金崙山,Jinlunshan,,,,, +C0SA30,都歷,Duli,,,,, +C0SA40,瑞和,Ruihe,,,,, +C0SA60,知本(水試所),Zhiben (FRI),,,,, +C0SA80,土坂,Tuban,,,,, +C0SA90,達仁林場,Darenlinchang,,,,, +C0SB10,美和,Meihe,,,,, +C0SB20,富岡,Fugang,,,,, +C0SB30,新蘭,Dulan Fire Brigade,,,,, +C0SB40,興隆, Xinglong,,,,, +C0SB50,叭嗡嗡,Baweng,,,,, +C0SB60,白守蓮,Baishoulian,,,,, +C0SB70,小港漁港,Xiaogang Fishing Harbor,,,,, +C0SB80,長濱漁港,Changbin Fishing Harbor,,,,, +C0T790,大禹嶺,Dayuling,,,,, +C0T820,天祥,Tianxiang,,,,, +C0T870,鯉魚潭,Liyutan,,,,, +C0T900,西林,Xilin,,,,, +C0T960,光復,Guangfu,,,,, +C0T9A0,月眉山,Yuemeishan,,,,, +C0T9B0,水源,Shuiyuan,,,,, +C0T9D0,和中,Hezhong,,,,, +C0T9E0,大坑,Dakeng,,,,, +C0T9F0,水璉,Shuilian,,,,, +C0T9G0,鳳林山,Fenglinshan,,,,, +C0T9H0,加路蘭山,Jialulanshan,,,,, +C0T9I0,豐濱,Fengbin,,,,, +C0T9M0,靜浦,Jingpu,,,,, +C0T9N0,富里,Fuli,,,,, +C0TA10,花蓮漁港,Hualien Fishing Harbor,,,,, +C0TA20,加灣,Jiawan,,,,, +C0TA30,鹽寮,Yanliao,,,,, +C0TA40,秀林,Xiulin,,,,, +C0TA50,和仁,Heren,,,,, +C0TA80,立霧山,Liwushan,,,,, +C0U520,雙連埤,Shuanglianpi,,,,, +C0U600,礁溪,Chiaoshi,,,,, +C0U650,玉蘭,Yulan,,,,, +C0U710,太平山,Taipingshan,,,,, +C0U720,南山,Nanshan,,,,, +C0U750,龜山島,Gueishandao,,,,, +C0U760,東澳,Dong-Ao,,,,, +C0U770,南澳,Nanao,,,,, +C0U780,五結,Wujie,,,,, +C0U860,頭城,Toucheng,,,,, +C0U870,大礁溪,Dajiaoxi,,,,, +C0U880,北關,Beiguan,,,,, +C0U890,三星,Sanxing,,,,, +C0U900,內城,Neicheng,,,,, +C0U910,冬山,Dongshan,,,,, +C0U940,羅東,Luodong,,,,, +C0U950,鶯子嶺,Yingziling,,,,, +C0U960,翠峰湖,Cuifenghu,,,,, +C0U970,大福,Dafu,,,,, +C0U980,坪林石牌,Shipai Pinglin,,,,, +C0U990,員山,Yuanshan,,,,, +C0UA00,土場,Tuchang,,,,, +C0UA10,鴛鴦湖,Yuanyanghu,,,,, +C0UA20,多加屯,Duojiatun,,,,, +C0UA30,白嶺,Bailing,,,,, +C0UA40,西德山,Xideshan,,,,, +C0UA50,西帽山,Ximaoshan,,,,, +C0UA60,樟樹山,Zhangshushan,,,,, +C0UA70,桃源谷,Taoyuangu,,,,, +C0UA80,大溪漁港,Dasi Fishing Harbor,,,,, +C0UA90,石城,Shihcheng,,,,, +C0UB00,淡江大學蘭陽校園,Tamkang Lanyang Campus,,,,, +C0UB10,蘇澳,Suao,,,,, +C0UB20,壯圍,Jhuangwei,,,,, +C0UB60,明池,Mingchr,,,,, +C0UB70,太平山中間站,Jhongjian,,,,, +C0UB80,翠峰林道6K,Trifong 6k,,,,, +C0UB90,太平山莊,Taipingshan Villa,,,,, +C0V210,復興,Fuxing,,,,, +C0V350,溪埔,Xipu,,,,, +C0V360,內門,Neimen,,,,, +C0V370,古亭坑,Gutingkeng,,,,, +C0V400,阿公店,Agongdian,,,,, +C0V440,鳳山,Fengshan,,,,, +C0V450,鳳森,Fengsen,,,,, +C0V490,新興,Sinsing,,,,, +C0V530,阿蓮,Alian,,,,, +C0V610,梓官,Ziguan,,,,, +C0V620,永安,Yong'An,,,,, +C0V630,茄萣,Qieding,,,,, +C0V640,湖內,Hunei,,,,, +C0V650,彌陀,Mituo,,,,, +C0V660,岡山,Gangshan,,,,, +C0V680,仁武,Renwu,,,,, +C0V690,鼓山,Gushan,,,,, +C0V700,三民,Sanmin,,,,, +C0V710,苓雅,Lingya,,,,, +C0V720,林園,Linyuan,,,,, +C0V730,大寮,Daliao,,,,, +C0V740,旗山,Qishan,,,,, +C0V750,路竹,Luzhu,,,,, +C0V760,橋頭,Qiaotou,,,,, +C0V770,大社,Dashe,,,,, +C0V790,萬山,Wanshan,,,,, +C0V800,六龜,Liugui,,,,, +C0V810,左營,Zuoying,,,,, +C0V820,小林,Xiaolin,,,,, +C0V840,鳳鼻頭,Fongbitou,,,,, +C0V850,蚵仔寮,Kezailiao,,,,, +C0V860,南寮,Nanliao,,,,, +C0V870,文安,Wunan,,,,, +C0V880,興達,Singda,,,,, +C0V890,前鎮,Chian Jhen,,,,, +C0V900,汕尾,Shanwei,,,,, +C0V910,大樹,Dashu,,,,, +C0W110,東莒,Dongju,,,,, +C0W120,西嶼,Xiyu,,,,, +C0W130,花嶼,Huayu,,,,, +C0W140,金沙,Jinsha ,,,,, +C0W150,金寧,Jinning,,,,, +C0W160,烏坵,Wuqiu,,,,, +C0W180,七美,Qimei,,,,, +C0W190,望安,Wangan,,,,, +C0W200,湖西,Husi,,,,, +C0W220,北竿,Beigan,,,,, +C0W240,九宮,Jiugong ,,,,, +C0X050,東河,Donghe,,,,, +C0X060,下營,Xiaying,,,,, +C0X080,佳里,Jiali,,,,, +C0X100,臺南市北區,Beiqu Tainan City,,,,, +C0X110,臺南市南區,Nanqu Tainan City,,,,, +C0X120,麻豆,Madou,,,,, +C0X130,官田,Guantian,,,,, +C0X140,西港,Xigang,,,,, +C0X150,安定,Anding,,,,, +C0X160,仁德,Rende,,,,, +C0X170,關廟,Guanmiao,,,,, +C0X180,山上,Shanshang,,,,, +C0X190,安平,Anping,,,,, +C0X200,左鎮,Zuozhen,,,,, +C0X210,白河,Baihe,,,,, +C0X220,學甲,Xuejia,,,,, +C0X230,鹽水,Yanshui,,,,, +C0X240,關子嶺,Guanziling,,,,, +C0X250,新營,Xinying,,,,, +C0X260,後壁,Houbi,,,,, +C0X280,將軍,Jiangjun,,,,, +C0X290,北門,Beimen,,,,, +C0X300,鹿寮,Luliao,,,,, +C0X320,柳營,Liuying,,,,, +C0Z020,明里,Mingli,,,,, +C0Z050,佳心,Jiaxin,,,,, +C0Z061,玉里,Yuli,,,,, +C0Z070,舞鶴,Wuhe,,,,, +C0Z080,富源,Fuyuan,,,,, +C0Z100,東華,Donghwa,,,,, +C0Z150,吉安光華,Guanghua Ji-An,,,,, +C0Z160,鳳林,Fenglin,,,,, +C0Z170,卓溪,Zhuoxi,,,,, +C0Z180,新城,Xincheng,,,,, +C0Z190,富世,Fushi,,,,, +C0Z200,萬榮,Wanrong,,,,, +C0Z210,瑞穗,Ruisui,,,,, +C0Z220,和平林道,Hepinglindao,,,,, +C0Z230,和平,Heping,,,,, +C0Z250,瑞穗林道,Ruisuilindao,,,,, +C0Z270,蕃薯寮,Fanshuliao,,,,, +C0Z280,德武,Dewu,,,,, +C0Z290,赤柯山,Chikeshan,,,,, +C0Z300,東里,Dongli,,,,, +C0Z310,清水斷崖,Qingshui Cliff,,,,, +C0Z320,清水林道,Qingshuilindao,,,,, +C0Z330,安通山,Antongshan,,,,, +C1A630,下盆,Siapen,,,,, +C1A750,石碇服務區,Shiding Service Area,,,,, +C1A760,坪林交控,Pinglin Traffic Control Center,,,,, +C1A9N0,四十份,Sihshihfen,,,,, +C1AC50,關渡,Guandu,,,,, +C1AI50,國三N016K,Freeway No. 3 - Rain - N016k,,,,, +C1AI60,國一39K邊坡,Freeway No. 1 - Rain – N039k,,,,, +C1C510,水尾,Shueiwei,,,,, +C1D380,新埔,Sinpu,,,,, +C1D400,鳥嘴山,Niaozueishan,,,,, +C1D410,白蘭,Bailan,,,,, +C1D420,太閣南,Taigenan,,,,, +C1D630,飛鳳山,Fei Feng Mountain,,,,, +C1D640,外坪(五指山),Waiping(Wuzhihshan),,,,, +C1E451,象鼻,Xiangbi,,,,, +C1E461,松安,Song-An,,,,, +C1E480,鳳美,Fongmei,,,,, +C1E511,新開,Xinkai,,,,, +C1E601,南勢,Nanshi,,,,, +C1E670,南礦,Nankuang,,,,, +C1E681,南勢山,Nanshishan,,,,, +C1E691,南湖,Nanhu,,,,, +C1E701,八卦,Bagua,,,,, +C1E711,馬拉邦山,Malabangshan,,,,, +C1E721,泰安,Tai-An,,,,, +C1E770,公館,Gongguan,,,,, +C1E890,國三N149K,Freeway No. 1 - Rain – N149k,,,,, +C1E900,國一N128K,Freeway No. 1 - Rain – N128k,,,,, +C1F871,上谷關,Shangguguan,,,,, +C1F891,稍來,Shaolai,,,,, +C1F911,新伯公,Xinbogong,,,,, +C1F941,雪嶺,Xueling,,,,, +C1F9B1,桐林,Tonglin,,,,, +C1F9C1,白冷,Baileng,,,,, +C1F9D1,白毛台,Baimaotai,,,,, +C1F9E1,龍安,Long-An,,,,, +C1F9F1,伯公龍,Bogonglong,,,,, +C1F9G1,慶福山,Cingfushan,,,,, +C1F9J1,清水林,Qingshuilin,,,,, +C1F9W0,德基,Deji,,,,, +C1G691,下水埔,Xiashuipu,,,,, +C1G9D0,國一S218K,Freeway No. 1 - Rain – S218k,,,,, +C1H000,翠峰,Cuifeng,,,,, +C1H840,國三N238K,Freeway No. 3 - Rain –N238k,,,,, +C1H900,清流,Qingliu,,,,, +C1H920,長豐,Changfeng,,,,, +C1H941,雙冬,Shuangdong,,,,, +C1H971,六分寮,Liufenliao,,,,, +C1H9B1,阿眉,Amei,,,,, +C1I020,萬大,Wanda,,,,, +C1I030,武界,Wujie,,,,, +C1I050,丹大,Danda,,,,, +C1I070,和社,Heshe,,,,, +C1I101,溪頭,Xitou,,,,, +C1I121,大鞍,Da-An,,,,, +C1I131,桶頭,Tongtou,,,,, +C1I140,卡奈托灣,Kanaituowan,,,,, +C1I150,青雲,Qingyun,,,,, +C1I201,中心崙,Zhongxinlun,,,,, +C1I211,蘆竹湳,Luzhunan,,,,, +C1I220,樟湖,Zhanghu,,,,, +C1I230,九份二山,Jiufen'Ershan,,,,, +C1I240,外大坪,Waidaping,,,,, +C1I250,鯉潭,Litan,,,,, +C1I260,北坑,Beikeng,,,,, +C1I280,埔中,Puzhong,,,,, +C1I290,豐丘,Fengqiu,,,,, +C1I310,西巒,Xiluan,,,,, +C1I320,奧萬大,Aowanda,,,,, +C1I330,楓樹林,Fengshulin,,,,, +C1I340,新興橋,Xinxingqiao,,,,, +C1I400,凌霄,Lingxiao,,,,, +C1I430,翠華,Cuihua,,,,, +C1I440,新高口,Xingaokou,,,,, +C1I450,望鄉山,Wangxiangshan,,,,, +C1I470,杉林溪,Shanlinxi,,,,, +C1I500,大尖山,Dajianshan,,,,, +C1I510,線浸林道,Xianjinlindao,,,,, +C1I550,國六W023K,Freeway No. 6 - Rain – W023k,,,,, +C1K540,口湖,Kouhu,,,,, +C1M390,龍美,Longmei,,,,, +C1M400,菜瓜坪,Caiguaping,,,,, +C1M480,獨立山,Dulishan,,,,, +C1M600,頭凍,Toudong,,,,, +C1M610,石磐龍,Shipanlong,,,,, +C1M640,十字,Shizi,,,,, +C1M870,國三N285K,Freeway No. 3 - Rain –N285k,,,,, +C1N001,沙崙,Shalun,,,,, +C1O850,環湖,Huanhu,,,,, +C1O870,大棟山,Dadongshan,,,,, +C1O880,關山,Guanshan,,,,, +C1O921,楠西,Nanxi,,,,, +C1O940,東山服務區,Dongshan Service Area,,,,, +C1R110,口社,Gusia,,,,, +C1R120,上德文,Shangdewun,,,,, +C1R250,力里,Lili,,,,, +C1R290,石門山,Shihmenshan,,,,, +C1R610,西大武山,Xidawushan,,,,, +C1R630,龍泉,Longquan,,,,, +C1S670,摩天,Motian,,,,, +C1S800,華源,Huayuan,,,,, +C1S820,金峰,Jinfeng,,,,, +C1S850,豐南,Funan,,,,, +C1S860,利嘉,Lichai,,,,, +C1S870,南美山,Nanmaisan,,,,, +C1S880,壽卡,Shouka,,,,, +C1SA50,利嘉林道,Lijialindao,,,,, +C1SA70,都蘭,Dulan,,,,, +C1T800,洛韶,Luoshao,,,,, +C1T810,慈恩,Ci-En,,,,, +C1T830,布洛灣,Buluowan,,,,, +C1T920,中興,Zhongxing,,,,, +C1T940,大觀,Daguan,,,,, +C1T950,太安,Tai-An,,,,, +C1T970,大農,Danong,,,,, +C1T980,龍澗,Longjian,,,,, +C1T990,高寮,Gaoliao,,,,, +C1TA00,太魯閣,Taroko,,,,, +C1U501,牛鬥,Nioudou,,,,, +C1U670,寒溪,Hanxi,,,,, +C1U840,東澳嶺,Dongaoling,,,,, +C1U850,觀音海岸,Guanyin Coast,,,,, +C1U920,思源,Siyuan,,,,, +C1U930,粉鳥林,Fenniaolin,,,,, +C1V160,達卡努瓦,Dakanuwa,,,,, +C1V170,排雲,Paiyun,,,,, +C1V190,南天池,Nantianchi,,,,, +C1V200,梅山,Meishan,,,,, +C1V220,小關山,Xiaoguanshan,,,,, +C1V231,高中,Gaozhong,,,,, +C1V300,御油山,Yuyoushan,,,,, +C1V340,大津,Dajin,,,,, +C1V390,尖山,Jianshan,,,,, +C1V570,吉東,Jiadong,,,,, +C1V580,溪南(特生中心),Xinan,,,,, +C1V590,新發,Xinfa,,,,, +C1V600,藤枝,Tengzhi,,,,, +C1V780,多納林道,Duonalindao,,,,, +C1V830,國三S383K,Freeway No. 3 - Rain – S383k,,,,, +C1X040,東原,Dongyuan,,,,, +C1Z030,紅葉,Hongye,,,,, +C1Z040,立山,Lishan,,,,, +C1Z110,三棧,Sanzhan,,,,, +C1Z120,壽豐,Shoufeng,,,,, +C1Z130,銅門,Tongmen,,,,, +C1Z140,荖溪,Laoxi,,,,, +C1Z240,中平林道,Zhongpinglindao,,,,, \ No newline at end of file diff --git a/lib/api/model/location/location.dart b/lib/api/model/location/location.dart index 3538d525b..5cb2cee9e 100644 --- a/lib/api/model/location/location.dart +++ b/lib/api/model/location/location.dart @@ -1,17 +1,300 @@ +import 'package:i18n_extension/i18n_extension.dart'; import 'package:json_annotation/json_annotation.dart'; +import 'package:dpip/core/i18n.dart'; +import 'package:dpip/global.dart'; + part 'location.g.dart'; +/// Represents a geographical location in Taiwan with administrative hierarchy. +/// +/// This class encapsulates location data including the city and town names, their administrative levels (縣/市/區/鄉/ +/// 鎮), and geographical coordinates. It provides localized display methods for different presentation formats. +/// +/// Example: +/// ```dart +/// const location = Location( +/// city: '臺北', +/// town: '信義', +/// lat: 25.0330, +/// lng: 121.5654, +/// cityLevel: '市', +/// townLevel: '區', +/// ); +/// +/// print(location.dynamicName); // "臺北市 信義區" or shorter if too long +/// ``` @JsonSerializable() class Location { + /// The city name (e.g., "臺北", "高雄"). + /// + /// This represents the primary administrative division in Taiwan's government hierarchy. final String city; + + /// The town/district name (e.g., "信義", "前金"). + /// + /// This represents the secondary administrative division within a city. final String town; + + /// The latitude coordinate in decimal degrees. + /// + /// Valid range is approximately 21.5° to 25.5° for Taiwan. final double lat; + + /// The longitude coordinate in decimal degrees. + /// + /// Valid range is approximately 120° to 122° for Taiwan. final double lng; - const Location({required this.city, required this.town, required this.lat, required this.lng}); + /// The administrative level of the city (e.g., "市", "縣"). + /// + /// This indicates the type of primary administrative division: + /// - "市" for special municipalities and provincial cities + /// - "縣" for counties + final String cityLevel; + + /// The administrative level of the town (e.g., "區", "鄉", "鎮"). + /// + /// This indicates the type of secondary administrative division: + /// - "區" for districts (in cities) + /// - "鄉" for townships + /// - "鎮" for towns + final String townLevel; + + /// Creates a new [Location] instance. + /// + /// All parameters are required and represent the administrative and geographical data for a location in Taiwan. + const Location({ + required this.city, + required this.town, + required this.lat, + required this.lng, + required this.cityLevel, + required this.townLevel, + }); + + /// Returns the full localized location name with both city and town levels. + /// + /// Format: `"{city}{cityLevel} {town}{townLevel}"`\ + /// Example: "臺北市 信義區" or "Taipei City Xinyi District" + /// + /// This is the most complete form of the location name including all administrative level indicators. + String get cityTownWithLevel => '{city}{cityLevel} {town}{townLevel}'.i18n.args({ + 'city': city.locationName, + 'cityLevel': cityLevel.locationName, + 'town': town.locationName, + 'townLevel': townLevel.locationName, + }); + + /// Returns the localized location name without administrative levels. + /// + /// Format: `"{city} {town}"`\ + /// Example: "臺北 信義" or "Taipei Xinyi" + /// + /// This provides a cleaner, shorter display format without the administrative level suffixes. + String get cityTown => '{city} {town}'.i18n.args({'city': city.locationName, 'town': town.locationName}); + /// Returns the localized city name with its administrative level. + /// + /// Format: `"{city}{cityLevel}"`\ + /// Example: "臺北市" or "Taipei City" + /// + /// Use this when you only need to display the primary administrative division. + String get cityWithLevel => + '{city}{cityLevel}'.i18n.args({'city': city.locationName, 'cityLevel': cityLevel.locationName}); + + /// Returns the localized town name with its administrative level. + /// + /// Format: `"{town}{townLevel}"`\ + /// Example: "信義區" or "Xinyi District" + /// + /// Use this when you only need to display the secondary administrative division. + String get townWithLevel => + '{town}{townLevel}'.i18n.args({'town': town.locationName, 'townLevel': townLevel.locationName}); + + /// Returns a localized location name that adapts to available space. + /// + /// This method implements a fallback strategy to provide the most appropriate location name based on length + /// constraints: + /// + /// 1. First tries [cityTownWithLevel] (full format) + /// 2. If too long (>24 chars), falls back to [townWithLevel] + /// 3. If still too long, falls back to just [town] name + /// + /// This is ideal for UI elements with limited space where you want to show as much location detail as possible while + /// maintaining readability. + /// + /// Example progression: + /// - `"新北市板橋區"` → `"板橋區"` → `"板橋"` + /// - `"Qianzhen District, Kaohsiung City"` → `"Qianzhen District"` → `"Qianzhen"` + String get dynamicName { + // Try full format first + String content = cityTownWithLevel; + + // Fall back to town with level if too long + if (content.length > 24) { + content = townWithLevel; + } + + // Fall back to town name only if still too long + if (content.length > 24) { + content = town; + } + + return content; + } + + /// Creates a [Location] instance from a JSON map. + /// + /// This factory constructor is generated by `json_annotation` and is used for deserializing location data from JSON + /// sources such as APIs or local storage. + /// + /// Example: + /// ```dart + /// final json = { + /// 'city': '臺北', + /// 'town': '信義', + /// 'lat': 25.0330, + /// 'lng': 121.5654, + /// 'cityLevel': '市', + /// 'townLevel': '區', + /// }; + /// final location = Location.fromJson(json); + /// ``` factory Location.fromJson(Map json) => _$LocationFromJson(json); + /// Converts this [Location] instance to a JSON map. + /// + /// This method is generated by `json_annotation` and is used for serializing location data to JSON format for storage + /// or transmission. + /// + /// Returns a [Map] containing all the location properties with their original keys. Map toJson() => _$LocationToJson(this); + + /// Attempts to parse a Chinese location string into a [Location] instance. + /// + /// The input string should be in Chinese and follow the format `"{city}{cityLevel}{town}{townLevel}"`, but can have + /// variations such as: + /// - Missing administrative levels: `"臺北信義"` or `"臺北市信義"` + /// - Extra spaces: `"臺北市 信義區"` or `"臺北 信義"` + /// - Different combinations of levels + /// + /// Returns `null` if: + /// - The city name cannot be found in the location database + /// - The town name cannot be found within the identified city + /// - The input string is empty or invalid + /// + /// Examples: + /// ```dart + /// Location.tryParse("臺北市信義區"); // ✓ Full format + /// Location.tryParse("臺北信義"); // ✓ No levels + /// Location.tryParse("臺北市 信義區"); // ✓ With spaces + /// Location.tryParse("臺北信義區"); // ✓ Mixed levels + /// Location.tryParse("不存在的地方"); // ✗ Returns null + /// ``` + /// + /// This method searches through the global location map (`Global.location`) to find matching city and town + /// combinations. + static Location? tryParse(String input) { + if (input.trim().isEmpty) return null; + + // Clean the input: remove all spaces and normalize + final cleanInput = input.replaceAll(RegExp(r'\s+'), '').toLowerCase(); + + // Normalize traditional/simplified characters for better matching + final normalizedInput = _normalizeChineseCharacters(cleanInput); + + // Try to find the best matching location + Location? bestMatch; + int bestMatchScore = 0; + + // Iterate through all locations in the database + for (final locationEntry in Global.location.entries) { + final location = locationEntry.value; + + // Generate possible Chinese representations of this location + final possibleFormats = [ + '${location.city}${location.cityLevel}${location.town}${location.townLevel}', // Full format + '${location.city}${location.cityLevel}${location.town}', // No town level + '${location.city}${location.town}${location.townLevel}', // No city level + '${location.city}${location.town}', // No levels + ]; + + // Check each possible format against the input + for (final format in possibleFormats) { + final normalizedFormat = _normalizeChineseCharacters(format.toLowerCase()); + + if (normalizedInput == normalizedFormat) { + // Exact match found - return immediately + return location; + } + + // Calculate match score for partial matches + final score = _calculateMatchScore(normalizedInput, normalizedFormat); + if (score > bestMatchScore) { + bestMatchScore = score; + bestMatch = location; + } + } + } + + // Return the best match if it's good enough (threshold: 90% similarity for safety) + return bestMatchScore >= 90 ? bestMatch : null; + } + + /// Calculates a match score between input and target strings. + /// + /// Returns a score from 0-100 where 100 is a perfect match. + /// Uses a simple similarity algorithm based on common character sequences. + static int _calculateMatchScore(String input, String target) { + if (input == target) return 100; + if (input.isEmpty || target.isEmpty) return 0; + + // Check if input is a substring of target or vice versa + if (target.contains(input)) { + return (input.length * 100) ~/ target.length; + } + if (input.contains(target)) { + return (target.length * 100) ~/ input.length; + } + + // Count matching characters in order + int matches = 0; + int inputIndex = 0; + int targetIndex = 0; + + while (inputIndex < input.length && targetIndex < target.length) { + if (input[inputIndex] == target[targetIndex]) { + matches++; + inputIndex++; + targetIndex++; + } else { + targetIndex++; + } + } + + return (matches * 100) ~/ input.length; + } + + /// Normalizes Chinese characters for better matching between traditional and simplified forms. + /// + /// This method handles common character variations that might appear in user input + /// vs. the database, ensuring "台中" matches "臺中", etc. + static String _normalizeChineseCharacters(String input) { + // Map of common simplified -> traditional character pairs used in Taiwan location names + const charMap = { + '台': '臺', // Taiwan/Platform + '县': '縣', // County + '区': '區', // District + '乡': '鄉', // Township + '镇': '鎮', // Town + // Add more mappings as needed + }; + + String result = input; + for (final entry in charMap.entries) { + result = result.replaceAll(entry.key, entry.value); + } + return result; + } } diff --git a/lib/app/home/_widgets/location_button.dart b/lib/app/home/_widgets/location_button.dart index 8dea39372..fa1664397 100644 --- a/lib/app/home/_widgets/location_button.dart +++ b/lib/app/home/_widgets/location_button.dart @@ -1,12 +1,14 @@ +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/app/home/_widgets/blurred_button.dart'; import 'package:dpip/app/settings/location/page.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/global.dart'; import 'package:dpip/models/settings/location.dart'; import 'package:dpip/utils/extensions/build_context.dart'; -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:provider/provider.dart'; class LocationButton extends StatelessWidget { const LocationButton({super.key}); @@ -18,7 +20,12 @@ class LocationButton extends StatelessWidget { builder: (context, code, child) { final location = Global.location[code]; - final content = location == null ? '尚未設定'.i18n : '${location.city} ${location.town}'; + late String content; + if (location == null) { + content = '尚未設定'.i18n; + } else { + content = location.dynamicName; + } return BlurredTextButton( onPressed: () => context.push(SettingsLocationPage.route), diff --git a/lib/app/home/_widgets/weather_header.dart b/lib/app/home/_widgets/weather_header.dart index 1aa6bd155..b5e1eee95 100644 --- a/lib/app/home/_widgets/weather_header.dart +++ b/lib/app/home/_widgets/weather_header.dart @@ -193,7 +193,7 @@ class WeatherHeader extends StatelessWidget { children: [ Icon(Symbols.pin_drop_rounded, size: 16, color: context.colors.onSurfaceVariant), Text( - weather.weather.station.name, + weather.weather.id.weatherStation, style: context.theme.textTheme.bodyLarge!.copyWith(color: context.colors.onSurfaceVariant), ), ], diff --git a/lib/app/home/page.dart b/lib/app/home/page.dart index 2c8311e19..c7da379ab 100644 --- a/lib/app/home/page.dart +++ b/lib/app/home/page.dart @@ -212,7 +212,6 @@ class _HomePageState extends State { ], ), ), - const Positioned( top: 24, left: 0, diff --git a/lib/app/map/_lib/managers/report.dart b/lib/app/map/_lib/managers/report.dart index e7f1146a7..682cdd45d 100644 --- a/lib/app/map/_lib/managers/report.dart +++ b/lib/app/map/_lib/managers/report.dart @@ -9,6 +9,7 @@ import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:dpip/api/exptech.dart'; +import 'package:dpip/api/model/location/location.dart'; import 'package:dpip/api/model/report/earthquake_report.dart'; import 'package:dpip/api/model/report/partial_earthquake_report.dart'; import 'package:dpip/app/map/_lib/manager.dart'; @@ -334,9 +335,13 @@ class _ReportMapLayerSheetState extends State { return ValueListenableBuilder( valueListenable: widget.manager.currentReport, builder: (context, currentReport, child) { + // Show the first report from partial report list if (currentReport == null) { final report = GlobalProviders.data.partialReport.first; + final locationString = report.extractLocation(); + final location = Location.tryParse(locationString)?.dynamicName ?? locationString; + return Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Selector>( @@ -385,7 +390,7 @@ class _ReportMapLayerSheetState extends State { Text( report.hasNumber ? '編號 {number} 顯著有感地震'.i18n.args({'number': report.number}) - : report.extractLocation(), + : location, style: context.textTheme.titleMedium, ), Text( @@ -408,6 +413,11 @@ class _ReportMapLayerSheetState extends State { ); } + // Show the current report with details + + final locationString = currentReport.extractLocation(); + final location = Location.tryParse(locationString)?.dynamicName ?? locationString; + return Padding( padding: const EdgeInsets.all(12), child: Column( @@ -430,10 +440,7 @@ class _ReportMapLayerSheetState extends State { : '小區域有感地震'.i18n, style: context.textTheme.labelMedium?.copyWith(color: context.colors.outline), ), - Text( - currentReport.extractLocation(), - style: context.textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w500), - ), + Text(location, style: context.textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w500)), Text( currentReport.time.toLocaleDateTimeString(context), style: context.textTheme.bodyMedium?.copyWith(color: context.colors.onSurfaceVariant), @@ -522,31 +529,35 @@ class _ReportMapLayerSheetState extends State { itemCount: grouped.length, itemBuilder: (context, index) { final MapEntry(key: date, value: reports) = grouped[index]; + return ListSection( title: date, - children: [ - for (final report in reports) - ListSectionTile( - leading: IntensityBox( - intensity: report.intensity, - size: 36, - borderRadius: 8, - border: !report.hasNumber, - ), - title: report.extractLocation(), - subtitle: Text( - '${report.hasNumber ? '${'編號 {number} 顯著有感地震'.i18n.args({'number': report.number})}\n' : ''}${report.time.toLocaleTimeString(context)}・${report.depth}km', - ), - trailing: Text( - 'M ${report.magnitude.toStringAsFixed(1)}', - style: context.textTheme.labelLarge, - ), - onTap: () { - widget.manager.setReport(report.id); - sheetController.collapse(); - }, - ), - ], + children: + reports.map((report) { + final locationString = report.extractLocation(); + final location = Location.tryParse(locationString)?.dynamicName ?? locationString; + + return ListSectionTile( + leading: IntensityBox( + intensity: report.intensity, + size: 36, + borderRadius: 8, + border: !report.hasNumber, + ), + title: location, + subtitle: Text( + '${report.hasNumber ? '${'編號 {number} 顯著有感地震'.i18n.args({'number': report.number})}\n' : ''}${report.time.toLocaleTimeString(context)}・${report.depth}km', + ), + trailing: Text( + 'M ${report.magnitude.toStringAsFixed(1)}', + style: context.textTheme.labelLarge, + ), + onTap: () { + widget.manager.setReport(report.id); + sheetController.collapse(); + }, + ); + }).toList(), ); }, ), @@ -562,6 +573,9 @@ class _ReportMapLayerSheetState extends State { if (report == null) { content = [const Center(child: CircularProgressIndicator())]; } else { + final locationString = report.getLocation(); + final location = Location.tryParse(locationString)?.dynamicName ?? locationString; + content = [ Padding( padding: const EdgeInsets.symmetric(vertical: 8), @@ -579,10 +593,7 @@ class _ReportMapLayerSheetState extends State { : '小區域有感地震'.i18n, style: TextStyle(color: context.colors.onSurfaceVariant, fontSize: 14), ), - Text( - report.getLocation(), - style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold), - ), + Text(location, style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), ], ), ), diff --git a/lib/app/settings/location/page.dart b/lib/app/settings/location/page.dart index b705ff44b..dd2476c6b 100644 --- a/lib/app/settings/location/page.dart +++ b/lib/app/settings/location/page.dart @@ -378,7 +378,7 @@ class _SettingsLocationPageState extends State with Widget final isSelected = code == model.code; return ListSectionTile( - title: '${location.city} ${location.town}', + title: location.cityTownWithLevel, subtitle: Text( '$code・${location.lng.toStringAsFixed(2)}°E・${location.lat.toStringAsFixed(2)}°N', ), diff --git a/lib/app/settings/location/select/[city]/page.dart b/lib/app/settings/location/select/[city]/page.dart index 49dd39a2a..6d60dd3e7 100644 --- a/lib/app/settings/location/select/[city]/page.dart +++ b/lib/app/settings/location/select/[city]/page.dart @@ -26,7 +26,7 @@ class SettingsLocationSelectCityPage extends StatefulWidget { class _SettingsLocationSelectCityPageState extends State { @override Widget build(BuildContext context) { - final towns = Global.location.entries.where((e) => e.value.city == widget.city).toList(); + final towns = Global.location.entries.where((e) => e.value.cityWithLevel == widget.city).toList(); return ListView( padding: EdgeInsets.only(top: 8, bottom: 16 + context.padding.bottom), @@ -41,7 +41,7 @@ class _SettingsLocationSelectCityPageState extends State e.value.city).toSet().toList(); class SettingsLocationSelectPage extends StatelessWidget { const SettingsLocationSelectPage({super.key}); @@ -19,25 +20,35 @@ class SettingsLocationSelectPage extends StatelessWidget { @override Widget build(BuildContext context) { + final entries = Global.location.entries.toList(); + + final locations = + entries + .whereIndexed( + (index, e) => + index == + entries.indexWhere((v) => (v.value.city == e.value.city) && (v.value.cityLevel == e.value.cityLevel)), + ) + .toList(); + return ListView( padding: EdgeInsets.only(top: 8, bottom: 16 + context.padding.bottom), children: [ ListSection( title: '縣市'.i18n, children: [ - for (final city in cities) + for (final MapEntry(key: _, value: location) in locations) Selector( selector: (context, model) => model.code, builder: - (context, code, child) => ListSectionTile( - title: city, + (context, currentCode, child) => ListSectionTile( + title: location.cityWithLevel, trailing: const Icon(Symbols.chevron_right_rounded), subtitle: - code != null && - Global.location.entries.containsWhere((e) => e.value.city == city && e.key == code) + currentCode != null && location.cityWithLevel == currentCode.getLocation().cityWithLevel ? Text('目前所在地'.i18n) : null, - onTap: () => context.push('/settings/location/select/$city'), + onTap: () => context.push('/settings/location/select/${location.cityWithLevel}'), ), ), ], diff --git a/lib/core/i18n.dart b/lib/core/i18n.dart index fb8706f65..64e72b4e1 100644 --- a/lib/core/i18n.dart +++ b/lib/core/i18n.dart @@ -1,7 +1,128 @@ +import 'dart:convert'; + +import 'package:flutter/services.dart'; import 'package:i18n_extension/i18n_extension.dart'; +class I18nCsvLoader { + I18nCsvLoader._(); + + static Future>> fromFile(String path) async { + final csvContent = await rootBundle.loadString(path); + return _parseCsvTranslations(csvContent); + } + + static Map> _parseCsvTranslations(String csvContent) { + final lines = LineSplitter.split(csvContent); + if (lines.isEmpty) return {}; + + // Parse headers + final headers = _parseCsvLine(lines.first); + if (headers.isEmpty || headers[0] != 'key') { + throw const FormatException('CSV must start with "key" column'); + } + + // Extract language codes from headers (skip 'key' column) + final languageCodes = headers.skip(1).toList(); + + // Initialize result map with empty language maps + final Map> result = {}; + for (final langCode in languageCodes) { + result[langCode] = {}; + } + + // Process data rows + for (final line in lines.skip(1)) { + if (line.trim().isEmpty) continue; + + final values = _parseCsvLine(line); + if (values.isEmpty || values[0].isEmpty) continue; + + final key = values[0]; + final translations = values.skip(1).toList(); + + result[key] = {for (final langCode in languageCodes) langCode: translations[languageCodes.indexOf(langCode)]}; + } + + return result; + } + + /// Parse a CSV line, handling quoted fields and commas + static List _parseCsvLine(String line) { + final List result = []; + final StringBuffer current = StringBuffer(); + bool inQuotes = false; + bool lastWasQuote = false; + + for (int i = 0; i < line.length; i++) { + final char = line[i]; + + if (char == '"') { + if (inQuotes && lastWasQuote) { + // Double quote inside quoted field - add single quote + current.write('"'); + lastWasQuote = false; + } else if (inQuotes) { + // End of quoted field + lastWasQuote = true; + } else { + // Start of quoted field + inQuotes = true; + lastWasQuote = false; + } + } else if (char == ',' && (!inQuotes || lastWasQuote)) { + // Field separator + result.add(current.toString()); + current.clear(); + inQuotes = false; + lastWasQuote = false; + } else { + // Regular character + current.write(char); + lastWasQuote = false; + } + } + + // Add final field + result.add(current.toString()); + + return result; + } +} + extension AppLocalizations on String { static final _t = Translations.byFile('zh-Hant', dir: 'assets/translations'); static Future load() => _t.load(); String get i18n => localize(this, _t); } + +extension LocationNameLocalizations on String { + static late final Translations _locationNames; + static bool _isLoaded = false; + + static Future load() async { + if (_isLoaded) return; + + final translations = await I18nCsvLoader.fromFile('assets/location_names.csv'); + + _locationNames = Translations.byId('zh-Hant', translations); + _isLoaded = true; + } + + String get locationName => localize(this, _locationNames); +} + +extension WeatherStationLocalizations on String { + static late final Translations _weatherStations; + static bool _isLoaded = false; + + static Future load() async { + if (_isLoaded) return; + + final translations = await I18nCsvLoader.fromFile('assets/weather_station_names.csv'); + + _weatherStations = Translations.byId('zh-Hant', translations); + _isLoaded = true; + } + + String get weatherStation => localize(this, _weatherStations); +} diff --git a/lib/main.dart b/lib/main.dart index bdae802e0..805ea30c7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -44,6 +44,8 @@ void main() async { await Future.wait([ DeviceInfo.init(), AppLocalizations.load(), + LocationNameLocalizations.load(), + WeatherStationLocalizations.load(), initializeInstallationData(), fcmInit(), notifyInit(), diff --git a/lib/utils/extensions/string.dart b/lib/utils/extensions/string.dart index ac305ff6e..6d4547aa9 100644 --- a/lib/utils/extensions/string.dart +++ b/lib/utils/extensions/string.dart @@ -1,3 +1,5 @@ +import 'package:dpip/api/model/location/location.dart'; +import 'package:dpip/global.dart'; import 'package:flutter/widgets.dart'; import 'package:dpip/utils/extensions/build_context.dart'; @@ -19,6 +21,9 @@ extension StringExtension on String { Text get asText => Text(this); TextSpan get asTextSpan => TextSpan(text: this); + + Location getLocation() => Global.location[this]!; + Location? get asLocation => Location.tryParse(this); } extension TextExtension on Text { diff --git a/pubspec.yaml b/pubspec.yaml index 7b0f30137..39af92431 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -87,11 +87,15 @@ flutter: generate: true uses-material-design: true assets: + # localizations - assets/translations/ + - assets/location_names.csv + - assets/weather_station_names.csv + # other - assets/map/ - assets/DPIP.png - assets/ExpTech.png + - assets/box.json - assets/location.json - assets/notify_test.json - assets/time.json - - assets/box.json From 81d2b58cf3d4177c47835a57cbabdd648cadbc61 Mon Sep 17 00:00:00 2001 From: Lingling Date: Wed, 13 Aug 2025 17:32:56 +0800 Subject: [PATCH 24/59] fix(history): workandclassSuspension type (#376) * fix(history): workschlclos type * fix: naming definition * revert --- lib/api/model/history/history.dart | 3 +++ lib/widgets/home/event_list_route.dart | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/api/model/history/history.dart b/lib/api/model/history/history.dart index e10d05acb..aef30b2bf 100644 --- a/lib/api/model/history/history.dart +++ b/lib/api/model/history/history.dart @@ -29,6 +29,9 @@ enum HistoryType { @JsonValue('extremely-torrential-rain') extremelyTorrentialRain, + + @JsonValue('workSchlClos') + workAndClassSuspension, } @JsonSerializable() diff --git a/lib/widgets/home/event_list_route.dart b/lib/widgets/home/event_list_route.dart index d43b78c6a..916ef3434 100644 --- a/lib/widgets/home/event_list_route.dart +++ b/lib/widgets/home/event_list_route.dart @@ -41,6 +41,9 @@ void handleEventList(BuildContext context, History history) { case HistoryType.extremelyTorrentialRain: page = ThunderstormPage(item: history); + case HistoryType.workAndClassSuspension: + page = ThunderstormPage(item: history); + case HistoryType.earthquake: context.push( MapPage.route( From d74cccd2aa5edcc83b69381c058b8e607375d546 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 17:44:38 +0800 Subject: [PATCH 25/59] Update Crowdin configuration file --- crowdin.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crowdin.yml b/crowdin.yml index 52333b66d..3ffedf79c 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,8 @@ files: - source: /assets/translations/strings.pot translation: /assets/translations/%osx_locale%.po + - source: /assets/*.csv + translation: /assets/translations/%original_file_name% + multilingual: 1 + first_line_contains_header: 1 + scheme: 'identifier,source_phrase,en,ja,ko,ru,vi,zh-CN' From 03aead5fc60d1e7e71acdc094f7b0ce5af3f70e6 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 17:45:22 +0800 Subject: [PATCH 26/59] Update Crowdin configuration file --- pubspec.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 39af92431..76368056e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -89,8 +89,6 @@ flutter: assets: # localizations - assets/translations/ - - assets/location_names.csv - - assets/weather_station_names.csv # other - assets/map/ - assets/DPIP.png From d57548c1bbd679d2731545084cf455822fdf7220 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 17:46:57 +0800 Subject: [PATCH 27/59] Update Crowdin configuration file --- lib/core/i18n.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/i18n.dart b/lib/core/i18n.dart index 64e72b4e1..7afea152f 100644 --- a/lib/core/i18n.dart +++ b/lib/core/i18n.dart @@ -102,7 +102,7 @@ extension LocationNameLocalizations on String { static Future load() async { if (_isLoaded) return; - final translations = await I18nCsvLoader.fromFile('assets/location_names.csv'); + final translations = await I18nCsvLoader.fromFile('assets/translations/location_names.csv'); _locationNames = Translations.byId('zh-Hant', translations); _isLoaded = true; @@ -118,7 +118,7 @@ extension WeatherStationLocalizations on String { static Future load() async { if (_isLoaded) return; - final translations = await I18nCsvLoader.fromFile('assets/weather_station_names.csv'); + final translations = await I18nCsvLoader.fromFile('assets/translations/weather_station_names.csv'); _weatherStations = Translations.byId('zh-Hant', translations); _isLoaded = true; From 1617ce986a21b4f9405e0e1b413cfb865c2b7009 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 17:59:06 +0800 Subject: [PATCH 28/59] chore: move files (#378) --- {assets => .crowdin}/location_names.csv | 0 {assets/translations => .crowdin}/strings.pot | 0 .../weather_station_names.csv | 0 assets/translations/location_names.csv | 385 ++++ assets/translations/weather_station_names.csv | 818 ++++++++ crowdin.yml | 4 +- l10n.yaml | 4 - lib/l10n/app_en.arb | 1801 ---------------- lib/l10n/app_ja.arb | 1801 ---------------- lib/l10n/app_ko.arb | 1801 ---------------- lib/l10n/app_ru.arb | 1801 ---------------- lib/l10n/app_vi.arb | 1801 ---------------- lib/l10n/app_zh.arb | 1732 ---------------- lib/l10n/app_zh_CN.arb | 1801 ---------------- lib/l10n/app_zh_TW.arb | 1826 ----------------- lib/utils/extensions/build_context.dart | 2 - pubspec.yaml | 1 - tools/update_translations.sh | 2 +- 18 files changed, 1206 insertions(+), 14374 deletions(-) rename {assets => .crowdin}/location_names.csv (100%) rename {assets/translations => .crowdin}/strings.pot (100%) rename {assets => .crowdin}/weather_station_names.csv (100%) create mode 100644 assets/translations/location_names.csv create mode 100644 assets/translations/weather_station_names.csv delete mode 100644 l10n.yaml delete mode 100644 lib/l10n/app_en.arb delete mode 100644 lib/l10n/app_ja.arb delete mode 100644 lib/l10n/app_ko.arb delete mode 100644 lib/l10n/app_ru.arb delete mode 100644 lib/l10n/app_vi.arb delete mode 100644 lib/l10n/app_zh.arb delete mode 100644 lib/l10n/app_zh_CN.arb delete mode 100644 lib/l10n/app_zh_TW.arb diff --git a/assets/location_names.csv b/.crowdin/location_names.csv similarity index 100% rename from assets/location_names.csv rename to .crowdin/location_names.csv diff --git a/assets/translations/strings.pot b/.crowdin/strings.pot similarity index 100% rename from assets/translations/strings.pot rename to .crowdin/strings.pot diff --git a/assets/weather_station_names.csv b/.crowdin/weather_station_names.csv similarity index 100% rename from assets/weather_station_names.csv rename to .crowdin/weather_station_names.csv diff --git a/assets/translations/location_names.csv b/assets/translations/location_names.csv new file mode 100644 index 000000000..7679b00aa --- /dev/null +++ b/assets/translations/location_names.csv @@ -0,0 +1,385 @@ +key,zh-Hant,en,ja,ko,ru,vi,zh-Hans +連江,連江,Lienchiang,,,,, +宜蘭,宜蘭,Yilan,,,,, +彰化,彰化,Changhua,,,,, +南投,南投,Nantou,,,,, +雲林,雲林,Yunlin,,,,, +屏東,屏東,Pingtung,,,,, +基隆,基隆,Keelung,,,,, +臺北,臺北,Taipei,,,,, +新北,新北,New Taipei,,,,, +臺南,臺南,Tainan,,,,, +桃園,桃園,Taoyuan,,,,, +嘉義,嘉義,Chiayi,,,,, +嘉義,嘉義,Chiayi,,,,, +金門,金門,Kinmen,,,,, +高雄,高雄,Kaohsiung,,,,, +臺東,臺東,Taitung,,,,, +花蓮,花蓮,Hualien,,,,, +澎湖,澎湖,Penghu,,,,, +新竹,新竹,Hsinchu,,,,, +臺中,臺中,Taichung,,,,, +苗栗,苗栗,Miaoli,,,,, +新竹,新竹,Hsinchu,,,,, +成功,成功,Chenggong,,,,, +佳冬,佳冬,Jiadong,,,,, +麥寮,麥寮,Mailiao,,,,, +綠島,綠島,Lüdao,,,,, +蘭嶼,蘭嶼,Lanyu,,,,, +田中,田中,Tianzhong,,,,, +社頭,社頭,Shetou,,,,, +竹田,竹田,Zhutian,,,,, +萬丹,萬丹,Wandan,,,,, +三灣,三灣,Sanwan,,,,, +峨眉,峨眉,Emei,,,,, +南庄,南庄,Nanzhuang,,,,, +太保,太保,Taibao,,,,, +中埔,中埔,Zhongpu,,,,, +番路,番路,Fanlu,,,,, +水上,水上,Shuishang,,,,, +員林,員林,Yuanlin,,,,, +小港,小港,Xiaogang,,,,, +蘇澳,蘇澳,Su'ao,,,,, +五結,五結,Wujie,,,,, +宜蘭,宜蘭,Yilan,,,,, +壯圍,壯圍,Zhuangwei,,,,, +南竿,南竿,Nangan,,,,, +莒光,莒光,Juguang,,,,, +烏坵,烏坵,Wuqiu,,,,, +羅東,羅東,Luodong,,,,, +員山,員山,Yuanshan,,,,, +冬山,冬山,Dongshan,,,,, +三星,三星,Sanxing,,,,, +大同,大同,Datong,,,,, +竹東,竹東,Zhudong,,,,, +新埔,新埔,Xinpu,,,,, +關西,關西,Guanxi,,,,, +湖口,湖口,Hukou,,,,, +芎林,芎林,Qionglin,,,,, +橫山,橫山,Hengshan,,,,, +北埔,北埔,Beipu,,,,, +五峰,五峰,Wufeng,,,,, +龍井,龍井,Longjing,,,,, +大雅,大雅,Daya,,,,, +沙鹿,沙鹿,Shalu,,,,, +梧棲,梧棲,Wuqi,,,,, +湖西,湖西,Huxi,,,,, +金峰,金峰,Jinfeng,,,,, +太麻里,太麻里,Taimali,,,,, +苗栗,苗栗,Miaoli,,,,, +卓蘭,卓蘭,Zhuolan,,,,, +大湖,大湖,Dahu,,,,, +公館,公館,Gongguan,,,,, +銅鑼,銅鑼,Tongluo,,,,, +頭屋,頭屋,Touwu,,,,, +三義,三義,Sanyi,,,,, +西湖,西湖,Xihu,,,,, +造橋,造橋,Zaoqiao,,,,, +獅潭,獅潭,Shitan,,,,, +彰化,彰化,Changhua,,,,, +和美,和美,Hemei,,,,, +線西,線西,Xianxi,,,,, +伸港,伸港,Shengang,,,,, +秀水,秀水,Xiushui,,,,, +花壇,花壇,Huatan,,,,, +芬園,芬園,Fenyuan,,,,, +溪湖,溪湖,Xihu,,,,, +東石,東石,Dongshi,,,,, +大村,大村,Dacun,,,,, +埔鹽,埔鹽,Puyan,,,,, +埔心,埔心,Puxin,,,,, +永靖,永靖,Yongjing,,,,, +二水,二水,Ershui,,,,, +二林,二林,Erlin,,,,, +埤頭,埤頭,Pitou,,,,, +芳苑,芳苑,Fangyuan,,,,, +大城,大城,Dacheng,,,,, +竹塘,竹塘,Zhutang,,,,, +溪州,溪州,Xizhou,,,,, +南投,南投,Nantou,,,,, +埔里,埔里,Puli,,,,, +草屯,草屯,Caotun,,,,, +竹山,竹山,Zhushan,,,,, +集集,集集,Jiji,,,,, +名間,名間,Mingjian,,,,, +鹿谷,鹿谷,Lugu,,,,, +中寮,中寮,Zhongliao,,,,, +魚池,魚池,Yuchi,,,,, +國姓,國姓,Guoxing,,,,, +水里,水里,Shuili,,,,, +信義,信義,Xinyi,,,,, +仁愛,仁愛,Ren'ai,,,,, +斗六,斗六,Douliu,,,,, +斗南,斗南,Dounan,,,,, +虎尾,虎尾,Huwei,,,,, +西螺,西螺,Xiluo,,,,, +土庫,土庫,Tuku,,,,, +北港,北港,Beigang,,,,, +古坑,古坑,Gukeng,,,,, +大埤,大埤,Dapi,,,,, +莿桐,莿桐,Citong,,,,, +林內,林內,Linnei,,,,, +二崙,二崙,Erlun,,,,, +崙背,崙背,Lunbei,,,,, +東勢,東勢,Dongshi,,,,, +褒忠,褒忠,Baozhong,,,,, +元長,元長,Yuanchang,,,,, +水林,水林,Shuilin,,,,, +朴子,朴子,Puzi,,,,, +大林,大林,Dalin,,,,, +民雄,民雄,Minxiong,,,,, +溪口,溪口,Xikou,,,,, +新港,新港,Xingang,,,,, +六腳,六腳,Liujiao,,,,, +義竹,義竹,Yizhu,,,,, +鹿草,鹿草,Lucao,,,,, +竹崎,竹崎,Zhuqi,,,,, +梅山,梅山,Meishan,,,,, +大埔,大埔,Dapu,,,,, +阿里山,阿里山,Alishan,,,,, +屏東,屏東,Pingtung,,,,, +潮州,潮州,Chaozhou,,,,, +長治,長治,Changzhi,,,,, +麟洛,麟洛,Linluo,,,,, +九如,九如,Jiuru,,,,, +里港,里港,Ligang,,,,, +鹽埔,鹽埔,Yanpu,,,,, +高樹,高樹,Gaoshu,,,,, +萬巒,萬巒,Wanluan,,,,, +內埔,內埔,Neipu,,,,, +新埤,新埤,Xinpi,,,,, +崁頂,崁頂,Kanding,,,,, +南州,南州,Nanzhou,,,,, +琉球,琉球,Liuqiu,,,,, +三地門,三地門,Sandimen,,,,, +霧臺,霧臺,Wutai,,,,, +瑪家,瑪家,Majia,,,,, +泰武,泰武,Taiwu,,,,, +來義,來義,Laiyi,,,,, +春日,春日,Chunri,,,,, +獅子,獅子,Shizi,,,,, +鹿野,鹿野,Luye,,,,, +池上,池上,Chishang,,,,, +延平,延平,Yanping,,,,, +光復,光復,Guangfu,,,,, +瑞穗,瑞穗,Ruisui,,,,, +富里,富里,Fuli,,,,, +馬公,馬公,Magong,,,,, +白沙,白沙,Baisha,,,,, +西嶼,西嶼,Xiyu,,,,, +望安,望安,Wang'an,,,,, +七美,七美,Qimei,,,,, +暖暖,暖暖,Nuannuan,,,,, +大安,大安,Da'an,,,,, +文山,文山,Wenshan,,,,, +鹽埕,鹽埕,Yancheng,,,,, +新興,新興,Xinxing,,,,, +前金,前金,Qianjin,,,,, +前鎮,前鎮,Qianzhen,,,,, +頭城,頭城,Toucheng,,,,, +南澳,南澳,Nan'ao,,,,, +竹北,竹北,Zhubei,,,,, +新豐,新豐,Xinfeng,,,,, +苑裡,苑裡,Yuanli,,,,, +通霄,通霄,Tongxiao,,,,, +竹南,竹南,Zhunan,,,,, +後龍,後龍,Houlong,,,,, +鹿港,鹿港,Lukang,,,,, +福興,福興,Fuxing,,,,, +臺西,臺西,Taixi,,,,, +四湖,四湖,Sihu,,,,, +口湖,口湖,Kouhu,,,,, +布袋,布袋,Budai,,,,, +東港,東港,Donggang,,,,, +枋寮,枋寮,Fangliao,,,,, +新園,新園,Xinyuan,,,,, +林邊,林邊,Linbian,,,,, +車城,車城,Checheng,,,,, +滿州,滿州,Manzhou,,,,, +枋山,枋山,Fangshan,,,,, +牡丹,牡丹,Mudan,,,,, +臺東,臺東,Taitung,,,,, +卑南,卑南,Beinan,,,,, +東河,東河,Donghe,,,,, +吉安,吉安,Ji'an,,,,, +壽豐,壽豐,Shoufeng,,,,, +秀林,秀林,Xiulin,,,,, +楠梓,楠梓,Nanzi,,,,, +鳳山,鳳山,Fengshan,,,,, +大寮,大寮,Daliao,,,,, +大樹,大樹,Dashu,,,,, +大社,大社,Dashe,,,,, +仁武,仁武,Renwu,,,,, +鳥松,鳥松,Niaosong,,,,, +岡山,岡山,Gangshan,,,,, +橋頭,橋頭,Qiaotou,,,,, +燕巢,燕巢,Yanchao,,,,, +田寮,田寮,Tianliao,,,,, +阿蓮,阿蓮,Alian,,,,, +路竹,路竹,Luzhu,,,,, +湖內,湖內,Hunei,,,,, +旗山,旗山,Qishan,,,,, +美濃,美濃,Meinong,,,,, +六龜,六龜,Liugui,,,,, +甲仙,甲仙,Jiaxian,,,,, +杉林,杉林,Shanlin,,,,, +內門,內門,Neimen,,,,, +茂林,茂林,Maolin,,,,, +桃源,桃源,Taoyuan,,,,, +那瑪夏,那瑪夏,Namaxia,,,,, +永和,永和,Yonghe,,,,, +新店,新店,Xindian,,,,, +土城,土城,Tucheng,,,,, +蘆洲,蘆洲,Luzhou,,,,, +五股,五股,Wugu,,,,, +坪林,坪林,Pinglin,,,,, +平溪,平溪,Pingxi,,,,, +烏來,烏來,Wulai,,,,, +豐原,豐原,Fengyuan,,,,, +東勢,東勢,Dongshi,,,,, +后里,后里,Houli,,,,, +神岡,神岡,Shengang,,,,, +新社,新社,Xinshe,,,,, +石岡,石岡,Shigang,,,,, +外埔,外埔,Waipu,,,,, +大肚,大肚,Dadu,,,,, +新營,新營,Xinying,,,,, +鹽水,鹽水,Yanshui,,,,, +白河,白河,Baihe,,,,, +後壁,後壁,Houbi,,,,, +麻豆,麻豆,Madou,,,,, +下營,下營,Xiaying,,,,, +六甲,六甲,Liujia,,,,, +官田,官田,Guantian,,,,, +大內,大內,Danei,,,,, +佳里,佳里,Jiali,,,,, +學甲,學甲,Xuejia,,,,, +西港,西港,Xigang,,,,, +新化,新化,Xinhua,,,,, +新市,新市,Xinshi,,,,, +安定,安定,Anding,,,,, +玉井,玉井,Yujing,,,,, +楠西,楠西,Nanxi,,,,, +南化,南化,Nanhua,,,,, +左鎮,左鎮,Zuozhen,,,,, +仁德,仁德,Rende,,,,, +歸仁,歸仁,Guiren,,,,, +關廟,關廟,Guanmiao,,,,, +龍崎,龍崎,Longqi,,,,, +永康,永康,Yongkang,,,,, +北,北,North,,,,, +林園,林園,Linyuan,,,,, +茄萣,茄萣,Qieding,,,,, +永安,永安,Yong'an,,,,, +彌陀,彌陀,Mituo,,,,, +梓官,梓官,Ziguan,,,,, +淡水,淡水,Tamsui,,,,, +瑞芳,瑞芳,Ruifang,,,,, +林口,林口,Linkou,,,,, +三芝,三芝,Sanzhi,,,,, +八里,八里,Bali,,,,, +大甲,大甲,Dajia,,,,, +北門,北門,Beimen,,,,, +安南,安南,Annan,,,,, +蘆竹,蘆竹,Luzhu,,,,, +龜山,龜山,Guishan,,,,, +復興,復興,Fuxing,,,,, +東,東,East,,,,, +西,西,West,,,,, +達仁,達仁,Daren,,,,, +大武,大武,Dawu,,,,, +關山,關山,Guanshan,,,,, +海端,海端,Haiduan,,,,, +香山,香山,Xiangshan,,,,, +礁溪,礁溪,Jiaoxi,,,,, +玉里,玉里,Yuli,,,,, +卓溪,卓溪,Zhuoxi,,,,, +頭份,頭份,Toufen,,,,, +清水,清水,Qingshui,,,,, +南,南,South,,,,, +安平,安平,Anping,,,,, +中西,中西,West Central,,,,, +大溪,大溪,Daxi,,,,, +八德,八德,Bade,,,,, +桃園,桃園,Taoyuan,,,,, +大園,大園,Dayuan,,,,, +楊梅,楊梅,Yangmei,,,,, +七堵,七堵,Qidu,,,,, +仁愛,仁愛,Ren'ai,,,,, +信義,信義,Xinyi,,,,, +中正,中正,Zhongzheng,,,,, +中山,中山,Zhongshan,,,,, +安樂,安樂,Anle,,,,, +三峽,三峽,Sanxia,,,,, +鶯歌,鶯歌,Yingge,,,,, +中和,中和,Zhonghe,,,,, +樹林,樹林,Shulin,,,,, +深坑,深坑,Shenkeng,,,,, +板橋,板橋,Banqiao,,,,, +石碇,石碇,Shiding,,,,, +新莊,新莊,Xinzhuang,,,,, +泰山,泰山,Taishan,,,,, +三重,三重,Sanchong,,,,, +雙溪,雙溪,Shuangxi,,,,, +貢寮,貢寮,Gongliao,,,,, +汐止,汐止,Xizhi,,,,, +萬里,萬里,Wanli,,,,, +金山,金山,Jinshan,,,,, +石門,石門,Shimen,,,,, +苓雅,苓雅,Lingya,,,,, +三民,三民,Sanmin,,,,, +新屋,新屋,Xinwu,,,,, +觀音,觀音,Guanyin,,,,, +北竿,北竿,Beigan,,,,, +東引,東引,Dongyin,,,,, +烈嶼,烈嶼,Lieyu,,,,, +旗津,旗津,Qijin,,,,, +長濱,長濱,Changbin,,,,, +豐濱,豐濱,Fengbin,,,,, +霧峰,霧峰,Wufeng,,,,, +大里,大里,Dali,,,,, +烏日,烏日,Wuri,,,,, +中,中,Central,,,,, +南屯,南屯,Nantun,,,,, +西屯,西屯,Xitun,,,,, +北屯,北屯,Beitun,,,,, +潭子,潭子,Tanzi,,,,, +萬華,萬華,Wanhua,,,,, +松山,松山,Songshan,,,,, +大同,大同,Datong,,,,, +士林,士林,Shilin,,,,, +北投,北投,Beitou,,,,, +花蓮,花蓮,Hualien,,,,, +新城,新城,Xincheng,,,,, +善化,善化,Shanhua,,,,, +山上,山上,Shanshang,,,,, +北斗,北斗,Beidou,,,,, +田尾,田尾,Tianwei,,,,, +金沙,金沙,Jinsha,,,,, +金湖,金湖,Jinhu,,,,, +柳營,柳營,Liuying,,,,, +東山,東山,Dongshan,,,,, +七股,七股,Qigu,,,,, +將軍,將軍,Jiangjun,,,,, +鼓山,鼓山,Gushan,,,,, +左營,左營,Zuoying,,,,, +中壢,中壢,Zhongli,,,,, +寶山,寶山,Baoshan,,,,, +恆春,恆春,Hengchun,,,,, +太平,太平,Taiping,,,,, +鳳林,鳳林,Fenglin,,,,, +萬榮,萬榮,Wanrong,,,,, +龍潭,龍潭,Longtan,,,,, +平鎮,平鎮,Pingzhen,,,,, +南港,南港,Nangang,,,,, +內湖,內湖,Neihu,,,,, +金寧,金寧,Jinning,,,,, +金城,金城,Jincheng,,,,, +尖石,尖石,Jianshi,,,,, +泰安,泰安,Tai'an,,,,, +和平,和平,Heping,,,,, +縣,縣,County,,,,, +鄉,鄉,Township,,,,, +鎮,鎮,Town,,,,, +市,市,City,,,,, +區,區,District,,,,, \ No newline at end of file diff --git a/assets/translations/weather_station_names.csv b/assets/translations/weather_station_names.csv new file mode 100644 index 000000000..2e5eaac0d --- /dev/null +++ b/assets/translations/weather_station_names.csv @@ -0,0 +1,818 @@ +key,zh-Hant,en,ja,ko,ru,vi,zh-Hans +466850,五分山雷達站,Wufenshan,,,,, +466881,新北,New Taipei,,,,, +466900,淡水,Tamsui,,,,, +466910,鞍部,Anbu,,,,, +466920,臺北,Taipei,,,,, +466930,竹子湖,Zhuzihu,,,,, +466940,基隆,Keelung,,,,, +466950,彭佳嶼,Pengjiayu,,,,, +466990,花蓮,Hualien,,,,, +467050,新屋,Xinwu,,,,, +467080,宜蘭,Yilan,,,,, +467110,金門,Kinmen,,,,, +467270,田中,Tianzhong,,,,, +467280,後龍,Houlong,,,,, +467290,古坑,Gukeng,,,,, +467300,東吉島,Dongjidao,,,,, +467350,澎湖,Penghu,,,,, +467410,臺南,Tainan,,,,, +467420,永康,Yongkang,,,,, +467441,高雄,Kaohsiung,,,,, +467480,嘉義,Chiayi,,,,, +467490,臺中,Taichung,,,,, +467530,阿里山,Alishan,,,,, +467540,大武,Dawu,,,,, +467550,玉山,Yushan,,,,, +467571,新竹,Hsinchu,,,,, +467590,恆春,Hengchun,,,,, +467610,成功,Chenggong,,,,, +467620,蘭嶼,Lanyu,,,,, +467650,日月潭,Sun Moon Lake,,,,, +467660,臺東,Taitung,,,,, +467790,墾丁雷達站,Kenting,,,,, +467990,馬祖,Matsu,,,,, +12J990,口湖工作站,Kouhu Branch Station,,,,, +12Q970,東港工作站,Donggang Branch,,,,, +12Q980,恆春工作站,Hengchun Branch,,,,, +42HA10,萬大發電廠,Wanta Hydro,,,,, +72AI40,桃改樹林分場,Shulin Sub-station Of Taoyuan ARES,,,,, +72C440,桃園農改場,,,,,, +72D080,桃改五峰分場,Wufeng Sub-station Of Taoyuan ARES,,,,, +72D680,桃改新埔分場,Sinpu Sub-station Of Taoyuan ARES,,,,, +72G600,臺中農改場,Ta Tsun,,,,, +72HA00,中改埔里分場,Puli Sub-station Of Taichung ARES,,,,, +72K220,南改斗南分場,Dounan Sub-station Of Tainan ARES,,,,, +72M360,南改義竹分場,Yichu Sub-station Of Tainan ARES,,,,, +72M700,南改鹿草分場,Lucao Sub-station Of Tainan ARES,,,,, +72N100,臺南農改場,Tainan,,,,, +72N240,七股研究中心,Qigu Research Center,,,,, +72Q010,高雄農改場,Pingtung,,,,, +72S200,東改班鳩分場,Banjuou Sub-station Of Taitung ARES ,,,,, +72S590,東改賓朗果園,Binlung Orchard Sub-station Of Taitung ARES ,,,,, +72T250,花蓮農改場,Gi An,,,,, +72U480,花改蘭陽分場,Lanyang Sub-station Of Hualien ARES,,,,, +72V140,高改旗南分場,Chinan Sub-station Of Kaohsiung ARES,,,,, +82A750,茶改北部分場,North Branch Of TBRS,,,,, +82C160,茶改場,Tea And Beverage Research Station,,,,, +82H320,茶改中部分場,Middle Branch Of TRES,,,,, +82H840,茶改南部分場,South Branch Of TBRS,,,,, +82S580,茶改東部分場,East Branch Of TBRS,,,,, +A2C560,農工中心,,,,,, +A2K360,水試臺西試驗場,Taixi Experimental Fishing Ground,,,,, +A2K630,臺大雲林校區,Yunlin Branch Of NTU,,,,, +A2N290,臺南蘭花園區,Taiwan Orchid,,,,, +B2E890,畜試北區分所,North Branch Of TLRI,,,,, +B2N890,畜產試驗所,Hsin Hua,,,,, +B2Q810,畜試南區分所,South Branch Of TLRI,,,,, +B2U990,畜試東區分所,East Branch Of TLRI,,,,, +C2A540,四堵,Sihdu,,,,, +C2A560,福山,Fushan,,,,, +C2A650,火燒寮,Huoshaoliao,,,,, +C2A660,瑞芳,Rueifang,,,,, +C2A880,福隆,Fulong,,,,, +C2A920,富貴角,Fugueijiao,,,,, +C2C410,中央大學,Ncu,,,,, +C2D720,關西工作站,Guanxi Experiment Station,,,,, +C2D730,寶山農場,Baoshan Farm,,,,, +C2D740,屯原,Tunyuan,,,,, +C2E520,大湖,Dahu,,,,, +C2E540,龍溪,Longxi,,,,, +C2E880,三義,Sanyi,,,,, +C2E970,八甲,Bajia,,,,, +C2F000,大肚,Dadu,,,,, +C2F860,梨山,Lishan,,,,, +C2F930,大甲,Dajia,,,,, +C2F990,摩天嶺,Motianling,,,,, +C2F9A0,中竹林,Zhongzhulin,,,,, +C2FA00,烏石坑,Wushihkeng,,,,, +C2FB50,出雲,Chuyun,,,,, +C2FB60,頭櫃山,Touguishan,,,,, +C2G640,鹿港,Lukang,,,,, +C2G840,北斗,Beidou,,,,, +C2G870,芳苑,Fangyuan,,,,, +C2G980,田頭村,Toutian Village,,,,, +C2G9A0,畜試所彰化,Changhua Branch Of TLRI,,,,, +C2H950,中寮,Zhongliao,,,,, +C2H9D0,三隻寮,Sanziliao,,,,, +C2H9E0,國姓南港,Guoxing Nangang,,,,, +C2H9F0,柑林,Ganlin,,,,, +C2H9G0,百勝,Bosheng,,,,, +C2H9H0,苗改南投蜂場,Nantou Bee Farm Of Miaoli TARI,,,,, +C2H9J0,中台,Zhongtai,,,,, +C2H9L0,馬烈霸,Malieba,,,,, +C2H9M0,發祥,Faxiang,,,,, +C2H9N0,仁愛東眼,Renaidong,,,,, +C2H9P0,伊拿谷,Yinagu,,,,, +C2H9Q0,北東眼山,Beidongyanshan,,,,, +C2H9R0,卓社,Zhuoshe,,,,, +C2H9S0,龍南,Longnan,,,,, +C2H9T0,名間竹圍,Mingjianzhuwei,,,,, +C2H9U0,鳳鵬,Fengpeng,,,,, +C2H9W0,大坪頂農水,Dapingding Station,,,,, +C2I090,鳳凰,Fenghuang,,,,, +C2K240,草嶺,Caoling,,,,, +C2K610,草嶺石壁,Caolingshibi,,,,, +C2K620,馬光農場,Maguang Organic Agriculture Circular Park,,,,, +C2K630,荷苞,Hebao,,,,, +C2M410,馬頭山,Matoushan,,,,, +C2M620,瑞里,Ruili,,,,, +C2M910,嘉義大學,Chiayi University,,,,, +C2M920,朴子農改,Pozi DARES,,,,, +C2M930,石卓,Shizhuo,,,,, +C2M940,日野賀,Riyehe,,,,, +C2M950,太和,Taihe,,,,, +C2M960,外寮,Wailiao,,,,, +C2M970,碧湖,Bihu,,,,, +C2N160,西拉雅風管處,Siraya NSAH,,,,, +C2O810,曾文,Cengwen,,,,, +C2O930,玉井,Yujing,,,,, +C2O950,安南,Annan,,,,, +C2R170,屏東,Pingdong,,,,, +C2R970,屏科大,National Pingtung University,,,,, +C2V250,甲仙,Jiaxian,,,,, +C2V260,月眉,Yuemei,,,,, +C2V310,美濃,Meinong,,,,, +C2W030,金門農試所,Kimmann,,,,, +C2W230,畜試所澎湖,Penghu Field Area Of TLRI,,,,, +CAG100,王功漁港,Wanggong Fishing Port,,,,, +CAH030,茶改場竹圍站,TRES Chuwei Station,,,,, +CAJ050,海口故事園區,Haikou Story Camping Park,,,,, +CAL110,布袋國中,Budai Junior High School,,,,, +CAN130,水試所海水繁養殖中心,Mariculture Research Center,,,,, +CAN140,六官養殖協會,Liuguan Aquaculture,,,,, +CAQ030,崎峰國小,Cifong Elementary School,,,,, +E2H360,蓮華池,Lienhuchih,,,,, +E2HA20,林試畢祿溪站,Pilushi,,,,, +E2K600,四湖植物園,Sihu Botanical Garden,,,,, +E2P980,林試六龜中心,Lioukuei Research Center ,,,,, +E2P990,林試扇平站,Shanping,,,,, +E2S960,林試太麻里2,Taimalee2,,,,, +E2S980,林試太麻里1,Taimalee Research Center 1,,,,, +G2AI50,關渡,Guandu,,,,, +G2F820,農試所(霧峰),Taichung,,,,, +G2L020,農試嘉義分所,Chiayi Sub-station Of TARI,,,,, +G2M350,農試溪口農場,Xikou Farm Of TARI,,,,, +G2P820,農試鳳山分所,Fengshan Tropical Horticultural Of TARI,,,,, +K2E360,苗栗農改場,,,,,, +K2E710,苗改生物防治研究中心,Biological Control Branch Of Miaoli TARI,,,,, +K2F750,種苗改良場,Shin She,,,,, +U2H480,溪頭,Hsi Tou,,,,, +U2HA30,臺大和社,NTU Exfohoshe,,,,, +U2HA40,臺大內茅埔,NTU Exfoneimoupu,,,,, +U2HA50,臺大竹山,NTU Experimental Forest,,,,, +V2C250,八德合作社,Bade Cooperative,,,,, +V2C260,八德蔬果,Bade Fruit And Vegetable,,,,, +V2K610,大庄合作社,Dazhuang Cooperative,,,,, +V2K620,麥寮合作社,Mailiao Cooperative,,,,, +C0A520,山佳,Shanjia,,,,, +C0A530,坪林,Pinglin,,,,, +C0A550,泰平,Taiping,,,,, +C0A570,桶後,Tonghou,,,,, +C0A640,石碇,Shihding,,,,, +C0A770,科教館,Science Education Center ,,,,, +C0A860,大坪,Daping,,,,, +C0A870,五指山,Wujhihshan,,,,, +C0A890,雙溪,Shuangsi,,,,, +C0A931,三和,Sanhe,,,,, +C0A940,金山,Jinshan,,,,, +C0A950,鼻頭角,Bitoujiao,,,,, +C0A970,三貂角,Sandiaojiao,,,,, +C0A980,社子,Shezih,,,,, +C0A9C0,天母,Tianmu,,,,, +C0A9F0,內湖,Neihu,,,,, +C0AC40,大屯山,Datunshan,,,,, +C0AC60,三峽,Sanshia,,,,, +C0AC70,信義,Xinyi,,,,, +C0AC80,文山,Wenshan,,,,, +C0ACA0,新莊,Xinzhuang,,,,, +C0AD10,八里,Bali,,,,, +C0AD30,蘆洲,Lujhou,,,,, +C0AD40,土城,Tucheng,,,,, +C0AD50,鶯歌,Yingge,,,,, +C0AG80,中和,Zhonghe,,,,, +C0AH00,汐止,Xizhi,,,,, +C0AH10,永和,Yonghe,,,,, +C0AH30,五分山,Wufengshan,,,,, +C0AH40,平等,Pingdeng,,,,, +C0AH50,林口,Linkou,,,,, +C0AH70,松山,Songshan,,,,, +C0AH80,深坑,Shenkeng,,,,, +C0AH90,福山植物園,Fushan Botanical Garden,,,,, +C0AI00,五股,Wugu,,,,, +C0AI10,屈尺,Quchi,,,,, +C0AI20,白沙灣,Baishawan,,,,, +C0AI30,三重,Sanchong,,,,, +C0AI40,石牌,Shipai,,,,, +C0AJ20,野柳,Yehliou,,,,, +C0AJ30,淡水觀海,Danshuei Guanhai,,,,, +C0AJ40,石門,Shimen,,,,, +C0AJ50,水湳洞,Shuinandong,,,,, +C0AJ60,六塊厝,Lioukuaitsuo,,,,, +C0AJ70,田寮,Tianliao,,,,, +C0AJ80,板橋,Banchiao,,,,, +C0AJ90,澳底,Aodi,,,,, +C0AK10,太平里,Taiping Vil.,,,,, +C0AK30,硬漢嶺,Yinghanling,,,,, +C0B010,七堵,Qidu,,,,, +C0B020,基隆嶼,Keelung Islet,,,,, +C0B040,大武崙,Dawulun,,,,, +C0B050,八斗子,Badouzi,,,,, +C0B060,暖暖,Nuannuan,,,,, +C0C460,復興,Fuxing,,,,, +C0C480,桃園,Taoyuan,,,,, +C0C490,八德,Bade,,,,, +C0C590,觀音,Guanyin,,,,, +C0C620,蘆竹,Luzhu,,,,, +C0C630,大溪,Dasi,,,,, +C0C650,平鎮,Pingjhen,,,,, +C0C660,楊梅,Yangmei,,,,, +C0C670,龍潭,Longtan,,,,, +C0C680,龜山,Guishan,,,,, +C0C700,中壢,Zhongli,,,,, +C0C710,大溪永福,Yongfu Daxi,,,,, +C0C720,竹圍,Jhuwei,,,,, +C0C730,中大臨海站,Jhongda Coastal Station,,,,, +C0C740,觀音工業區,Guanyin Industrial Area,,,,, +C0C750,新興坑尾,Sinsingkengwei,,,,, +C0C790,東眼山,Dongyanshan,,,,, +C0C800,四稜,Sileng,,,,, +C0D360,梅花,Meihua,,,,, +C0D430,峨眉,Emei,,,,, +C0D480,打鐵坑,Datiekeng,,,,, +C0D540,橫山,Hengshan,,,,, +C0D550,雪霸,Xueba,,,,, +C0D560,竹東,Zhudong,,,,, +C0D580,寶山,Baoshan,,,,, +C0D590,新豐,Sinfong,,,,, +C0D650,湖口,Hukou,,,,, +C0D660,新竹市東區,Dongqu Hsinshu City,,,,, +C0D670,海天一線,Haitianyisian,,,,, +C0D680,香山濕地,Siangshan Wetland,,,,, +C0D690,外湖,Waihu,,,,, +C0D700,關西,Guanxi,,,,, +C0D750,樂山林道6k,Leshan 6k,,,,, +C0D760,大坪苗圃,Daping Nurserygarden,,,,, +C0E420,竹南,Jhunan,,,,, +C0E430,南庄,Nanzhuang,,,,, +C0E550,明德,Mingde,,,,, +C0E570,白沙屯,Baishatun,,,,, +C0E590,通霄,Tongxiao,,,,, +C0E610,馬都安,Madu-An,,,,, +C0E730,頭份,Toufen,,,,, +C0E740,造橋,Zaoqiao,,,,, +C0E750,苗栗,Miaoli,,,,, +C0E780,銅鑼,Tongluo,,,,, +C0E791,卓蘭,Zhuolan,,,,, +C0E810,西湖,Xihu,,,,, +C0E820,獅潭,Shitan,,,,, +C0E830,苑裡,Yuanli,,,,, +C0E850,大河,Dahe,,,,, +C0E870,高鐵苗栗,THSR Miaoli,,,,, +C0E910,海埔,Haipu,,,,, +C0E920,通霄漁港,Tongsiao Fishing Harbor,,,,, +C0E930,龍鳳,Longfong,,,,, +C0E940,雪見,Shiuejian,,,,, +C0E950,松安,Songan,,,,, +C0E960,觀霧分站,Guanwu,,,,, +C0F0A0,雪山圈谷,Xueshanjuangu,,,,, +C0F0B0,石岡,Shigang,,,,, +C0F0C0,中坑,Zhongkeng,,,,, +C0F0D0,審馬陣,Shenmazhen,,,,, +C0F0E0,南湖圈谷,Nanhuquangu,,,,, +C0F850,東勢,Dongshi,,,,, +C0F970,大坑,Dakeng,,,,, +C0F9I0,神岡,Shengang,,,,, +C0F9K0,大安,Da-An,,,,, +C0F9L0,后里,Houli,,,,, +C0F9M0,豐原,Fengyuan,,,,, +C0F9N0,大里,Dali,,,,, +C0F9O0,潭子,Tanzi,,,,, +C0F9P0,清水,Qingshui,,,,, +C0F9Q0,外埔,Waipu,,,,, +C0F9R0,龍井,Longjing,,,,, +C0F9S0,烏日,Wuri,,,,, +C0F9T0,西屯,Xitun,,,,, +C0F9U0,南屯,Nantun,,,,, +C0F9V0,新社,Xinshe,,,,, +C0F9X0,大雅(中科園區),Daya,,,,, +C0F9Y0,桃山,Taoshan,,,,, +C0F9Z0,雪山東峰,Xueshandongfeng,,,,, +C0FA10,松柏,Songbai,,,,, +C0FA20,溫寮,Wunliao,,,,, +C0FA30,梧棲,Wuqi,,,,, +C0FA40,臺中電廠,Taichung?Power Plant,,,,, +C0FA50,霧峰,Wufeng,,,,, +C0FA60,鞍馬山工作站,Anmashan Office,,,,, +C0FA70,大雪山埡口,Dashiueshan Yakou,,,,, +C0FA80,小雪山天池,Shiaushiueshan Tianchr,,,,, +C0FA90,小雪山林道,Shiaushiueshan,,,,, +C0FB00,大雪山,Dashiueshan,,,,, +C0FB10,出雲山苗圃,Chuyunshan,,,,, +C0FB20,雪山橋,Shiueshanchiau,,,,, +C0FB30,八仙山苗圃,Bashianshan,,,,, +C0FB40,中橫21.6k,Chungheng 21.6k,,,,, +C0FB70,大甲溪埔,"Dajia, Xipu",,,,, +C0G620,芬園,Fenyuan,,,,, +C0G650,員林,Yuanlin,,,,, +C0G660,溪湖,Xihu,,,,, +C0G720,溪州,Xizhou,,,,, +C0G730,二林,Erlin,,,,, +C0G740,大城,Dacheng,,,,, +C0G770,福興,Fuxing,,,,, +C0G780,秀水,Xiushui,,,,, +C0G800,埔鹽,Puyan,,,,, +C0G810,埔心,Puxin,,,,, +C0G820,田尾,Tianwei,,,,, +C0G830,埤頭,Pitou,,,,, +C0G860,社頭,Shetou,,,,, +C0G880,二水,Ershui,,,,, +C0G890,伸港,Shenggang,,,,, +C0G900,線西,Xianxi,,,,, +C0G910,花壇,Huatan,,,,, +C0G920,永靖,Yongjing ,,,,, +C0G940,竹塘,Zhutang,,,,, +C0G950,防潮門,Fangchaomen,,,,, +C0G960,福寶,Fubao,,,,, +C0G970,三豐,Sanfong,,,,, +C0G9B0,和美,Hemei,,,,, +C0H890,埔里,Puli,,,,, +C0H960,草屯,Caotun,,,,, +C0H990,昆陽,Kunyang,,,,, +C0H9A0,神木村,Shenmu Village,,,,, +C0H9C0,合歡山,Hehuan Mountain,,,,, +C0I010,廬山,Lushan,,,,, +C0I080,信義,Xinyi,,,,, +C0I110,竹山,Zhushan,,,,, +C0I360,水里,Shuili,,,,, +C0I370,魚池,Yuchi,,,,, +C0I380,集集,Jiji,,,,, +C0I390,仁愛,Ren'Ai,,,,, +C0I410,名間,Mingjian,,,,, +C0I420,國姓,Guoxing,,,,, +C0I460,南投,Nantou,,,,, +C0I480,梅峰,Meifeng,,,,, +C0I490,萬大林道,Wandalindao,,,,, +C0I520,玉山風口,Yushanfengkou,,,,, +C0I530,小奇萊,Xiaoqilai,,,,, +C0I540,奇萊稜線,Qilailengxian,,,,, +C0K250,崙背,Lunbei,,,,, +C0K280,四湖,Sihu,,,,, +C0K291,宜梧,Yiwu,,,,, +C0K330,虎尾,Huwei,,,,, +C0K390,土庫,Tuku,,,,, +C0K400,斗六,Douliu,,,,, +C0K410,北港,Beigang,,,,, +C0K420,西螺,Xiluo,,,,, +C0K430,褒忠,Baozhong,,,,, +C0K440,二崙,Erlun,,,,, +C0K450,大埤,Dapi,,,,, +C0K460,斗南,Dounan,,,,, +C0K470,林內,Linnei,,,,, +C0K480,莿桐,Citong,,,,, +C0K500,元長,Yuanchang,,,,, +C0K510,水林,Shuilin,,,,, +C0K530,臺西,Taixi,,,,, +C0K550,蔦松,Niaosong,,,,, +C0K560,棋山,Qishan,,,,, +C0K580,高鐵雲林,THSR Yunlin,,,,, +C0K590,雲林東勢,"Dongshi, Yunlin County",,,,, +C0K600,箔子寮,Bozihliao,,,,, +C0M520,東後寮,Donghouliao,,,,, +C0M530,奮起湖,Fenqihu,,,,, +C0M640,中埔,Zhongpu,,,,, +C0M650,朴子,Puzi,,,,, +C0M660,溪口,Xikou,,,,, +C0M670,大林,Dalin,,,,, +C0M680,太保,Taibao,,,,, +C0M690,水上,Shuishang,,,,, +C0M700,竹崎,Zhuqi,,,,, +C0M710,東石,Dongshi,,,,, +C0M720,番路,Fanlu,,,,, +C0M730,嘉義市東區,Dongqu Chiayi City,,,,, +C0M740,六腳,Liujiao,,,,, +C0M750,布袋,Budai,,,,, +C0M760,民雄,Minxiong,,,,, +C0M770,嘉義梅山,Meishan Chiayi County,,,,, +C0M780,鹿草,Lucao,,,,, +C0M790,新港,Xingang,,,,, +C0M800,茶山,Chashan,,,,, +C0M810,里佳,Lijia,,,,, +C0M820,達邦,Dabang,,,,, +C0M850,表湖,Biaohu,,,,, +C0M860,新美,Shinmei,,,,, +C0M880,好美里,Haomeili,,,,, +C0N010,鯤鯓國小,Kunshen Elementary School,,,,, +C0N020,城西,Chengsi,,,,, +C0N030,四草,Sihtsao,,,,, +C0N040,蘆竹溝,Lujhugou,,,,, +C0N050,蚵寮,Eliao,,,,, +C0O830,北寮,Beiliao,,,,, +C0O840,王爺宮,Wangyegong,,,,, +C0O860,大內,Danei,,,,, +C0O900,善化,Shanhua,,,,, +C0O960,崎頂,Qiding,,,,, +C0O970,虎頭埤,Hutoupi,,,,, +C0O980,新市,Xinshi,,,,, +C0O990,媽廟,Mamiao,,,,, +C0R100,尾寮山,Weiliaoshan,,,,, +C0R130,阿禮,Ali,,,,, +C0R140,瑪家,Majia,,,,, +C0R150,三地門,Sandimen,,,,, +C0R160,鹽埔,Yanpuxinwei,,,,, +C0R190,赤山,Chishan,,,,, +C0R220,潮州,Chaojhou,,,,, +C0R240,來義,Laiyi,,,,, +C0R260,春日,Chunri,,,,, +C0R270,琉球嶼,Liouciouyu,,,,, +C0R280,檳榔,Binlang,,,,, +C0R320,車城,Checheng,,,,, +C0R341,牡丹,Mudan,,,,, +C0R350,貓鼻頭,Maobitou,,,,, +C0R440,大漢山,Dahanshan,,,,, +C0R470,高樹,Gaoshu,,,,, +C0R480,長治,Changzhi,,,,, +C0R490,九如,Jiuru,,,,, +C0R520,崁頂,Kanding,,,,, +C0R540,佳冬,Jiadong,,,,, +C0R550,新埤,Xinpi,,,,, +C0R560,新園,Xinyuan,,,,, +C0R570,麟洛,Linluo,,,,, +C0R580,南州,Nanzhou,,,,, +C0R590,里港,Ligang,,,,, +C0R600,舊泰武,Jiutaiwu,,,,, +C0R620,墾雷,Kenlei,,,,, +C0R640,東港,Donggang,,,,, +C0R650,竹田,Zhutian,,,,, +C0R660,枋寮,Fangliao,,,,, +C0R670,楓港,Fenggang,,,,, +C0R680,佳樂水,Jialeshui,,,,, +C0R690,墾丁,Kenting,,,,, +C0R700,枋山,Fangshan,,,,, +C0R710,龍磐,Longpan,,,,, +C0R720,旭海,Xuhai,,,,, +C0R730,大坪頂,Dapingding,,,,, +C0R741,獅子,Shizi,,,,, +C0R750,四林格山,Silingeshan,,,,, +C0R760,南仁湖,Nanrenhu,,,,, +C0R770,保力,Baoli,,,,, +C0R780,滿州,Manzhou,,,,, +C0R790,九棚,Jiupeng,,,,, +C0R800,丹路,Danlu,,,,, +C0R810,內獅,Neishi,,,,, +C0R820,白鷺,Bailu,,,,, +C0R830,高士,Gaoshi,,,,, +C0R840,牡丹池山,Mudanchisahn,,,,, +C0R850,林邊,Linbian,,,,, +C0R860,鼻頭,Bitou,,,,, +C0R870,興海,Singhai,,,,, +C0R880,後壁湖,Houbihu,,,,, +C0R890,山海,Shanhai,,,,, +C0R900,竹坑,Jhukeng,,,,, +C0R910,下寮,Sialiao,,,,, +C0R920,塭仔,Wunzai,,,,, +C0R930,萬丹,Wandan,,,,, +C0R940,加祿堂,Jialutang,,,,, +C0R950,萬隆國小,Wanlongguoxiao,,,,, +C0R960,內埔,Neipu,,,,, +C0S660,下馬,Xiama,,,,, +C0S690,太麻里,Taimali,,,,, +C0S700,知本,Jhihben,,,,, +C0S710,鹿野,Luye,,,,, +C0S730,綠島,Ludao,,,,, +C0S740,池上,Chihshang,,,,, +C0S750,向陽,Siangyang,,,,, +C0S760,紅石,Hongshih,,,,, +C0S770,大溪山,Dasishan,,,,, +C0S790,金崙,Jinlun,,,,, +C0S810,東河,Donghe,,,,, +C0S830,長濱,Changbin,,,,, +C0S840,南田,Nantian,,,,, +C0S890,關山,Guanshan,,,,, +C0S900,蘭嶼高中,Lanyu High School,,,,, +C0S910,蘭嶼燈塔,Lanyu Lighthouse,,,,, +C0S920,金峰嘉蘭,Jialan Jinfeng,,,,, +C0S930,延平,Yanping,,,,, +C0S940,石寧山,Shiningshan,,,,, +C0S950,七塊厝,Qikuaicuo,,,,, +C0S960,香蘭,Xianglan,,,,, +C0S970,加津林,Jiajinlin,,,,, +C0S980,勝林山,Shenglinshan,,,,, +C0S990,山豬窟,Shanzhuku,,,,, +C0SA00,歷坵,Liqiu,,,,, +C0SA10,檳榔四格山,Binlangsigeshan,,,,, +C0SA20,金崙山,Jinlunshan,,,,, +C0SA30,都歷,Duli,,,,, +C0SA40,瑞和,Ruihe,,,,, +C0SA60,知本(水試所),Zhiben (FRI),,,,, +C0SA80,土坂,Tuban,,,,, +C0SA90,達仁林場,Darenlinchang,,,,, +C0SB10,美和,Meihe,,,,, +C0SB20,富岡,Fugang,,,,, +C0SB30,新蘭,Dulan Fire Brigade,,,,, +C0SB40,興隆, Xinglong,,,,, +C0SB50,叭嗡嗡,Baweng,,,,, +C0SB60,白守蓮,Baishoulian,,,,, +C0SB70,小港漁港,Xiaogang Fishing Harbor,,,,, +C0SB80,長濱漁港,Changbin Fishing Harbor,,,,, +C0T790,大禹嶺,Dayuling,,,,, +C0T820,天祥,Tianxiang,,,,, +C0T870,鯉魚潭,Liyutan,,,,, +C0T900,西林,Xilin,,,,, +C0T960,光復,Guangfu,,,,, +C0T9A0,月眉山,Yuemeishan,,,,, +C0T9B0,水源,Shuiyuan,,,,, +C0T9D0,和中,Hezhong,,,,, +C0T9E0,大坑,Dakeng,,,,, +C0T9F0,水璉,Shuilian,,,,, +C0T9G0,鳳林山,Fenglinshan,,,,, +C0T9H0,加路蘭山,Jialulanshan,,,,, +C0T9I0,豐濱,Fengbin,,,,, +C0T9M0,靜浦,Jingpu,,,,, +C0T9N0,富里,Fuli,,,,, +C0TA10,花蓮漁港,Hualien Fishing Harbor,,,,, +C0TA20,加灣,Jiawan,,,,, +C0TA30,鹽寮,Yanliao,,,,, +C0TA40,秀林,Xiulin,,,,, +C0TA50,和仁,Heren,,,,, +C0TA80,立霧山,Liwushan,,,,, +C0U520,雙連埤,Shuanglianpi,,,,, +C0U600,礁溪,Chiaoshi,,,,, +C0U650,玉蘭,Yulan,,,,, +C0U710,太平山,Taipingshan,,,,, +C0U720,南山,Nanshan,,,,, +C0U750,龜山島,Gueishandao,,,,, +C0U760,東澳,Dong-Ao,,,,, +C0U770,南澳,Nanao,,,,, +C0U780,五結,Wujie,,,,, +C0U860,頭城,Toucheng,,,,, +C0U870,大礁溪,Dajiaoxi,,,,, +C0U880,北關,Beiguan,,,,, +C0U890,三星,Sanxing,,,,, +C0U900,內城,Neicheng,,,,, +C0U910,冬山,Dongshan,,,,, +C0U940,羅東,Luodong,,,,, +C0U950,鶯子嶺,Yingziling,,,,, +C0U960,翠峰湖,Cuifenghu,,,,, +C0U970,大福,Dafu,,,,, +C0U980,坪林石牌,Shipai Pinglin,,,,, +C0U990,員山,Yuanshan,,,,, +C0UA00,土場,Tuchang,,,,, +C0UA10,鴛鴦湖,Yuanyanghu,,,,, +C0UA20,多加屯,Duojiatun,,,,, +C0UA30,白嶺,Bailing,,,,, +C0UA40,西德山,Xideshan,,,,, +C0UA50,西帽山,Ximaoshan,,,,, +C0UA60,樟樹山,Zhangshushan,,,,, +C0UA70,桃源谷,Taoyuangu,,,,, +C0UA80,大溪漁港,Dasi Fishing Harbor,,,,, +C0UA90,石城,Shihcheng,,,,, +C0UB00,淡江大學蘭陽校園,Tamkang Lanyang Campus,,,,, +C0UB10,蘇澳,Suao,,,,, +C0UB20,壯圍,Jhuangwei,,,,, +C0UB60,明池,Mingchr,,,,, +C0UB70,太平山中間站,Jhongjian,,,,, +C0UB80,翠峰林道6K,Trifong 6k,,,,, +C0UB90,太平山莊,Taipingshan Villa,,,,, +C0V210,復興,Fuxing,,,,, +C0V350,溪埔,Xipu,,,,, +C0V360,內門,Neimen,,,,, +C0V370,古亭坑,Gutingkeng,,,,, +C0V400,阿公店,Agongdian,,,,, +C0V440,鳳山,Fengshan,,,,, +C0V450,鳳森,Fengsen,,,,, +C0V490,新興,Sinsing,,,,, +C0V530,阿蓮,Alian,,,,, +C0V610,梓官,Ziguan,,,,, +C0V620,永安,Yong'An,,,,, +C0V630,茄萣,Qieding,,,,, +C0V640,湖內,Hunei,,,,, +C0V650,彌陀,Mituo,,,,, +C0V660,岡山,Gangshan,,,,, +C0V680,仁武,Renwu,,,,, +C0V690,鼓山,Gushan,,,,, +C0V700,三民,Sanmin,,,,, +C0V710,苓雅,Lingya,,,,, +C0V720,林園,Linyuan,,,,, +C0V730,大寮,Daliao,,,,, +C0V740,旗山,Qishan,,,,, +C0V750,路竹,Luzhu,,,,, +C0V760,橋頭,Qiaotou,,,,, +C0V770,大社,Dashe,,,,, +C0V790,萬山,Wanshan,,,,, +C0V800,六龜,Liugui,,,,, +C0V810,左營,Zuoying,,,,, +C0V820,小林,Xiaolin,,,,, +C0V840,鳳鼻頭,Fongbitou,,,,, +C0V850,蚵仔寮,Kezailiao,,,,, +C0V860,南寮,Nanliao,,,,, +C0V870,文安,Wunan,,,,, +C0V880,興達,Singda,,,,, +C0V890,前鎮,Chian Jhen,,,,, +C0V900,汕尾,Shanwei,,,,, +C0V910,大樹,Dashu,,,,, +C0W110,東莒,Dongju,,,,, +C0W120,西嶼,Xiyu,,,,, +C0W130,花嶼,Huayu,,,,, +C0W140,金沙,Jinsha ,,,,, +C0W150,金寧,Jinning,,,,, +C0W160,烏坵,Wuqiu,,,,, +C0W180,七美,Qimei,,,,, +C0W190,望安,Wangan,,,,, +C0W200,湖西,Husi,,,,, +C0W220,北竿,Beigan,,,,, +C0W240,九宮,Jiugong ,,,,, +C0X050,東河,Donghe,,,,, +C0X060,下營,Xiaying,,,,, +C0X080,佳里,Jiali,,,,, +C0X100,臺南市北區,Beiqu Tainan City,,,,, +C0X110,臺南市南區,Nanqu Tainan City,,,,, +C0X120,麻豆,Madou,,,,, +C0X130,官田,Guantian,,,,, +C0X140,西港,Xigang,,,,, +C0X150,安定,Anding,,,,, +C0X160,仁德,Rende,,,,, +C0X170,關廟,Guanmiao,,,,, +C0X180,山上,Shanshang,,,,, +C0X190,安平,Anping,,,,, +C0X200,左鎮,Zuozhen,,,,, +C0X210,白河,Baihe,,,,, +C0X220,學甲,Xuejia,,,,, +C0X230,鹽水,Yanshui,,,,, +C0X240,關子嶺,Guanziling,,,,, +C0X250,新營,Xinying,,,,, +C0X260,後壁,Houbi,,,,, +C0X280,將軍,Jiangjun,,,,, +C0X290,北門,Beimen,,,,, +C0X300,鹿寮,Luliao,,,,, +C0X320,柳營,Liuying,,,,, +C0Z020,明里,Mingli,,,,, +C0Z050,佳心,Jiaxin,,,,, +C0Z061,玉里,Yuli,,,,, +C0Z070,舞鶴,Wuhe,,,,, +C0Z080,富源,Fuyuan,,,,, +C0Z100,東華,Donghwa,,,,, +C0Z150,吉安光華,Guanghua Ji-An,,,,, +C0Z160,鳳林,Fenglin,,,,, +C0Z170,卓溪,Zhuoxi,,,,, +C0Z180,新城,Xincheng,,,,, +C0Z190,富世,Fushi,,,,, +C0Z200,萬榮,Wanrong,,,,, +C0Z210,瑞穗,Ruisui,,,,, +C0Z220,和平林道,Hepinglindao,,,,, +C0Z230,和平,Heping,,,,, +C0Z250,瑞穗林道,Ruisuilindao,,,,, +C0Z270,蕃薯寮,Fanshuliao,,,,, +C0Z280,德武,Dewu,,,,, +C0Z290,赤柯山,Chikeshan,,,,, +C0Z300,東里,Dongli,,,,, +C0Z310,清水斷崖,Qingshui Cliff,,,,, +C0Z320,清水林道,Qingshuilindao,,,,, +C0Z330,安通山,Antongshan,,,,, +C1A630,下盆,Siapen,,,,, +C1A750,石碇服務區,Shiding Service Area,,,,, +C1A760,坪林交控,Pinglin Traffic Control Center,,,,, +C1A9N0,四十份,Sihshihfen,,,,, +C1AC50,關渡,Guandu,,,,, +C1AI50,國三N016K,Freeway No. 3 - Rain - N016k,,,,, +C1AI60,國一39K邊坡,Freeway No. 1 - Rain – N039k,,,,, +C1C510,水尾,Shueiwei,,,,, +C1D380,新埔,Sinpu,,,,, +C1D400,鳥嘴山,Niaozueishan,,,,, +C1D410,白蘭,Bailan,,,,, +C1D420,太閣南,Taigenan,,,,, +C1D630,飛鳳山,Fei Feng Mountain,,,,, +C1D640,外坪(五指山),Waiping(Wuzhihshan),,,,, +C1E451,象鼻,Xiangbi,,,,, +C1E461,松安,Song-An,,,,, +C1E480,鳳美,Fongmei,,,,, +C1E511,新開,Xinkai,,,,, +C1E601,南勢,Nanshi,,,,, +C1E670,南礦,Nankuang,,,,, +C1E681,南勢山,Nanshishan,,,,, +C1E691,南湖,Nanhu,,,,, +C1E701,八卦,Bagua,,,,, +C1E711,馬拉邦山,Malabangshan,,,,, +C1E721,泰安,Tai-An,,,,, +C1E770,公館,Gongguan,,,,, +C1E890,國三N149K,Freeway No. 1 - Rain – N149k,,,,, +C1E900,國一N128K,Freeway No. 1 - Rain – N128k,,,,, +C1F871,上谷關,Shangguguan,,,,, +C1F891,稍來,Shaolai,,,,, +C1F911,新伯公,Xinbogong,,,,, +C1F941,雪嶺,Xueling,,,,, +C1F9B1,桐林,Tonglin,,,,, +C1F9C1,白冷,Baileng,,,,, +C1F9D1,白毛台,Baimaotai,,,,, +C1F9E1,龍安,Long-An,,,,, +C1F9F1,伯公龍,Bogonglong,,,,, +C1F9G1,慶福山,Cingfushan,,,,, +C1F9J1,清水林,Qingshuilin,,,,, +C1F9W0,德基,Deji,,,,, +C1G691,下水埔,Xiashuipu,,,,, +C1G9D0,國一S218K,Freeway No. 1 - Rain – S218k,,,,, +C1H000,翠峰,Cuifeng,,,,, +C1H840,國三N238K,Freeway No. 3 - Rain –N238k,,,,, +C1H900,清流,Qingliu,,,,, +C1H920,長豐,Changfeng,,,,, +C1H941,雙冬,Shuangdong,,,,, +C1H971,六分寮,Liufenliao,,,,, +C1H9B1,阿眉,Amei,,,,, +C1I020,萬大,Wanda,,,,, +C1I030,武界,Wujie,,,,, +C1I050,丹大,Danda,,,,, +C1I070,和社,Heshe,,,,, +C1I101,溪頭,Xitou,,,,, +C1I121,大鞍,Da-An,,,,, +C1I131,桶頭,Tongtou,,,,, +C1I140,卡奈托灣,Kanaituowan,,,,, +C1I150,青雲,Qingyun,,,,, +C1I201,中心崙,Zhongxinlun,,,,, +C1I211,蘆竹湳,Luzhunan,,,,, +C1I220,樟湖,Zhanghu,,,,, +C1I230,九份二山,Jiufen'Ershan,,,,, +C1I240,外大坪,Waidaping,,,,, +C1I250,鯉潭,Litan,,,,, +C1I260,北坑,Beikeng,,,,, +C1I280,埔中,Puzhong,,,,, +C1I290,豐丘,Fengqiu,,,,, +C1I310,西巒,Xiluan,,,,, +C1I320,奧萬大,Aowanda,,,,, +C1I330,楓樹林,Fengshulin,,,,, +C1I340,新興橋,Xinxingqiao,,,,, +C1I400,凌霄,Lingxiao,,,,, +C1I430,翠華,Cuihua,,,,, +C1I440,新高口,Xingaokou,,,,, +C1I450,望鄉山,Wangxiangshan,,,,, +C1I470,杉林溪,Shanlinxi,,,,, +C1I500,大尖山,Dajianshan,,,,, +C1I510,線浸林道,Xianjinlindao,,,,, +C1I550,國六W023K,Freeway No. 6 - Rain – W023k,,,,, +C1K540,口湖,Kouhu,,,,, +C1M390,龍美,Longmei,,,,, +C1M400,菜瓜坪,Caiguaping,,,,, +C1M480,獨立山,Dulishan,,,,, +C1M600,頭凍,Toudong,,,,, +C1M610,石磐龍,Shipanlong,,,,, +C1M640,十字,Shizi,,,,, +C1M870,國三N285K,Freeway No. 3 - Rain –N285k,,,,, +C1N001,沙崙,Shalun,,,,, +C1O850,環湖,Huanhu,,,,, +C1O870,大棟山,Dadongshan,,,,, +C1O880,關山,Guanshan,,,,, +C1O921,楠西,Nanxi,,,,, +C1O940,東山服務區,Dongshan Service Area,,,,, +C1R110,口社,Gusia,,,,, +C1R120,上德文,Shangdewun,,,,, +C1R250,力里,Lili,,,,, +C1R290,石門山,Shihmenshan,,,,, +C1R610,西大武山,Xidawushan,,,,, +C1R630,龍泉,Longquan,,,,, +C1S670,摩天,Motian,,,,, +C1S800,華源,Huayuan,,,,, +C1S820,金峰,Jinfeng,,,,, +C1S850,豐南,Funan,,,,, +C1S860,利嘉,Lichai,,,,, +C1S870,南美山,Nanmaisan,,,,, +C1S880,壽卡,Shouka,,,,, +C1SA50,利嘉林道,Lijialindao,,,,, +C1SA70,都蘭,Dulan,,,,, +C1T800,洛韶,Luoshao,,,,, +C1T810,慈恩,Ci-En,,,,, +C1T830,布洛灣,Buluowan,,,,, +C1T920,中興,Zhongxing,,,,, +C1T940,大觀,Daguan,,,,, +C1T950,太安,Tai-An,,,,, +C1T970,大農,Danong,,,,, +C1T980,龍澗,Longjian,,,,, +C1T990,高寮,Gaoliao,,,,, +C1TA00,太魯閣,Taroko,,,,, +C1U501,牛鬥,Nioudou,,,,, +C1U670,寒溪,Hanxi,,,,, +C1U840,東澳嶺,Dongaoling,,,,, +C1U850,觀音海岸,Guanyin Coast,,,,, +C1U920,思源,Siyuan,,,,, +C1U930,粉鳥林,Fenniaolin,,,,, +C1V160,達卡努瓦,Dakanuwa,,,,, +C1V170,排雲,Paiyun,,,,, +C1V190,南天池,Nantianchi,,,,, +C1V200,梅山,Meishan,,,,, +C1V220,小關山,Xiaoguanshan,,,,, +C1V231,高中,Gaozhong,,,,, +C1V300,御油山,Yuyoushan,,,,, +C1V340,大津,Dajin,,,,, +C1V390,尖山,Jianshan,,,,, +C1V570,吉東,Jiadong,,,,, +C1V580,溪南(特生中心),Xinan,,,,, +C1V590,新發,Xinfa,,,,, +C1V600,藤枝,Tengzhi,,,,, +C1V780,多納林道,Duonalindao,,,,, +C1V830,國三S383K,Freeway No. 3 - Rain – S383k,,,,, +C1X040,東原,Dongyuan,,,,, +C1Z030,紅葉,Hongye,,,,, +C1Z040,立山,Lishan,,,,, +C1Z110,三棧,Sanzhan,,,,, +C1Z120,壽豐,Shoufeng,,,,, +C1Z130,銅門,Tongmen,,,,, +C1Z140,荖溪,Laoxi,,,,, +C1Z240,中平林道,Zhongpinglindao,,,,, \ No newline at end of file diff --git a/crowdin.yml b/crowdin.yml index 3ffedf79c..2de49148f 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,7 +1,7 @@ files: - - source: /assets/translations/strings.pot + - source: /.crowdin/strings.pot translation: /assets/translations/%osx_locale%.po - - source: /assets/*.csv + - source: /.crowdin/*.csv translation: /assets/translations/%original_file_name% multilingual: 1 first_line_contains_header: 1 diff --git a/l10n.yaml b/l10n.yaml deleted file mode 100644 index 8119ecfd5..000000000 --- a/l10n.yaml +++ /dev/null @@ -1,4 +0,0 @@ -arb-dir: lib/l10n -template-arb-file: app_zh_TW.arb -output-localization-file: app_localizations.dart -synthetic-package: false \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb deleted file mode 100644 index 7de728b47..000000000 --- a/lib/l10n/app_en.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "en", - "@@context": "App level localization strings.", - "datetime_format": "MM/dd/yyyy HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "EEEE, MM/dd/yyyy", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "MM/dd/yyyy", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "Home", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "Monitor", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "Reports", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "Map", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "Me", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "Settings", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "Adjust how DPIP should function.", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "Donate", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "Follow us on Threads", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTube Livestream", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "Server Status", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "Third Party Libraries", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "M {magnitude} Depth {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "No. {reportNumber}", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "Local Earthquake", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "Web", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "Event Time", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "Location", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "Magnitude", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "Depth", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "Report Image", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "Intensity Map Image", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "Max PGA Image", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "Max PGV Image", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "Intensity in Locations", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "Language", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "Adjust display language of DPIP", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "Display language", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "Translated {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "Approved {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "Help us translate!", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "Click here to help us improve the translation of DPIP", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "Earthquake data is temporarily unavailable", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "No active earthquake warnings", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "Earthquake Early Warning", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "Earthquake Early Warning (Alert)", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "Estimated​", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "Arrive in", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "Unknown", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "Arrived", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "Sec(s)", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "Replay", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "Save", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "Image saved", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "Personalization", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "Theme", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "Adjust appearance and color of DPIP", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "Light", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "Dark", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "Follow system", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "Location", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "Location", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "Adjust your location to receive real-time weather information, estimated earthquake intensity, and estimated arrival time of seismic waves.", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "Enable Automatic Locating", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "The automatic location feature will use the GPS on your device to automatically update your location based on your geographical position, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions.", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "Not set", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "Special Municipalities/County", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "City/Town/District", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "Select Location", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "Copy FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "FCM token copied", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "May cause sea level fluctuations.", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "Stay alerted for possible tsunami threats", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "Failed to fetch earthquake report. Check connection and try again.", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "Version {version}\nBuild {buildNumber}\nMade by ExpTech Studio\nPartial Data Source: CWA", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "Source Language", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "Notification Test", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "Test the notification and sound of weather and earthquake alerts", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4.", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2.", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "Shaking detected", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "Local (Municipality/County) measured intensity is greater than 3.", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "Earthquake Prediction Warning notification", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "Earthquake Information", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "Other", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "Tsunami Warning (Alert)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "Tsunami Warning Issued\nCoastal Areas", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "Tsunami Warning (Notice)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "Tsunami Warning Issued\nExcluding Above Areas", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "When announcements are published", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "Maps", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "Radar", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "Precipitation", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "Temperature", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "Humidity", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "Pressure", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "Wind/Gust", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "Typhoon", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "Tsunami", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "Legend", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "Unit: dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "Unit: Millimeter (mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "Unit: Celsius (°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "Unit: Percentage (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "Unit: hPa", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "History", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "Historical event information within 3 days", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "No historical event information", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "Current event information", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "There is currently no event information", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "No. {serial}", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "Lightning", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "Out of service area", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "Outside the service area, only available in Taiwan", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "Unable to obtain notification permission", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "Try again", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "Unable to obtain location permission", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "Cancel", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "Sunny", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "Overcast", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "More", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "More features", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "General", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "Debug", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech Web", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "Notification History", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "Advanced features", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "Adjust the Advanced Features of DPIP", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "Earthquake Monitor", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "No Tsunami Information", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "Tsunami Warning", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "No. {id}, Update #{serial}", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "release", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "Update", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "Cancelled", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "Estimated tsunami arrival time and wave height", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "Tsunami observed in different areas", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "Time of occurrence", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "Magnitude", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "Depth", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "There are currently no events.", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "Change log", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3 Days", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2 Days", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24 Hours", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12 Hours", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6 Hours", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3 Hours", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1 Hours", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10 Minutes", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "Today", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "Welcome to DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP is an app designed by a local team in Taiwan. It integrates information from TREM-Net (Taiwan Real-time Earthquake Monitoring Network) and data from the Central Weather Administration, providing a comprehensive, unified, and convenient disaster prevention information application.", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "Next", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "Who are we?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio is a group primarily composed of students, with an average age of under 20 and more than 15 members. The members are students from northern, central, and southern Taiwan, as well as Japan, South Korea, and China.", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "Our Original Intention", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "The original intention was to recruit a group of students interested and skilled in computers and technology. It later expanded beyond the school and gradually developed into its current form.", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "Notice", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP will relay various information from ExpTech and the Central Weather Administration, Taiwan. Please note the following points when using it.", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "All information should be considered authoritative only if it is consistent with what the Central Weather Administration has announced.", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "Due to factors such as network conditions, server performance, application issues, and the status of our data providers, there may be times when you do not receive information. We will do our best to prevent this from happening, but we cannot guarantee uninterrupted service.", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "There's a chance that you will feel strong shaking before you receive the alert.", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "Earthquake Early Warnings are estimates based on quick calculations and could be significantly inaccurate. Users should be aware of this and use the information judiciously.", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "Any action that is not officially approved could lead to legal consequences. It's essential to follow all applicable rules and regulations.", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "Permissions", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "We advocate for the privacy of all users.", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "Notifications", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "When a natural disaster occurs, notifications are used to transmit disaster prevention information.", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "Automatically updates your location settings to provide real-time disaster alerts for your current area.", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "Used for saving visualized data from CWA and ExpTech.", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "Disagree", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "Agree", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "DPIP offers a strong earthquake monitoring service powered by TREM from ExpTech Studio. Please carefully review the following terms and conditions and select whether to enable this service.", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "The real-time earthquake intensity displayed in DPIP is not official and may be different from their measurements. You should rely on the information released by the Central Weather Administration.", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "The Earthquake Monitor is owned wholly by ExpTech Studio, and is not affiliated with the CWA. Please do not forward complaints or suggestions to the CWA, to avoid causing disturbances.", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "The Earthquake Monitor uses TREM (Taiwan Real-time Earthquake Monitoring) to monitor nationwide seismic activity, as a real-time seismic intensity display service. When an earthquake occurs, changes in color of monitor stations can be used to monitor the propagation of seismic waves.", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "The constant background noise from traffic, factories, construction, and other sources can cause the seismograph's color to change even when there's no real shake. Also, since the data is updated live, we can't always tell right away if there's a problem with the seismograph itself, so the color change can also be a hardware malfunction.", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "In June 2022, TREM-Net (TREM Earthquake Observation Network) began to record earthquake data across Taiwan through two observation networks, namely SE-Net (Strong Shock Observation Network Accelerometer) and MS-Net (Weak Shock Observation Network Speedometer).", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "New version available", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "Please update to the latest version for the best experience", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "Current", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "Latest", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "Update Now", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "Skip", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "Update Complete", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP just Finished Updating, Want to look at the Update Log now?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "Remind me later", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "Take me there", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "Announcements", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "Do you want to check out the New Announcement?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "No Announcements", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "Contributors", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "Unable to load the Change Log, Please Retry Later.", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "No update logs", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "Announcement Details", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "Version Details", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "Unable to get Permission", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "An error occurred while saving the image", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "Confirm", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "No search results", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "Always Allow", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "Always", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "For better experience with DPIP, please give the \"Auto Start\" Permission to let us set your Local Information.", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "For better experience when using DPIP, you need to Enable the Permission for \"Auto Start\" to make sure DPIP is getting the info normally.", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "Auto Start Permission", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "For a better experience, please give permission for location access to allow for DPIP to automatically set background location information.", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "For better experience when using DPIP, you need to Enable the Permission for \"Auto Start\" to make sure DPIP is getting the info Normally.", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "Disable Power Saving", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "You have notification permissions declined. Please go to your device settings and enable notifications for this app.", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "Autostart permission had been denied, please go to System Settings to allow it.", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "Power Saving Policy has been denied, please move to Setting Allowed Permissions.", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "Permission request", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "Users need to manually go to settings to enable relevant permissions.", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "Location not set", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP needs your Location to work. Click \"Go to Settings\" to set up your location and try again.", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "Go to Settings", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "App Log", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "An error occurred while copying FCM Token", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "Estimated intensity legend", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "Only for earthquake emergency reporting", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5-", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5+", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6-", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6+", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "Lightning to ground within 5 minutes", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "Lightning to ground within 10 minutes", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "Lightning to ground within 30 minutes", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "Lightning to ground within 60 minutes", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "Lightning in the clouds in 5 minutes", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "Lightning in the clouds in 10 minutes", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "Lightning in the clouds in 30 minutes", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "Lightning in the clouds in 60 minutes", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "Abnormal", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "Network connection or server abnormality.", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "Retry", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "Please go to the application settings to find and allow the \"Photos and Media\" permission and try again.", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "There is currently no notification history", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "Emergency", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "Notification details", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "Notification sending area", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "Emergency notifications", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "General Notifications", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "Please enable notifications for DPIP in your system settings and try again.", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "Please go to the application settings to find and allow the \"Location\" permission and try again.", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "No data available", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "This page presents an overview of the server status during each period. The raw data is updated every 5 seconds, and a condensed version is shown here to optimize network usage. Please note that this information is for reference only, and the actual situation should be subject to the announcement.", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "All normal", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "All exceptions", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "Partial exception", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "Normal", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "Unstable", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "No data", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "Foreground Auto-locating", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "{lat_abs}º S", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "{lat}º N", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "{lon_abs}º W", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "{lon}º E", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "Delay: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "What the devs want to say", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "About", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "Alerted Area", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "Estimated", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "Time of Occurrence", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "Unable to access Earthquake Monitor", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "Please enable the Earthquake Monitor in Advanced Features in Settings.", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "Click to view information", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "Highest", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "Lowest", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (Disabled)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "Introduction", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "Firstly, I'd like to thank all the users, and to everyone in the development team, I'd like to express my most sincere gratitude.", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP is an application that aims to be a center for disaster prevention-related information, and we hope it can become an invaluable asset to everyone's daily lives. Although the application's development is not complete, we continue to work towards this goal.", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "In developing this application, we invested a lot of money, time and effort, with over $500,000NTD spent on staff costs, equipment costs, cloud services, network fees and other expenditures. Thus, we wish to be able to have the support of our users, by continuing to maintain operations without the use of third-party companies.", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "Monetization Model", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "To sustain the development of our app, our team has had numerous in-depth discussions about how to monetize it. We've explored various options, searching for a suitable monetization model. We found that most similar software adopts in-app advertisements. This led us to initially consider this approach as our primary monetization method.", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "Monetization is Tough", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "We conducted a survey to gauge the public's willingness to pay for such an app. We discovered that most people generally lack a strong sense of disaster preparedness and are unlikely to spend money on it. Our backend data supports this finding. Statistics show that only about one in 100,000 users actively contribute financially. This made in-app advertisements seem like the most viable solution.", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "Why do we not have advertisements?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "During a disaster, the last thing people want to see is an ad. This is the primary reason we've decided against in-app advertisements. For a disaster prevention app, delivering accurate and timely information is paramount. If ads hinder users from accessing critical disaster information, it would directly contradict our mission. Additionally, communication quality is often poor during disasters, and wasting precious data on ad loading is simply frustrating.", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "Charging Users?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "If in-app advertisements aren't feasible, what about charging users? Should we turn it into a paid app?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "First of all, as a disaster prevention app, our goal is to reach as many people as possible. Moreover, those who truly need this app may not have the extra funds to pay for it. We want to help as many people as possible. Secondly, as developers, we want our app to have a wide user base. Charging users would directly reduce the user base.", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "How Do We Monetize?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "In conclusion, we hope to cultivate a community of individuals who are interested in disaster prevention and value this kind of app. We invite these users to support our development efforts and join us in making a difference.", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP Founder's Message", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "Announcement Retrieval Error", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "Slow down!", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "It seems like you're going a bit too fast. Please take a moment and try again later.", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "OK", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "Error: Unable to retrieve FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "There's an error occurred while retrieving notification history.\nPlease try again later.", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "For optimal auto-location service performance, DPIP requires enabling notification permissions.", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "For optimal auto-location service performance, DPIP requires enabling location service permissions.", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "Location Permissions", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "For a better automatic locating experience, please grant DPIP the \"{permissionType}\" on Location permission so it can continuously update your location in the background.", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "Auto-locating requires granting {permissionType} to operate in the background.", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "Error:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "Precipitation", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "Nationwide", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "Welcome screen", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "Help us maintain server stability and development.", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "Max Intensity", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "All", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "Filter", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "Reset", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "Apply", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "End of list", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "Event Time", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "Valid until", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "Affected Area", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "Emergency Earthquake Early Warning (Critical)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "Emergency Earthquake Early Warning", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "Emergency Earthquake Early Warning (Silent)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1.", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "Earthquake Early Warning (Critical)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "Local (City/Town/District) estimated intensity is greater than 4.", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "Earthquake Early Warning", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "Local (City/Town/District) estimated intensity is greater than 2.", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "Earthquake Early Warning (Silent)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "Local (City/Town/District) estimated intensity is greater than 1.", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "Intensity Report", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "Local (City/Town/District) measured intensity is greater than 3.", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "Intensity Report (Silent)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "Local (City/Town/District) measured intensity is greater than 1.", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "Earthquake Monitor", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "Earthquake Report", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "Earthquake Report (Silent)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "Local (Municipality/County) measured intensity is greater than 1.", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "Weather Warning", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "Heavy Rain Advisory", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "Weather Advisory", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "Local (City/Town/District) Thunderstorm Advisory or Mountain Area Heavy Rain Advisory Issued", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "Local (City/Town/District) Red Severe Weather Advisory Issued", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "Local (City/Town/District) Severe Weather Advisory Issued Excluding Above Areas", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "Disaster Information", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "Evacuation Advisory", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "When a critical evacuation notice is issued for the current location (City/Town/District)", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "When a minor evacuation notice is issued for the current location (City/Town/District)", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "Tsunami Report (Silent)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "According to the tsunami warning issued by the PTWC, which is\nassessed by CWA that it may cause public concern.", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "Other Notifications", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "Critical", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "Sunny With Haze", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "Sunny With Mist", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "Sunny with lightning", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "Sunny with fog", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "Sunny drizzle", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "Sunny with sleet", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "Sunny with heavy snow", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "Sunny with snowdrops", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "Sunny with ice pellets", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "Sunny with snow showers", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴陣雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "Sunny with hail", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "Sunny with thunderstorm", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "Sunny with severe thunderstorm", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "Sunny with thundery and hail", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "Sunny with thunder", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "Cloudy", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "Cloudy with haze", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "Cloudy with mist", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "Cloudy with lighting", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "Cloudy with fog", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "Cloudy with rain", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "Cloudy with sleet", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "Cloudy with heavy snow", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "Cloudy with snowdrops", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "Cloudy with ice beads", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "Cloudy with snow showers", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "Cloudy with rain and snow showers", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "Cloudy with hail", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "Cloudy with thunderstorm", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "Cloudy with thunder and snow", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "Cloudy with thunder and hail", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "Cloudy with thunderstorm", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "Cloudy with heavy thunder and hail", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "Cloudy with thunder", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "Overcast with haze", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "Overcast with mist", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "Overcast with lighting", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "Overcast with fog", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "Overcast with rain", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "Overcast with rain and snow", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "Overcast with heavy snow", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "Overcast with snow beads", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "陰有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "陰有陣雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "陰陣雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "陰有雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "陰有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "陰有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "陰有雷雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "陰大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "陰大雷雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "Cloudy with thunder.", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "Error in retrieving weather data", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "Average", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "Radar synthetic echo", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "Dismissed", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "Active", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "To save images, DPIP requires \"Photos and Media\" permissions.", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "Error in saving images.", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "An error has occurred.", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(Final Report)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "Set location", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM Observation Network Measured Intensity", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "JMASIS Standard (0.3-sec 3D accel)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "The data presented is automatically generated by TREM-Net and has not undergone human review or verification. It is intended for preliminary emergency response reference only. Please refer to CWA for official information.", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "No available data to display.", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH:00", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "Leaderboard", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "Data time: {time}\n{ranked_length} weather stations", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "According to", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "Descending", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "Ascending", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "Scope", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "Save", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24 Hour {type} Trend", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "Disable Power Saving", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "Allow DPIP to run continuously in the background for instant disaster notification information.", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "Automatic start-up", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "Allow DPIP to run continuously in the background for instant disaster notification information.", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb deleted file mode 100644 index 8bdd1623d..000000000 --- a/lib/l10n/app_ja.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "ja", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "ホーム", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "強震モニタ", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "地震情報", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "地図", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "アプリ情報", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "設定", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "DPIPの動作を調整", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "寄付する", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "Threadsでフォロー", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTubeライブ配信", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "サーバーステータス", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "サードパーティライブラリ", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "M {magnitude} 深さ {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "ID #{reportNumber} の顕著な地震", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "局地地震", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "地震情報", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "発生時刻", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "震源地", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "マグニチュード", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "深さ", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "地震情報図", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "震度分布図", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "地動最大加速度", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "地動最大速度", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "各地の震度", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "言語", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "DPIPの言語を変更する", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "表示言語", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "翻訳済み {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "校正済み {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "翻訳を協力", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "DPIPの翻訳を改善する", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "最新の緊急地震速報が取得できません", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "緊急地震速報が発表されていません", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "地震速報", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "緊急地震速報", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "現在地の予想", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "到達まで", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "不明", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "到達", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "秒", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "リプレイ", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "保存", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "保存しました", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "個人用", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "テーマ", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "DPIPの外観と色を変更する", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "ライト", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "ダーク", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "システムのテーマに従う", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "位置", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "現在地", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "現在地を変更して、リアルタイムの天気情報や地震情報を取得する", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "自動で位置情報を取得する", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "この機能はデバイスのGPSを使用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "未設定", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "都道府県", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "市町村", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "現在地を選択", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "FCMトークンをコピー", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "FCMトークンをコピーしました", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "この地震により若干の海面変動があります", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "この地震により津波発生のおそれがあります。今後の情報にご注意ください。", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "地震情報取得中にエラーが発生しました。ネットワークの状態をご確認の上、再度お試しください。", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "バージョン {version}\nビルド番号 {buildNumber}\n製作:ExpTech Studio\n一部の情報源:CWA(中央気象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "元言語", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "通知テスト", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "リアルタイム雨雲レーダーと緊急地震速報で効果音テスト", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "予想最大震度が5弱以上かつ\n現在地(町村)の予想震度が4以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "予想最大震度が5弱以上かつ\n現在地(町村)の予想震度が2以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "揺れを検出", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "現在地(都道府県)の実測震度が3以上", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "緊急地震速報の効果音", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "地震情報", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "その他", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "津波警報(警報)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "沿岸地域(町村)に居るときに\n津波警報が発表された場合", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "津波警報(注意)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "沿岸地域以外に居るときに\n津波警報が発表された場合", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "お知らせが送信された場合", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "地図リスト", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "レーダー", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "降水量", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "気温", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "湿度", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "気圧", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "風向・風速", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "台風", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "津波情報", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "凡例", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "単位:dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "単位:ミリメートル (mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "単位:セルシウス度 (℃)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "単位:相対湿度(%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "単位:ヘクトパスカル (hPa)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "履歴", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3日以内の履歴のイベント情報", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "履歴の無いイベント情報", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "現在の地震イベント", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "現在イベント情報はありません", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "第 {serial} 報", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "落雷", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "サービスエリア外", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "台湾以外ではご利用いただけません", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "データが取得できません", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "再試行", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "位置情報が取得できません", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "キャンセル", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "晴れ", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "曇り", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "詳細", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "その他の機能リスト", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "一般", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "デバッグ", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 公式", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "通知履歴", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "高度な機能", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "DPIPの高度な機能の調整", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "リアルタイム震度モニタ(台湾)の有効化", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "最近の津波情報なし", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "津波警報", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "ID #{id} 第{serial}報", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "發布", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "更新", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "解除", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "津波の到達予想時刻と波高", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "各地で観測された津波", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "発生日時", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "マグニチュード", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "深さ", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "何も起こらず順調です。", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "更新履歴", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3日間", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2日間", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24時間", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12時間", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6時間", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3時間", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1時間", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10分間", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "今日", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "DPIPへようこそ", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "防災情報プラットフォーム", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIPは台湾の現地チームによって設計されたアプリです。TREM-Net(台湾リアルタイム地震観測網)の情報と台湾中央氣象署(CWA)のデータを統合し、便利な防災情報アプリを提供します。", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "次へ", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "私たちは誰?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studioは、15人以上の学生で構成される、平均年齢20歳以下のグループです。台湾(北部、中部、南部)、日本、韓国、中国出身のメンバーで構成されます。", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "私たちの初心", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "コンピューターやテクノロジーに興味と能力のある学生を集めるために学校内で設立されましたが、その後校外に発展し、徐々に現在の形になりました。", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "注意事項", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIPでは、ExpTechや台湾中央氣象署(CWA)からの様々な情報をお届けします。ご利用の際には以下の点にご留意ください。", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "いかなる情報も、台湾中央氣象署(CWA)が発表した内容に基づいています。", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "ネットワークの状態、サーバーの状態、アプリケーションの状態、上流のデータソースの状態などにより、情報が届かない可能性があります。そのような事態が発生しないよう最善を尽くしますが、保証はいたしかねます。", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "通知よりも先に強い揺れが到達する可能性があります。", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "地震情報は速報的な計算の結果であり、大きな誤差が生じる可能性があるため、注意深く理解して利用する必要があります。", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "公的に認可されていない行為は、中華民国(台湾)の法律により、リスクを伴う可能性がありますので、必ず関連法規を遵守してください。", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "権限", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "私たちは常にユーザーの側に立ち、プライバシーの保護に継続的に取り組んでいます。", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "通知", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "大規模災害発生時に通知を通じてリアルタイムの防災情報を伝達します", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "位置情報を使用して現在地設定を自動更新し、現地のリアルタイム防災情報を提供します", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "台湾中央氣象署またはExpTechが提供する画像を保存する", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "同意しない", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "同意する", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "DPIPアプリ上では、ExpTech社のTREMによる強震監視サービスをご利用いただけます。サービスをご利用になるには、以下の契約条項をよくお読みになり、同意していただく必要があります。", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "表示されるリアルタイムの震度は、中央気象署(CMA)が提供する情報ではなく、最終的には中央気象署が発表する情報に従うべき観測結果とは一致しない可能性があります。", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "強震モニタで使用している観測点はExpTechが所有しており、中央気象署(CWA)の管理下ではありません。中央気象署に故障やコメントを送信することは迷惑となりますので、行わないでください。", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "強震モニターはTREM(台湾リアルタイム地震モニタ)を用いて、台湾全体の振動を観測します。リアルタイムの地震度表示機能として、地震が発生した際には、観測点の色の変化を通じて地震波の伝播状況を観察することができます。", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "正常な状態でも、日常的なノイズ(車、工場、工事など)により観測点の色が変化することがあります。また、観測点の故障によっても色が変わることがあります。データはリアルタイムで提供されるため、その場で故障の有無を判断することはできません。", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022年6月上旬に、台湾全土で観測点の配備を開始しました。TREM-Net(TREM地震観測網)は、SE-Net(強震観測網「加速度計」)とMS-Net(微震観測網「速度計」)の2つの観測網から構成され、地震時の様々なデータをまとめて記録します。", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "新しいバージョンが見つかりました", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "最新バージョンにアップデートして、最高の体験をお楽しみください", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "現在のバージョン", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "新しいバージョン", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "今すぐ更新", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "スキップ", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "更新完了", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIPが更新されました、変更履歴をご覧になりますか?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "後で", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "表示する", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "お知らせ", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "新しいお知らせを確認しますか?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "現在、お知らせがありません", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "貢献者", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "変更履歴を読み込めませんでした。", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "変更履歴はありません。", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "お知らせの詳細", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "バージョン情報", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "権限がありません", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "画像の保存中にエラーが発生しました", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "確認", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "検索結果なし", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "常に許可", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "永遠に", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "より良いオートロケーションを体験するには、「自動起動許可」を指定し、DPIPがバックグラウンドで自動的に現在地を設定するように、オートアクティベーションの許可を与える必要があります。", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "DPIPをより良く使用するには、バックグラウンドでの実行を許可し、いつでもDPIPからの通知を適切に受信できるようにしてください。", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "自動起動許可", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "より良いオートロケーションを体験するためには、「制限のない」を指定し、DPIPがバックグラウンドで自動的に現在地を設定することを許可する必要があります。", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "DPIPをより良く使用するには、「制限のない」を指定し、バックグラウンドでDPIPからの通知を適切に受信できるようにしてください。", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "低電力モード", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "通知機能が拒否されている場合は、設定ページに移動し、通知許可を設定してください。", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自動起動の権限がありません。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省電力ポリシーが拒否されました。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "権限管理請求", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "ユーザーは手動で設定ページに移動、関連する権限を有効にする必要があります。", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "現在地が設定されていません", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIPを正しく動作させるには、現在地を設定する必要があります。「設定ページに移動」をタップして、現在地を設定し、再度お試しください。", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "設定ページに移動", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "アプリログ", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "FCMトークンのコピー中にエラーが発生しました", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "予想震度の凡例", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "緊急地震速報が発表された場合のみ", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5弱", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5強", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6弱", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6強", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "5分間以内の対地放電(落雷)", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10分間以内の対地放電(落雷)", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30分間以内の対地放電(落雷)", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "1時間以内の対地放電(落雷)", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5分間以内の雲放電", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10分間以内の雲放電", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30分間以内の雲放電", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "1時間以内の雲放電", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "異常", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "ネットワーク接続またはサーバーの異常。", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "再試行", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "アプリケーションの設定で 「写真と動画」の権限を探して許可したうえで、もう一度試してください。", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "通知記録なし", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "緊急", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "通知の詳細情報", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "通知の送信地域", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "緊急通知", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "一般通知", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "アプリケーションの設定で 「通知」の許可を探して許可し、もう一度試してください。", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "アプリケーションの設定で 「位置」の許可を探して許可し、もう一度試してください。", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "情報なし", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "このページでは、様々な時間におけるサーバーの状態の概要を示します。生データは5秒ごとに更新されますが、ここではネットワーク利用を最適化するために凝縮したものを表示しています。この情報はあくまで参考情報であり、実際のステータスはアナウンスに基づいてください。", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "全て正常", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "全て異常", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "部分的な異常", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "正常", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "不安定", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "データ無し", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "前景オートロケーション", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "南緯{lat_abs}度", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "北緯 {lat} 度", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "西経 {lon_abs} 度", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "東経 {lon} 度", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "遅延: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "開発者からのメッセージ", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "情報", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警報地域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "予想最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "発生", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "リアルタイム震度モニタが無効です", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "設定の「高度な機能」で、リアルタイム震度モニタを有効にしてください。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "Tipsはこちら", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": "(未使用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "紹介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "まずはじめに、このソフトウェアをダウンロードしてくださったすべてのユーザーの皆様に、開発チーム一同、心より感謝申し上げます。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIPは、あらゆる防災情報を統合して発信し、人々の生活に溶け込むことを目指したソフトウェアです。このソフトウェアはまだまだ未完成であり、開発に当たっては困難もありますが、目標に向かって努力を続けていく所存です。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "当ソフトウェアの開発には、人件費、設備費、クラウドサービス・ネットワーク費用など、合計50万ニュー台湾ドル以上の費用に加え、膨大な時間、労力を費やしてきました。そのためにも、ユーザーの皆様のご支持をいただき、他社に依存することなく運営を継続していきたいと考えております。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "収益モデル", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "アプリの開発を続けるため、私たちのチームは、採算をとる方法について何度も激論を交わしました。多くの選択肢の中から適切な収益モデルを模索しました。その結果、同種のソフトの多くが広告によって採算をとっていることがわかり、一時はこの方式を採算方式として採用することも検討しました。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "利益を上げる困難", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "人々の意識を調査したところ、一般的に防災に対する意識は低く、防災のためにお金を使う可能性はさらに低いことがわかりました。バックエンドのデータがこの主張を裏付けています。統計的に、熱心なスポンサーの数はユーザー全体の10万人に1人程度であり、ますます、広告を埋め込むことが最良の解決策であるように思えました。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "なぜ広告を使わないのか?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "災害が起きた時、広告を見たい人は絶対にいません。これが広告を出さない第一の理由です。防災に特化したソフトは、防災情報を早く正確に届けることが第一です。広告によって正しい防災情報が得られなくなるとしたら、それは私たちの理念に反します。さらに、通信品質が低下することが多い災害時に、広告を読み込むために通信量を浪費するのは悔しいことです。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "一般の人々に課金するのはどうだろう?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "広告を挿入してもうまくいかないなら、一般の人々に課金するのはどうだろう?有料ソフトにする?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "まず、防災情報ソフトとして、できるだけ多くの人に防災情報を届けたい。また、余計な出費ができない人も含め、できるだけ多くの人を助けたい。そして、開発者としては、できるだけ多くの人に使ってもらいたい。\n一方で、有料化は利用意欲の低下に直結し、これらの目標に反します。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "どうすれば利益を上げられるのか?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "まとめると、防災に興味を持ち、大切にしてくれる人を育て、ソフト開発をサポートし、ともに前進していきたいという考えです。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIPの開発者が言いたいこと", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "お知らせ取得中にエラーが発生しました:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "無効な操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作間隔が短すぎるため、後で再試行してください。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "OK", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "エラー:FCMトークンを取得できません", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "通知記録取得中にエラーが発生しました", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自動的に現在地を設定する機能を使用するには、DPIPに通知権限を許可する必要があります。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自動的に現在地を設定する機能を使用するには、DPIPに位置情報の取得を許可する必要があります。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "ロケーション許可", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "より良いオートロケーションを体験するには、「{permissionType}」を指定し、DPIPがバックグラウンドで自動的に現在地を設定するように、オートアクティベーションの許可を与える必要があります。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自動的に現在地を設定する機能を使用するには、「{permissionType}」を指定し、許可を付与する必要があります。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "エラー:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全国(台湾)", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "ようこそ", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "安定したサーバーの維持と長期的な発展にご協力ください", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "すべて", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "フィルター", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "初期化", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "適用する", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "一番下にスクロール", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "発表時刻", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有効期限", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "被害地域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "緊急地震速報(重大な通知)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "緊急地震速報(一般な通知)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "緊急地震速報(サイレント通知)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "予想最大震度が5弱以上かつ\n現在地(町村)の予想震度が1以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "緊急地震速報 (重大な通知)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "現在地(町村)の予想震度が4以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "緊急地震速報 (一般な通知)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "現在地(町村)の予想震度が2以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "緊急地震速報 (サイレント通知)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "現在地(町村)の予想震度が1以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般な通知)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "現在地(町村)の実測震度が3以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(サイレント通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "現在地(町村)の実測震度が1以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "地震モニタ(一般な通知)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震情報(一般な通知)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震情報(サイレント通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "現在地(都道府県)の実測震度が1以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "気象警報", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "リアルタイムの雷雨情報", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天気警報・特報", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "現在地(町村)にリアルタイム雷雨情報や山間部の暴雨が発表された場合", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "現在地(町村)に赤信号の気象警報が発令された場合", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "現在地(町村)に上記以外の気象警報は発令されている", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "防災情報", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避難情報", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "現在地(町村)に避難勧告が発表された場合", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "現在地(町村)に避難情報が発表された場合", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "PTWC津波情報 (通知音なし)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "PTWCによって津波情報が発表された場合", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "その他の通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大な通知", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "晴れと煙霧", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴れと靄", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴れと落雷", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴れと霧", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴れと雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴れと霙", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴れと大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴れと雪の玉", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴れと氷の玉", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴れ時々雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴れ時々みぞれ", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴れと雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴れと雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴れと雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴れと雷と雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴れと大きな雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴れと大きな雷と雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴れと雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "雲の多い", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "雲の多いと煙霧", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "雲の多いと靄", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "雲の多いと落雷", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "雲の多いと霧", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "雲の多いと雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "雲の多いと霙", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "雲の多いと大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "雲の多いと雪の玉", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "曇り時々みぞれ", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "曇り時々雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "曇り時々雨か雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "雲の多いと雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "雲の多いと雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "雲の多いと雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "雲の多いと雷と雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "雲の多いと大きな雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "雲の多いと大きな雷と雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "曇り時々雷雨", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "曇り空と煙霧", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "曇り空と靄", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "曇り空と落雷", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "曇り空と霧", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "曇り空と雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "曇り空と霙", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "曇り空と大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "曇り空と雪の玉", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "曇り空と氷の玉", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "曇り時々雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "曇り時々雨か雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "曇り空と雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "曇り空と雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "曇り空と雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "曇り空と雷と雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "曇り空と大きな雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "曇り空と大きな雷と雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "曇り空と雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "天気の取得に失敗しました", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "合成レーダー", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "終了済", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "有効中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "写真を保存するには、DPIPが正しく機能するために、写真とメディアの使用許可を許可する必要があります。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "画像の保存中にエラーが発生しました:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "エラーが発生した:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最終報)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1級", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2級", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3級", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4級", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7級", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "タップして現在地を設定する", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 観測点における実測震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "日本気象庁(JMA)震度階級(0.3秒3成分合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "この情報はTREM-Netの自動観測結果から得られたものであり、目視による検証は行っていません。実際の結果は、台湾中央氣象署(CWA)から発表される情報を参照してください。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "表示する有効なデータがない", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH時間", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "ランキング", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "資料時間:{time}\n合計 {ranked_length} 観測点", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "並び順", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "降順", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "昇順", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "統合する", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "保存", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24時間{type}のトレンド", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "低電力モード", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "DPIPをバックグラウンドで実行し、災害情報通知を即座に入手できるようにする。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自動起動", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "デバイスの再起動やシャットダウン後でもDPIPが自動的に起動し、継続的に防災通知情報を入手することができるようにする。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb deleted file mode 100644 index a796933b5..000000000 --- a/lib/l10n/app_ko.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "ko", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "홈", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "강진 모니터", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "지진 보고", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "지도", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "사용자", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "설정", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "DPIP의 동작을 조정합니다.", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "저희에게 후원해주세요.", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "Threads 팔로우", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "Youtube 생방송", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "서버 상태", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "서드파티 라이브러리 라이선스", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "규모 {magnitude} 깊이 {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "ID {reportNumber} 의 현저한 유감 지진", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "소구역 유감 지진", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "보고서 페이지", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "발생 시각", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "위치", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "지진의 규모", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "진원 깊이", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "지진 보고", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "진도", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "최대 지반 가속도", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "최대 지반 속도", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "각지의 진도", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "언어", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "DPIP의 표시 언어 조정", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "표시 언어", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "번역 완료 {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "검토 완료 {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "번역 돕기", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "여기를 눌러 DPIP 번역 개선을 도와주세요", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "일시적으로 지진 속보를 받을 수 없습니다", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "현재 발생 중인 지진 속보가 없습니다", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "지진 속보", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "긴급 지진 속보", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "예상 진도", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "지진파", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "알 수 없음", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "도달", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "초 후 도달", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "다시보기", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "이미지 저장", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "이미지 저장 완료", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "개인 설정", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "테마 색", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "DPIP 전체의 외관과 색상을 조정합니다", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "밝은", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "어두운", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "시스템 테마 따르기", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "위치", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "현재 위치", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "현재 위치를 조정하여 실시간 날씨 정보, 지진 예상 진도 및 지진파 도착 예상 시간을 수신하세요", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "자동 위치 지정 사용", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "자동 위치 지정 기능은 장치의 GPS를 사용하여 지리적 위치를 기반으로 위치를 자동으로 업데이트하고, 실시간 날씨 및 지진 정보를 제공하여 항상 최신 현지 상황을 파악할 수 있도록 합니다.", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "설정되지 않음", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "현·시", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "향·진", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "위치 선택", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "FCM Token 복사", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "FCM Token이 복사되었습니다", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "지진으로 해수면 변동 가능성 있음.", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "지진으로 쓰나미 가능성, 정보 주의.", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "지진 보고서를 가져오는 중 오류가 발생했습니다. 네트워크 상태를 확인한 후 다시 시도해 주세요.", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "버전 {version}\n빌드 번호 {buildNumber}\n제작 Exptech 디스커버리 테크놀로지\n부분 출처 CWA (중앙 기상청)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "출처 언어", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "알림 테스트", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "실시간 날씨 정보, 지진 속보 등의 음성 알림을 테스트하다", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "최대진도 5약 이상과\n소재지(향ㆍ진) 예상 진도 4 이상", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "최대진도 5약 이상과\n소재지(향ㆍ진) 예상 진도 2 이상", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "흔들림이 감지되었습니다", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "소재지(향ㆍ진) 실측 진도 2 이상", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "지진 속보 효과음", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "지진정보", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "기타", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "쓰나미 경보 (경보)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "쓰나미 경보 발령시\n해역 부근의 향ㆍ진", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "쓰나미 경보 (주의)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "쓰나미 경보 발령 시\n이하 제외 지역", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "공지사항 전송 시", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "지도 목록", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "레이더", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "강우", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "기온", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "습도", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "기압", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "풍향/풍속", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "태풍", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "쓰나미 정보", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "범례", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "단위: dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "단위: 밀리미터 (mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "단위: 섭씨 (°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "단위: 상대 습도 (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "단위: 헥토파스칼 (hPa)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "이력", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3일간의 이벤트 정보", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "과거 이벤트 정보 없음", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "현재 이벤트 정보", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "현재 이벤트 정보 없음", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "제 {serial} 보", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "번개", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "서비스 불가 지역", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "서비스 불가 지역, 대만 국내에서만 이용 가능합니다.", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "알림 권한을 얻을 수 없습니다.", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "다시 시도해 주세요.", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "위치 권한을 얻을 수 없습니다.", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "취소", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "맑음", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "흐림", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "더보기", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "더 많은 기능", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "일반", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "디버그", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 공식 웹사이트", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "푸시 알림 기록", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "고급 기능", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "DPIP 의 고급 기능 조정", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "강진 모니터링 활성화", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "최근에 쓰나미 정보가 없습니다.", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "쓰나미 경보", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "ID{id} 제{serial}보", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "발표됨", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "갱신", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "해제", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "예상 쓰나미 도착 시간 및 파고", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "각지에서 관측된 쓰나미", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "발생 시각", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "규모", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "깊이", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "모든 것이 평안합니다.", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "업데이트 로그", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3일", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2일", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24시간", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12시간", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6시간", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3시간", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1시간", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10분", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "오늘", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "DPIP에 오신 것을 환영합니다", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "방재정보 플랫폼", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀이 설계한 앱입니다.", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "다음 단계", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "저희에 관하여", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio는 대부분 학생으로 구성된 팀으로, 평균 연령이 20세 이하이며, 15명 이상의 인원이 참여하고 있습니다. 멤버들은 대만 북부, 중부, 남부, 일본, 한국, 중국의 학생들로 구성되어 있습니다.", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "우리의 목표", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다.", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "주의사항", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP는 ExpTech 및 대만 기상청으로부터 다양한 정보를 전달하므로, 다음 사항의 유의하여 사용하십시오.", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "모든 정보는 대만 기상청에서 발표한 내용을 기준으로 합니다.", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등 여러 요인에 따라 정보를 수신되지 않을 가능성이 있으며, 이를 방지하기 위해 최선을 다하겠지만 발생하지 않을 것이라고 보장하지는 않습니다.", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "강한 진동이 알림보다 사용자 위치에 먼저 도착할 가능성이 있습니다.", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "지진 속보는 빠른 계산 결과로, 상당한 오차가 있을 수 있으니 이해하고 신중히 사용해 주세요.", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "공식적으로 인정되지 않은 모든 행위는 법적 위험을 부담할 수 있으므로 관련 규범을 준수해야 합니다.", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "권한", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다.", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "알림", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "중대 재해 발생 시 알림으로 즉각 방재 정보를 전달합니다.", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다.", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "동의하지 않음", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "동의", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "DPIP 에서 ExpTech의 TREM 강진 모니터링 서비스를 확인할 수 있습니다. 아래 조건을 자세히 읽고 활성화 여부를 선택하세요.", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "표시된 실시간 진도는 대만 기상청에서 제공한 자료가 아니므로 대만 기상청에서 관측한 결과와 일치하지 않을 수 있으며, 대만 기상청에서 발표한 정보를 기준으로 삼아야 합니다.", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "지진 모니터에서 사용하는 지진계는 ExpTech 소유이며, 대만 기상청의 관리하에 있지 않습니다. 대만 기상청에 고장이나 의견을 전달하지 말아 주세요. 이로 인해 기상청에 불편을 초래할 수 있습니다.", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "지진 모니터는 TREM(대만 즉시 지진 모니터링)에서 대만 전역의 현재 진동을 관측하여 실시간 진도 표시 기능을 제공합니다. 지진 발생 시에는 스테이션의 색상 변화를 통해 지진파 전파 상황을 관찰할 수 있습니다.", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "일상적인 잡음(자동차, 공장, 건설 등) 때문에 평소에도 스테이션의 색상이 변할 수 있습니다. 또한, 실시간 데이터이기 때문에 현재로서는 고장 여부를 판단할 수 없으므로, 지진계 고장으로 인해 색상이 변할 수도 있습니다.", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022년 6월 초부터 대만 전역에 지진계를 배치하기 시작했습니다. TREM-Net(TREM 지진관측망)은 SE-Net(강진 관측망 '가속도계')과 MS-Net(미세 진동 관측망 '속도계')의 두 개의 관측 네트워크로 구성되어 있으며, 지진 발생 시 다양한 데이터를 기록합니다.", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "새 버전 발견", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "최상의 경험을 위해 최신 버전으로 업데이트하기", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "현재 버전", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "최신 버전", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "지금 업데이트", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "지금은 건너뛰기", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "업데이트 완료", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP가 업데이트가 완료되었습니다. 업데이트 로그를 보러 가시겠습니까?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "나중에 보기", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "보기로 이동", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "공지", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "새로운 공지가 있습니다. 확인하러 가시겠습니까?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "현재 공지가 없습니다.", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "기여자", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "업데이트 로그를 불러올 수 없습니다. 나중에 다시 시도해 주세요.", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "현재 업데이트 로그가 없습니다.", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "구체적인 공지 사항", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "버전 세부정보", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "권한을 얻을 수 없습니다.", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "이미지를 저장하는 동안 오류가 발생했습니다.", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "확인", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "검색결과가 없습니다", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "모두 허용", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "항상", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "더 나은 자동 위치 추적 경험을 위해, DPIP가 백그라운드에서 자동으로 위치 정보를 설정할 수 있도록 '자동 실행 권한'을 부여해야 합니다.", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "더 나은 DPIP 경험을 위해, DPIP가 백그라운드에서 정상적으로 경고 알림을 수신할 수 있도록 '자동 실행 권한'을 부여해야 합니다.", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "자동 실행 권한", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "더 나은 자동 위치 추적 경험을 위해, DPIP가 백그라운드에서 자동으로 위치 정보를 설정할 수 있도록 '위치' 권한을 항상 허용해야 합니다.", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "더 나은 DPIP 경험을 위해, DPIP가 백그라운드에서 정상적으로 경고 알림을 수신할 수 있도록 '제한 없음' 권한을 부여해야 합니다.", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "전원 절약 설정", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "알림 기능이 거부되었습니다. 설정으로 이동하여 권한을 허용해 주세요.", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自啟動權限已被拒絕,請移至設定允許權限。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省電策略已被拒絕,請移至設定允許權限。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "권한 요청", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "사용자가 수동으로 설정에서 관련 권한을 활성화해야 합니다.", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "위치가 설정되지 않았습니다.", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP는 위치 설정이 필요합니다. '설정으로 이동'을 클릭하여 위치를 설정한 후 다시 시도해 주세요.", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "설정으로 이동", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "앱 로그", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "FCM 토큰 복사 중 오류 발생", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "예상 진도 범례", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "지진 속보 시에만 사용", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5약", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5강", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6약", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6강", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "5분 이내 지상 번개", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10분 이내 지상 번개", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30분 이내 지상 번개", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "60분 이내 지상 번개", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5분 이내 구름 사이 번개", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10분 이내 구름 사이 번개", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30분 이내 구름 사이 번개", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "60분 이내 구름 사이 번개", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "이상", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "네트워크 연결 또는 서버 이상", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "다시 시도", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "애플리케이션 설정에서 '사진 및 미디어' 권한을 찾아 허용한 후 다시 시도해 주세요.", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "알림 기록 없음", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "긴급", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "알림 세부 정보", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "알림 발송 지역", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "긴급 알림", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "일반 알림", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "애플리케이션 설정에서 '알림' 권한을 찾아 허용한 후 다시 시도해 주세요.", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "애플리케이션 설정에서 '위치' 권한을 찾아 허용한 후 다시 시도해 주세요.", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "사용할 수 있는 데이터가 없습니다.", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "이 페이지는 서버의 시간대별 상태 개요를 보여줍니다. 원본 데이터는 5초마다 업데이트되며, 여기서는 네트워크 사용량을 최적화하기 위해 축약된 버전을 표시합니다. 참고로, 이 정보는 참고용일 뿐 실제 상황은 공지를 기준으로 합니다.", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "모두 정상", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "모두 이상", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "일부 이상", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "정상", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "불안정", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "데이터 없음", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "자동 범위 설정", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "남위 {lat_abs} 도", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "북위 {lat} 도", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "서경 {lon_abs} 도", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "동경 {lon} 도", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "지연: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "개발자가 하고 싶은 말", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "정보", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "경보 구역", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "예상 최대진도", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "발생 시각", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "강진모니터 표시 안함", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "설정의 기능 단계로 가서 강진모니터를 켜주세요.", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "클릭해서 알림 보기", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "최고", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "최저", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (미사용)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "소개", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "이 앱을 다운로드해 주신 모든 사용자분들께 개발팀 전체가 진심으로 감사드립니다.", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP는 모든 방재 정보를 통합하는 것을 목표로 하는 앱으로서 국민 생활에 필수적인 부분이 되고 싶습니다. 아직은 완성도가 떨어지고 어려움이 많지만 우리는 목표를 향해 계속 나아갈 것입니다.", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "소프트웨어를 개발할 때 우리는 많은 돈과 시간, 에너지를 투자했으며 인건비, 장비 비용, 클라우드 서비스, 네트워크 비용 및 기타 항목에 50만 대만 달러 이상을 투자했습니다. 이를 위해 다른 제3자 회서에 의존하지 않고 계속 운영할 수 있도록 사용자의 지지를 받고 싶습니다.", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "영리 모델", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "앱 개발을 유지하기 위해 팀 내에서 어떻게 하면 수익을 낼 수 있는지에 대한 치열한 토론이 여러 번 이루어졌습니다. 우리는 많은 방안 중에서 적합한 수익 모델을 찾으려고 노력합니다. 우리는 대부분의 동일한 유형의 소프트웨어가 영리 목적을 달성하기 위해 간접 광고를 사용한다는 것을 발견하여 한때 이 방법을 영리 방안으로 고려했습니다.", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "영리화의 어려움", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "사용자의 유로화 의향을 조사한 결과, 대부분의 사용자는 일반적으로 방재에 대한 인식이 부족하고 이 문제에 돈을 투자하지 않는 것으로 나타났습니다. 백그라운드의 데이터는 이를 방증하는데, 열성 후원자는 전체 이용자의 약 10만 분의 1에 달하는 것으로 집계되어 PPL이 가장 좋은 해결책으로 보여집니다.", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "왜 광고가 아닌가요?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "재해가 발생했을 때 광고를 보고 싶어하지 않겠죠? 이것이 우리가 PPL을 하지 않는 첫 번째 이유입니다. 방재 지향 소프트웨어는 방재 정보를 빠르고 정확하게 전달하는 것이 최우선 과제입니다. 광고 때문에 방재 정보를 제대로 파악하지 못한다면 오히려 우리의 이념과 어긋납니다. 게다가 재해 시에는 통상적으로 통신 품질이 좋지 않고, 인터넷 트래픽을 추가로 낭비해 광고를 싣고 있으니 답답할 노릇입니다.", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "대중들에게는 유료인가요?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "PPL이 안된다면 일반 대중들을 위한 요금은 어떻게 되나요? 유료 앱이 되나요?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "우선 방재앱으로서 최대한 많은 사람들에게 방재정보를 전달하면 좋을 것 같습니다. 그리고 정말 필요한 사람들은 더 이상 추가 비용을 부담할 수 없을지도 모릅니다. 우리는 더 많은 사람들을 돕고 싶습니다. 둘째, 개발자인 우리는 소프트웨어를 많은 사람들이 사용할 수 있기를 바라며, 요금은 곧 여러분의 사용 의향 저하로 이어질 것입니다.", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "어떻게 이윤을 남기나요?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "위와 같이 방재에 관심 있는 사람, 방재를 중시하는 사람을 육성하여 우리의 소프트웨어 개발을 지원하고 함께 발전해 나가고 싶습니다.", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 개발자의 말씀", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "공지사항을 가져오던 중 오류가 발생했습니다:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "유효하지 않은 레슨입니다", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "작동 간격이 너무 짧습니다. 잠시 후 다시 시도하십시오.", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "알겠습니다", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "오류: FCM 토큰을 가져올 수 없음", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "알림 기록을 불러오던 중 오류 발생", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "자동 위치추적 기능은 DPIP가 알림 권한을 사용할 수 있도록 허용해야 재대로 작동합니다.", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "자동 위치추적 기능은 DPIP가 위치 권한을 사용할 수 있도록 허용해야 재대로 작동합니다.", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "위치 권한", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "보다 나은 자동 위치추적 경험을 제공하기 위해서 DPIP가 백드라운드에서 위치를 자동으로 설정하도록 위치 권한을 \"{permissionType}\"으로 올려야 합니다.", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "자동 위치추적 기능은 위치 권한을 \"{permissionType}\"로 올려서 백그라운드에서 사용돼야 합니다.", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "오류:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "강수량", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "전국", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "환영 페이지", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "서버의 안정과 장기적인 발전 돕기", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "최대진도", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "전부", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "필터", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "리셋", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "적용", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "마지막", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "전달 시각", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "유효 시각", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "영향 영역", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "긴급지진속보(거대)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "긴급지진속보(일반)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "긴급지진속보(무음)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "최대진도 5약 이상,\n소재지(향ㆍ진) 예상 진도 1 이상", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "지진속보(거대)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "소재지(향ㆍ진) 예상 진도 4 이상", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "지진속보(일반)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "소재지(향ㆍ진) 예상 진도 2 이상", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "지진속보(무음)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "소재지(향ㆍ진) 예상 진도 1 이상", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "진도속보(일반)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "소재지(향ㆍ진) 실측 진도 3 이상", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "진도속보(무음)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "소재지(향ㆍ진) 실측 진도 1 이상", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "강진모니터(일반)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "지진보고(일반)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "지진보고(무음)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "소재지(현ㆍ시) 실측 진도 1 이상", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "기상경보", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "뇌우 재난 문자", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "기상 경보", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "소재지(현ㆍ시)으로 뇌우 실시간 정보 또는 산간지역 호우 시 전송합니다.", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "소재지(향진)에서 적색 기상 경보 특보를 발령", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "소재지(향진)에서 기상 경보를 발령", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "재난 정보", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "피난 정보", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "소재지(향진)에 피난 경보가 발령된 경우", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "소재지(향진)에 피난정보가 발령된 경우", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "태평양 쓰나미 소식(무음)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "태평향 쓰나미 소식 발표 시", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "기타 정보", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "거대", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "맑고 연무", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "맑고 이슬비", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "맑고 번개", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "맑고 안개", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "맑고 비", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "맑고 진눈깨비", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "맑고 폭설", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "맑고 싸락눈", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "맑고 작은 우박", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "맑고 눈보라", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "맑고 진눈깨비 소나기", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "맑고 우박", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "맑고 뇌우", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "맑고 천둥을 동반한 눈", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "맑고 천둥번개", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "맑고 강한 뇌우", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "맑고 강한 천둥번개", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "맑고 천둥", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "부분적으로 흐림", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "연무를 동반한 부분적으로 흐림", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "이슬비를 동반한 부분적으로 흐림", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "천둥을 동반한 부분적으로 흐림", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "안개를 동반한 부분적으로 흐림", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "비를 동반한 부분적으로 흐림", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "진눈깨비를 동반한 부분적으로 흐림", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "폭설을 동반한 부분적으로 흐림", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "싸락눈을 동반한 부분적으로 흐림", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "작은 우박을 동반한 부분적으로 흐림", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "눈보라를 동반한 부분적으로 흐림", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "진눈깨비 소나기를 동반한 부분적으로 흐림", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "우박을 동반한 부분적으로 흐림", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "뇌우를 동반한 부분적으로 흐림", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "눈과 번개를 동반한 부분적으로 흐림", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "천둥번개를 동반한 부분적으로 흐림", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "강한 뇌우를 동반한 부분적으로 흐림", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "강한 천둥번개를 동반한 부분적으로 흐림", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "천둥을 동반한 부분적으로 흐림", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "연무로 뒤덮인", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "이슬비로 뒤덮인", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "번개로 뒤덮인", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "안개로 뒤덮인", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "비로 뒤덮인", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "진눈깨비로 뒤덮인", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "폭설로 뒤덮인", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "싸락눈으로 뒤덮인", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "작은 우박으로 뒤덮인", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "눈보라로 뒤덮인", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "진눈깨비 소나기로 뒤덮인", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "우박으로 뒤덮인", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "뇌우로 뒤덮인", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "눈보라로 뒤덮인", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "천둥번개로 뒤덮인", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "맑고 강한 천둥번개", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "흐리고 강한 천둥번개", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "흐리고 천둥", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "날씨 이상징후 확인", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "평균", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "기상 레이더", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "종료", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "시행 중", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "사진을 저장하려면 DPIP에 사진 및 미디어 사용 권한을 허용해야 정상적으로 작동합니다.", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "사진 저장 후 오류가 발생했습니다:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "오류 발생:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(마지막)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1급", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2급", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3급", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4급", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7급", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "클릭해서 위치 설정하기", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 관측망 실측 진도", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "JMA 진도 기준 (0.3초 주기의 3성분 합성가속도)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "본 자료는 TREM-Net 관측망 자동관측 결과로부터 얻은 것으로 아직 인위적으로 검토 및 확인되지 않았으며, 참고 자료로만 제공되었습니다. 실제로는 중앙 기상청에서 발표한 정보가 우선입니다.", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "표시할 유효한 자료가 없습니다.", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH시", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "랭킹", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "자료 시간: {time}\n총 {ranked_length} 관측점", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "에 따르면", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "내림차순", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "오름차순", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "통합", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "이미지 저장", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24小時{type}趨勢", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "전원 절약 설정", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自動化啟動", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb deleted file mode 100644 index 4c65aa4b5..000000000 --- a/lib/l10n/app_ru.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "ru", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "Главная", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "монитор сильного землетрясения", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "отчёт о землетрясении", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "Карта", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "мне", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "Настройки", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "調整 DPIP 的運作方式。", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "пожертвовать нас", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "在 Threads 上追蹤我們", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTube прямая трансляция", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "состояние сервера", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "第三方套件授權", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "M {magnitude} 深度 {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "編號 {reportNumber} 顯著有感地震", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "小區域有感地震", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "страница сообщения о землетрясении", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "發震時間", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "位於", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "величина", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "глубина", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "地震報告圖", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "震度圖", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "最大地動加速度圖", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "最大地動速度圖", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "各地震度", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "язык", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "調整 DPIP 的顯示語言", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "языка дисплея", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "已翻譯 {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "已校對 {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "協助翻譯", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "點擊這裡來幫助我們改進 DPIP 的翻譯", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "暫時無法取得地震速報資料", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "目前無生效中的地震速報", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "地震速報", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "緊急地震速報", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "интенсивность оценки вашего местоположения", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "сейсмические волны", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "неизвестно", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "прибытие", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "秒後抵達", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "воспроизведение", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "сохранение", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "сохранённое", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "персонализация", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "主題色", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "調整 DPIP 整體的外觀與顏色", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "Светлая тема", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "Тёмный тема", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "системной тема", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "местоположение", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "ваше местоположение", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "調整所在地來接收即時天氣資訊、地震預估震度以及地震波預估抵達秒數等", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "включить авто определение местоположения", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "自動定位功能將使用您的裝置上的 GPS ,根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "Не настроено", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "город", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "посёлок", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "выберите местоположение", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "копия FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "копия FCM Token успех", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "此地震可能引起若干海面變動", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "此地震可能引起海嘯 注意後續資訊", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "取得地震報告時發生錯誤,請檢查網路狀況後再試一次。", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "版本 {version}\n組建 {buildNumber}\n由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "來源語言", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "通知測試", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "測試即時天氣資訊、地震速報等音效通知", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 4 以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "偵測到晃動", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "所在地(縣市)實測震度 3 以上", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "地震速報音效", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "地震資訊", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "другие", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "海嘯警報(警報)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "海嘯警報發布時\n沿海地區鄉鎮", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "海嘯警報(注意)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "海嘯警報發布時\n上述除外地區", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "發送公告時", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "地圖列表", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "雷達回波", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "降水", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "температура", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "влажность", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "воздух давление", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "направление ветра/скорость ветра", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "тайфун", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "информация о цунами", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "圖例", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "Единица измерения: dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "Единица измерения: миллиметр (мм)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "Единица измерения: градус Цельсия (°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "Единица измерения: относительная влажность (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "Единица измерения: гектопаскаль (гПа)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "история", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3天內的歷史事件資訊", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "沒有歷史事件資訊", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "目前的事件資訊", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "目前沒有事件資訊", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "Отчет № {serial}", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "閃電", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "服務區域外", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "服務區域外,僅在臺灣各地可用", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "無法取得通知權限", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "再試一次", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "無法取得位置權限", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "取消", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "晴", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "陰", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "更多", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "更多功能列表", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "一般", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "отладка", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 官網", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "行動通知推播紀錄", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "進階功能", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "調整 DPIP 的進階功能", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "啟用強震監視器", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "近期無海嘯資訊", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "海嘯警報", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "{id}號 第{serial}報", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "發布", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "更新", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "解除", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "預估海嘯到達時間及波高", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "各地觀測到的海嘯", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "發生時間", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "規模", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "深度", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "一切平安,無事件發生。", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "更新日誌", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3 天", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2 天", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24 小時", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12 小時", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6 小時", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3 小時", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1 小時", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10 分鐘", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "今日", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "歡迎使用 DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "防災資訊平台", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "下一步", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "我們是誰?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "我們的初衷", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "注意事項", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "任何資訊應以中央氣象署發布之內容為準。", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "強烈搖晃有機率比通知早抵達使用者所在地。", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "權限", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "我們一直和使用者站在一起,為使用者的隱私而不斷努力。", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "通知", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "在重大災害發生時以通知來傳遞即時防災資訊", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "使用定位來自動更新所在地設定,提供當地的即時防災資訊", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "不同意", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "同意", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "發現新版本", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "更新至最新版本以獲得最佳體驗", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "目前版本", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "最新版本", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "立即更新", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "暫時略過", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "更新完成", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP 更新完成,要前往查看更新日誌嗎?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "稍後再說", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "前往查看", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "公告", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "有新的公告,要前往查看嗎?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "目前沒有公告", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "貢獻者", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "無法載入更新日誌,請稍後再試。", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "目前沒有更新日誌", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "公告詳情", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "版本詳情", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "無法取得權限", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "儲存圖片時發生錯誤", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "確定", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "無搜尋結果", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "一律允許", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "永遠", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "自啟動權限", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "省電策略", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "通知功能已被拒絕,請移至設定允許權限。", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自啟動權限已被拒絕,請移至設定允許權限。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省電策略已被拒絕,請移至設定允許權限。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "權限請求", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "需要使用者手動到設定開啟相關權限。", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "尚未設定所在地", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP 需要設定所在地才能正常運作。點擊「前往設定」設定所在地後再試一次。", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "前往設定", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "App 日誌", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "複製 FCM Token 時發生錯誤", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "預估震度圖例", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "僅用於地震速報時", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5弱", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5強", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6弱", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6強", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "5 分鐘內對地閃電", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10 分鐘內對地閃電", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30 分鐘內對地閃電", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "60 分鐘內對地閃電", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5 分鐘內雲間閃電", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10 分鐘內雲間閃電", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30 分鐘內雲間閃電", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "60 分鐘內雲間閃電", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "異常", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "網路連線或伺服器異常。", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "重試", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "沒有通知紀錄", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "緊急", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "通知詳細資訊", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "通知發送區域", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "緊急通知", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "一般通知", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "請您到應用程式設定中找到並允許「通知」權限後再試一次。", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "請您到應用程式設定中找到並允許「位置」權限後再試一次。", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "沒有可用的資料", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "全部正常", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "全部異常", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "部分異常", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "正常", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "不穩定", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "無資料", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "前景自動定位", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "南緯 {lat_abs} 度", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "北緯 {lat} 度", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "西經 {lon_abs} 度", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "東經 {lon} 度", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "延遲: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "開發者想說的話", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "關於", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警報區域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "預估最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "發震", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "未啟用強震監視器", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "請至設定進階功能中開啟強震監視器。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "點擊查看提示資訊", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (未啟用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "簡介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "營利模式", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "營利真的太難了", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "為什麼不採用廣告?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "對大眾收費?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "如果植入廣告行不通,那對大眾收費呢?變成付費軟體?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "如何營利?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 開發者的話", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "獲取公告時發生錯誤:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "無效操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作間隔過短,請稍後再嘗試。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "知道了", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "錯誤: 無法取得 FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "獲取通知紀錄時發生錯誤", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "位置權限", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "錯誤:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全國", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "歡迎頁面", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "幫助我們維護伺服器的穩定和長久發展", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "全部", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "篩選器", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "重置", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "套用", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "到底了", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "發送時間", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有效至", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "影響區域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "緊急地震速報(重大)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "緊急地震速報(一般)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "緊急地震速報(無聲)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "地震速報(重大)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "所在地(鄉鎮)預估震度 4 以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "地震速報(一般)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "所在地(鄉鎮)預估震度 2 以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "地震速報(無聲)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "所在地(鄉鎮)預估震度 1 以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "所在地(鄉鎮)實測震度 3 以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(無聲通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "所在地(鄉鎮)實測震度 1 以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "強震監視器(一般)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震報告(一般)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震報告(無聲通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "所在地(縣市)實測震度 1 以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "氣象警報", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "雷雨即時訊息", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天氣警特報", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "所在地(鄉鎮)發布雷雨即時訊息或\n山區暴雨時", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "所在地(鄉鎮)發布紅色燈號之\n天氣警特報", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "所在地(鄉鎮)發布上述除外燈號之\n天氣警特報", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "災害資訊", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避難資訊", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "所在地(鄉鎮)發布避難警訊時", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "所在地(鄉鎮)發布避難資訊時", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "太平洋海嘯消息(無聲通知)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "太平洋海嘯消息發布時", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "其他通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "晴有霾", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴有靄", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴有閃電", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴有霧", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴有雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴有雨雪", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴有大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴有雪珠", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴有冰珠", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴有陣雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴陣雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴有雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴有雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴大雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴大雷雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴天伴有雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "多雲", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "多雲有霾", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "多雲有靄", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "多雲有閃電", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "多雲有霧", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "多雲有雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "多雲有雨雪", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "多雲有大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "多雲有雪珠", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "多雲有冰珠", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "多雲有陣雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "多雲陣雨雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "多雲有雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "多雲有雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "多雲有雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "多雲有雷雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "多雲大雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "多雲大雷雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "多雲伴有雷", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "陰有霾", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "陰有靄", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "陰有閃電", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "陰有霧", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "陰有雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "陰有雨雪", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "陰有大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "陰有雪珠", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "陰有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "陰有陣雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "陰陣雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "陰有雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "陰有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "陰有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "陰有雷雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "陰大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "陰大雷雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "陰天伴有雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "取得天氣異常", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "雷達合成回波", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "已結束", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "生效中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "儲存圖片時發生錯誤:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "發生錯誤:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最終)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1級", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2級", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3級", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4級", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7級", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "點擊設定所在地", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 觀測網實測震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "使用 JMA 震度標準 (0.3秒三分量合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "沒有有效資料可顯示", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH時", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "排行榜", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "資料時間:{time}\n共 {ranked_length} 觀測點", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "依", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "降冪", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "升冪", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "合併至", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "сохранение", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24小時{type}趨勢", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "省電策略", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自動化啟動", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb deleted file mode 100644 index 5a2216506..000000000 --- a/lib/l10n/app_vi.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "vi", - "@@context": "App level localization strings.", - "datetime_format": "MM/dd/yyyy HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "MM/dd/yyyy", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "Trang chủ", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "giám sát động đất", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "Thông báo tin động đất", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "Bản đồ", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "Tôi", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "Cài đặt", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "Chỉnh sửa cách thức hoạt động của DPIP.", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "quyên tặng", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "Theo dõi chúng tôi trên Threads!", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "Phát trực tiếp trên YouTube", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "Máy chủ dịch vụ", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "Giấy phép gói phần mềm của bên thứ ba", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "Độ lớn M {magnitude} Độ sâu {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "Động đất đáng chú ý có mã báo cáo # {reportNumber}", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "Động đất nhẹ, cảm nhận được ở khu vực nhỏ", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "Trang báo cáo", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "Ngày giờ nhận biết động đất", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "nằm ở", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "Cường độ", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "Độ sâu chấn tiêu", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "Bản đồ báo cáo động đất", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "Bản đồ cường độ địa chấn", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "Bản đồ gia tốc mặt đất tối đa", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "Bản đồ vận tốc mặt đất tối đa", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "Cường độ địa chấn tại các khu vực", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "Ngôn ngữ", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "thiết lập ngôn ngữ hiển thị DPIP", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "Ngôn ngữ hiển thị", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "Đã dịch {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "Đã hiệu đính {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "Hỗ trợ biên dịch", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "Nhấp vào đây để giúp chúng tôi cải thiện bản dịch DPIP", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "Tạm thời không thể lấy dữ liệu cảnh báo động đất", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "Hiện không có cảnh báo động đất nào có hiệu lực.", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "Cảnh báo động đất sớm", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "Cảnh báo động đất sớm", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "Dự đoán vị trí", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "Sóng địa chấn", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "không rõ", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "đến", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "đến trong 5 giây", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "phát lại", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "Lưu trữ hình", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "Đã lưu ảnh", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "Cá nhân hóa", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "Chủ đề", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "Điều chỉnh giao diện và màu sắc tổng thể của DPIP", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "Sáng", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "Tối", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "Theo chủ đề hệ thống", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "Vị trí", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "Vị Trí Hiện Tại", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "Điều chỉnh vị trí để nhận thông tin thời tiết theo thời gian thực, dự đoán cường độ động đất và thời gian sóng địa chấn dự kiến đến.", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "Bật định vị tự động", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới nhất tại địa phương.", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "Chưa được thiết lập", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "Quận", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "Thị trấn", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "Chọn vị trí", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "Sao chép FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "Đã sao chép FCM Token", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "Trận động đất này có thể gây ra một số biến động trên mặt biển.", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "Trận động đất này có thể gây ra sóng thần. Hãy chú ý theo dõi thông tin cập nhật.", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "Đã xảy ra lỗi khi lấy báo cáo động đất. Vui lòng kiểm tra kết nối mạng và thử lại.", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "版本 {version}\n組建 {buildNumber}\n由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "Ngôn ngữ nguồn", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "Kiểm tra thông báo", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "Kiểm tra thông báo âm thanh về thông tin thời tiết thời gian thực, báo cáo động đất, v. v.", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 4 以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "偵測到晃動", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "所在地(縣市)實測震度 3 以上", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "Âm thanh cảnh báo động đất nhanh", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "Thông tin động đất", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "Khác", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "Cảnh báo sóng thần (Cảnh báo)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "海嘯警報發布時\n沿海地區鄉鎮", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "Cảnh báo sóng thần (Cẩn thận)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "海嘯警報發布時\n上述除外地區", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "發送公告時", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "Danh sách bản đồ", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "Hình ảnh radar", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "Lượng mưa", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "Nhiệt độ", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "Độ ẩm", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "Áp suất khí quyển", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "Hướng gió/Tốc độ gió", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "gio bảo", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "Thông tin sóng thần", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "Chú thích", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "Đơn vị đo: dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "Đơn vị đo: mm", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "Đơn vị đo: độ C", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "Đơn vị đo: Độ ẩm tương đối", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "Đơn vị đo: hPa", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "Lịch sử", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "Thông tin về các sự kiện lịch sử trong vòng 3 ngày", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "Không có thông tin về các sự kiện lịch sử.", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "Thông tin về các sự kiện hiện tại", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "Hiện không có thông tin về sự kiện nào.", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "Bản tin số {serial}", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "Tia sét", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "Không còn hoạt động", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài Loan.", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "Không thể nhận được quyền thông báo", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "Thử lại", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "không thể có được quyền truy cập vị trí", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "Hủy bỏ", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "Mùa hè", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "Ngày nhiều mây", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "Thêm", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "Danh sách các tính năng khác", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "Nói chung", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "Gỡ lỗi", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech Website chính thức", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "Bản ghi đẩy thông báo di động", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "Tính năng nâng cao", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "Điều chỉnh các tính năng nâng cao của DPIP", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "Giám sát động đất mạnh", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "Không có thông tin về sóng thần", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "Cảnh báo sóng thần", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "Số {id}, Báo cáo số {serial}", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "Quán rượu", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "Cập nhật", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "Cứu trợ", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "Thời gian dự kiến ​​đến và độ cao của sóng thần", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "Sóng thần được quan sát ở nhiều nơi", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "Thời gian xảy ra", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "Kích cỡ", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "Độ sâu", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "Mọi việc đều an toàn, không có sự cố nào xảy ra.", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "Nhật ký thay đổi", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3 ngày", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2 ngày", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24 giờ", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12 giờ", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6 giờ", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3 giờ", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1 giờ", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10 phút", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "Hôm nay", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "Chào mừng đến với DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "Cổng thông tin phòng chống thiên tai", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi.", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "Tiếp theo", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "Chúng tôi là ai?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và Nam), Nhật Bản, Hàn Quốc và Trung Quốc.", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "Chúng tôi đã bắt đầu với những gì", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra ngoài phạm vi trường học và trở thành nhóm như hiện nay.", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "Những điều cần lưu ý", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP sẽ cung cấp nhiều thông tin khác nhau từ ExpTech và Đài Loan Cơ quan Thời tiết Trung ương (CWA), vì vậy hãy lưu ý những điều sau khi sử dụng.", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung ương (CWA) công bố.", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra.", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo.", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do đó cần phải thận trọng và hiểu rõ.", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân thủ các quy định có liên quan.", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "Sự cho phép", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của họ.", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "Thông báo", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "在重大災害發生時以通知來傳遞即時防災資訊", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "使用定位來自動更新所在地設定,提供當地的即時防災資訊", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) hoặc ExpTech.", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "Không đồng ý", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "Đồng ý", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "Bạn có thể xem dịch vụ “Strong Earthquake Monitor” từ TREM của ExpTech trong DPIP, vui lòng đọc các điều kiện sau và chọn kích hoạt dịch vụ hay không.", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "Thông tin địa chấn theo thời gian thực hiển thị trong DPIP không phải là thông tin do Đài Loan Cơ quan Thời tiết Trung ương (CWA) cung cấp và do đó có thể không nhất quán với kết quả do CWA quan sát được và phải dựa trên thông tin do CWA công bố.", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "Các điểm quan sát mà “Strong Earthquake Monitor” sử dụng thuộc sở hữu của ExpTech và không được Cơ quan Thời tiết Trung ương (CWA) quản lý, vì vậy, vui lòng không chuyển lỗi hoặc bình luận cho CWA, vì điều này sẽ khiến họ bối rối.", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "“giám sát động đất” được sử dụng trong TREM (Giám sát động đất theo thời gian thực tại Đài Loan.) như một chức năng hiển thị địa chấn thời gian thực để quan sát rung động hiện tại trên khắp Đài Loan. Khi động đất xảy ra, sự lan truyền của sóng địa chấn có thể được quan sát thông qua sự thay đổi màu sắc của các điểm quan sát.", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "Do ảnh hưởng của tiếng ồn hàng ngày (ô tô, nhà máy, xây dựng, v.v.), màu sắc của các điểm quan sát cũng có thể thay đổi trong thời gian bình thường. Ngoài ra, vì đây là dữ liệu thời gian thực nên không thể xác định được có trục trặc hay không tại thời điểm này, do đó có thể màu sắc có thể thay đổi do trục trặc của điểm quan sát.", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "Vào đầu tháng 6 năm 2022, chúng tôi đã bắt đầu quan sát các điểm trên khắp Đài Loan. TREM-Net (Mạng lưới quan sát địa chấn TREM) bao gồm hai mạng lưới quan sát, SE-Net (Mạng lưới quan sát địa chấn mạnh, “Gia tốc kế”) và MS-Net (Mạng lưới quan sát vi địa chấn, “Máy đo tốc độ”), cùng nhau ghi lại nhiều dữ liệu khác nhau trong các trận động đất.", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "Khám phá phiên bản mới", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "Vui lòng cập nhật lên phiên bản mới nhất để có trải nghiệm tốt nhất", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "Phiên bản hiện tại", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "Phiên bản mới nhất", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "Cập nhật ngay", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "Bây giờ", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "Cập nhật hoàn tất", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "Cập nhật DPIP đã hoàn tất, bạn có muốn kiểm tra nhật ký thay đổi không?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "Để sau", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "Đi xem", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "Thông báo", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "Hiện tại có thông báo mới, bạn có muốn xem không?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "Không có thông báo bây giờ", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "Người đóng góp", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "Không thể tải nhật ký thay đổi, vui lòng thử lại sau.", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "Không có nhật ký thay đổi bây giờ", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "Thông báo Chi Tiết", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "Phiên bản Chi Tiết", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "không thể có được quyền truy cập", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "Đã xảy ra lỗi khi lưu hình ảnh.", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "Xác nhận", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "Không hiện kết quả tìm kiếm", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "Luôn cho phép", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "Luôn luôn", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "Để có trải nghiệm vị trí tự động tốt hơn, bạn cần phải thiết lập “quyền tự động khởi chạy” để cho phép DPIP tự động thiết lập thông tin vị trí ở chế độ nền.", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "Để có trải nghiệm DPIP tốt hơn, bạn cần phải thiết lập “quyền tự động khởi chạy” để cho phép DPIP tiếp nhận thông báo cảnh báo bình thường ở chế độ nền.", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "Tự khởi động sự cho phép", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "Để có trải nghiệm vị trí tự động tốt hơn, bạn cần phải thiết lập “Không hạn chế” để cho phép DPIP tự động thiết lập thông tin vị trí ở chế độ nền.", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "Để có trải nghiệm DPIP tốt hơn, bạn cần phải thiết lập “Không hạn chế” để cho phép DPIP tiếp nhận thông báo cảnh báo bình thường ở chế độ nền.", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "Chế độ nguồn điện thấp", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "Chức năng thông báo đã bị từ chối, vui lòng chuyển đến trang Cài đặt để thiết lập các quyền được phép.", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自啟動權限已被拒絕,請移至設定允許權限。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省電策略已被拒絕,請移至設定允許權限。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "Yêu cầu để xin phép", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan.", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "Bạn chưa thiết lập vị trí của mình", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP cần được thiết lập theo vị trí của bạn để hoạt động bình thường. Nhấp vào “Cài đặt” để thiết lập vị trí của bạn và thử lại.", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "Cài đặt", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "Nhật ký ứng dụng", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "Đã xảy ra lỗi khi sao chép Mã thông báo FCM", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "Chú giải cường độ ước tính", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "Chỉ được sử dụng trong cảnh báo động đất", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5⁻", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5⁺", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6⁻", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6⁺", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "Trong vòng 5 phút sét đánh xuống đất", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "Trong vòng 10 phút sét đánh xuống đất", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "Trong vòng 30 phút sét đánh xuống đất", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "Trong vòng 60 phút sét đánh xuống đất", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "Trong vòng 5 phút tia chớp trên mây", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "Trong vòng 10 phút tia chớp trên mây", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "Trong vòng 30 phút tia chớp trên mây", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "Trong vòng 60 phút tia chớp trên mây", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "Bất thường", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "Kết nối mạng hoặc máy chủ có vấn đề.", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "Thử lại", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "Vui lòng vào Cài đặt ứng dụng để tìm và cấp quyền “Ảnh và phương tiện” rồi thử lại.", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "Không có lịch sử thông báo", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "Khẩn cấp", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "Chi tiết thông báo", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "Thông báo khu vực gửi", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "Thông báo khẩn cấp", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "Thông cáo chung", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "Vui lòng vào Cài đặt ứng dụng để tìm và cấp quyền “Thông báo” rồi thử lại.", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "Vui lòng vào Cài đặt ứng dụng để tìm và cấp quyền “Vị trí” rồi thử lại.", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "Không có dữ liệu có sẵn", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "Trang này trình bày tổng quan về trạng thái của máy chủ tại nhiều thời điểm khác nhau. Dữ liệu thô được cập nhật sau mỗi 5 giây và phiên bản cô đọng được hiển thị tại đây để tối ưu hóa việc sử dụng mạng. Xin lưu ý rằng thông tin này chỉ mang tính tham khảo và trạng thái thực tế phải dựa trên thông báo.", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "Tất cả đều bình thường", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "Tất cả đều bất thường", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "Sự bất thường một phần", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "Bình thường", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "Không ổn định", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "Không có dữ liệu", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "Tự động định vị tiền cảnh", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "Vĩ độ nam {lat_abs}", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "Vĩ độ bắc {lat}", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "Kinh độ tây {lon_abs}", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "Kinh độ đông {lon}", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "Độ trễ: {serviceStatus_count} s", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "Những gì các nhà phát triển muốn nói", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "關於", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警報區域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "預估最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "發震", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "未啟用強震監視器", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "請至設定進階功能中開啟強震監視器。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "點擊查看提示資訊", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (未啟用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "簡介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "營利模式", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "營利真的太難了", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "為什麼不採用廣告?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "對大眾收費?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "如果植入廣告行不通,那對大眾收費呢?變成付費軟體?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "如何營利?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 開發者的話", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "獲取公告時發生錯誤:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "無效操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作間隔過短,請稍後再嘗試。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "知道了", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "錯誤: 無法取得 FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "獲取通知紀錄時發生錯誤", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "位置權限", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "錯誤:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全國", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "歡迎頁面", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "幫助我們維護伺服器的穩定和長久發展", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "全部", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "篩選器", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "重置", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "套用", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "到底了", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "發送時間", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有效至", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "影響區域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "緊急地震速報(重大)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "緊急地震速報(一般)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "緊急地震速報(無聲)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "地震速報(重大)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "所在地(鄉鎮)預估震度 4 以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "地震速報(一般)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "所在地(鄉鎮)預估震度 2 以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "地震速報(無聲)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "所在地(鄉鎮)預估震度 1 以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "所在地(鄉鎮)實測震度 3 以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(無聲通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "所在地(鄉鎮)實測震度 1 以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "強震監視器(一般)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震報告(一般)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震報告(無聲通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "所在地(縣市)實測震度 1 以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "氣象警報", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "雷雨即時訊息", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天氣警特報", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "所在地(鄉鎮)發布雷雨即時訊息或\n山區暴雨時", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "所在地(鄉鎮)發布紅色燈號之\n天氣警特報", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "所在地(鄉鎮)發布上述除外燈號之\n天氣警特報", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "災害資訊", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避難資訊", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "所在地(鄉鎮)發布避難警訊時", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "所在地(鄉鎮)發布避難資訊時", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "太平洋海嘯消息(無聲通知)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "太平洋海嘯消息發布時", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "其他通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "晴有霾", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴有靄", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴有閃電", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴有霧", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴有雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴有雨雪", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴有大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴有雪珠", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴有冰珠", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴有陣雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴陣雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴有雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴有雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴大雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴大雷雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴天伴有雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "多雲", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "多雲有霾", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "多雲有靄", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "多雲有閃電", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "多雲有霧", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "多雲有雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "多雲有雨雪", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "多雲有大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "多雲有雪珠", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "多雲有冰珠", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "多雲有陣雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "多雲陣雨雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "多雲有雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "多雲有雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "多雲有雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "多雲有雷雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "多雲大雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "多雲大雷雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "多雲伴有雷", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "陰有霾", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "陰有靄", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "陰有閃電", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "陰有霧", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "陰有雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "陰有雨雪", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "陰有大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "陰有雪珠", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "陰有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "陰有陣雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "陰陣雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "陰有雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "陰有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "陰有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "陰有雷雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "陰大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "陰大雷雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "陰天伴有雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "取得天氣異常", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "雷達合成回波", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "已結束", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "生效中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "儲存圖片時發生錯誤:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "發生錯誤:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最終)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1級", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2級", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3級", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4級", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7級", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "點擊設定所在地", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 觀測網實測震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "使用 JMA 震度標準 (0.3秒三分量合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "沒有有效資料可顯示", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH時", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "排行榜", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "資料時間:{time}\n共 {ranked_length} 觀測點", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "依", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "降冪", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "升冪", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "合併至", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "Lưu trữ hình", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24小時{type}趨勢", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "Chế độ nguồn điện thấp", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自動化啟動", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb deleted file mode 100644 index b85462ff5..000000000 --- a/lib/l10n/app_zh.arb +++ /dev/null @@ -1,1732 +0,0 @@ -{ - "@@locale": "zh", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "首頁", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "強震監視器", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "地震報告", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "地圖", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "我", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "設定", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "調整 DPIP 的運作方式。", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "贊助我們", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "在 Threads 上追蹤我們", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTube 直播", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "伺服器狀態", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "第三方套件授權", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "M {magnitude} 深度 {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "編號 {reportNumber} 顯著有感地震", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "小區域有感地震", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "報告頁面", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "發震時間", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "位於", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "地震規模", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "震源深度", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "地震報告圖", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "震度圖", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "最大地動加速度圖", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "最大地動速度圖", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "各地震度", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "語言", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "調整 DPIP 的顯示語言", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "顯示語言", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "已翻譯 {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "已校對 {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "協助翻譯", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "點擊這裡來幫助我們改進 DPIP 的翻譯", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "暫時無法取得地震速報資料", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "目前無生效中的地震速報", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "地震速報", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "緊急地震速報", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "所在地預估", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "震波", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "未知", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "抵達", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "秒後抵達", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "重播", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "儲存", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "已儲存圖片", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "個人化", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "主題色", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "調整 DPIP 整體的外觀與顏色", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "淺色", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "深色", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "跟隨系統主題", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "位置", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "所在地", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "調整所在地來接收即時天氣資訊、地震預估震度以及地震波預估抵達秒數等", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "啟用自動定位", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "自動定位功能將使用您的裝置上的 GPS ,根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "尚未設定", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "縣市", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "鄉鎮", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "選擇所在地", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "複製 FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "已複製 FCM Token", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "此地震可能引起若干海面變動", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "此地震可能引起海嘯 注意後續資訊", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "取得地震報告時發生錯誤,請檢查網路狀況後再試一次。", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "版本 {version}\n組建 {buildNumber}\n由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "來源語言", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "通知測試", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "測試即時天氣資訊、地震速報等音效通知", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 4 以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "偵測到晃動", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "所在地(縣市)實測震度 3 以上", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "地震速報音效", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "地震資訊", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "其他", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "海嘯警報(警報)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "海嘯警報發布時\n沿海地區鄉鎮", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "海嘯警報(注意)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "海嘯警報發布時\n上述除外地區", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "發送公告時", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "地圖列表", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "雷達回波", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "降水", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "氣溫", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "濕度", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "氣壓", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "風向/風速", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "颱風", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "海嘯資訊", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "圖例", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "單位:dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "單位:毫米 (mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "單位:攝氏度 (°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "單位:相對濕度 (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "單位:百帕 (hPa)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "歷史", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3天內的歷史事件資訊", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "沒有歷史事件資訊", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "目前的事件資訊", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "目前沒有事件資訊", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "第 {serial} 報", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "閃電", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "服務區域外", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "服務區域外,僅在臺灣各地可用", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "無法取得通知權限", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "再試一次", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "無法取得位置權限", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "取消", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "晴", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "陰", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "更多", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "更多功能列表", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "一般", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "除錯", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 官網", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "行動通知推播紀錄", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "進階功能", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "調整 DPIP 的進階功能", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "啟用強震監視器", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "近期無海嘯資訊", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "海嘯警報", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "{id}號 第{serial}報", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "發布", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "更新", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "解除", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "預估海嘯到達時間及波高", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "各地觀測到的海嘯", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "發生時間", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "規模", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "深度", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "一切平安,無事件發生。", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "更新日誌", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3天", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3天" - }, - "interval_2_days": "2天", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2天" - }, - "interval_24_hours": "24小時", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24小時" - }, - "interval_12_hours": "12小時", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12小時" - }, - "interval_6_hours": "6小時", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6小時" - }, - "interval_3_hours": "3小時", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3小時" - }, - "interval_1_hour": "1小時", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1小時" - }, - "interval_10_minutes": "10分鐘", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10分鐘" - }, - "interval_now": "今日", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "歡迎使用 DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "防災資訊平台", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "下一步", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "我們是誰?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "我們的初衷", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "注意事項", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "任何資訊應以中央氣象署發布之內容為準。", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "強烈搖晃有機率比通知早抵達使用者所在地。", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "權限", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "我們一直和使用者站在一起,為使用者的隱私而不斷努力。", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "通知", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "用於提供通知服務", - "@notification_service_description": { - "description": "「歡迎」頁面 → 用於提供通知服務" - }, - "location_based_service": "用於提供基於位置的服務", - "@location_based_service": { - "description": "「歡迎」頁面 → 用於提供基於位置的服務" - }, - "data_visualization_storage": "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "不同意", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "同意", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "發現新版本", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "更新至最新版本以獲得最佳體驗", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "目前版本", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "最新版本", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "立即更新", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "暫時略過", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "更新完成", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP 更新完成,要前往查看更新日誌嗎?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "稍後再說", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "前往查看", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "公告", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "有新的公告,要前往查看嗎?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "目前沒有公告", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "貢獻者", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "無法載入更新日誌,請稍後再試。", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "目前沒有更新日誌", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "公告詳情", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "版本詳情", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "無法取得權限", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "儲存圖片時發生錯誤", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "確定", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "無搜尋結果", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "一律允許", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "永遠", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "自啟動權限", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "省電策略", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "通知功能已被拒絕,請移至設定允許權限。", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "permission_request": "權限請求", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "需要使用者手動到設定開啟相關權限。", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "尚未設定所在地", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP 需要設定所在地才能正常運作。點擊「前往設定」設定所在地後再試一次。", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "前往設定", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "App 日誌", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "複製 FCM Token 時發生錯誤", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "預估震度圖例", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "僅用於地震速報時", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5弱", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5強", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6弱", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6強", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "5 分鐘內對地閃電", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10 分鐘內對地閃電", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30 分鐘內對地閃電", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "60 分鐘內對地閃電", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5 分鐘內雲間閃電", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10 分鐘內雲間閃電", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30 分鐘內雲間閃電", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "60 分鐘內雲間閃電", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "異常", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "網路連線或伺服器異常。", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "重試", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "沒有通知紀錄", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "緊急", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "通知詳細資訊", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "通知發送區域", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "緊急通知", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "一般通知", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "請您到應用程式設定中找到並允許「通知」權限後再試一次。", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "請您到應用程式設定中找到並允許「位置」權限後再試一次。", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "沒有可用的資料", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "全部正常", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "全部異常", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "部分異常", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "正常", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "不穩定", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "無資料", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "前景自動定位", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "南緯 {lat_abs} 度", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "北緯 {lat} 度", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "西經 {lon_abs} 度", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "東經 {lon} 度", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "延遲: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "開發者想說的話", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "關於", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警報區域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "預估最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "發震", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "未啟用強震監視器", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "請至設定進階功能中開啟強震監視器。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "點擊查看提示資訊", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述" - }, - "not_enabled": " (未啟用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "簡介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "營利模式", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "營利真的太難了", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "為什麼不採用廣告?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "對大眾收費?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "如果植入廣告行不通,那對大眾收費呢?變成付費軟體?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "如何營利?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 開發者的話", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "獲取公告時發生錯誤:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "無效操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作間隔過短,請稍後再嘗試。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "知道了", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "錯誤: 無法取得 FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "獲取通知紀錄時發生錯誤", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "位置權限", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "錯誤:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全國", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "歡迎頁面", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "幫助我們維護伺服器的穩定和長久發展", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "全部", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "篩選器", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "重置", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "套用", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "到底了", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "發送時間", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有效至", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "影響區域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "緊急地震速報(重大)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "緊急地震速報(一般)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "緊急地震速報(無聲)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "地震速報(重大)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "所在地(鄉鎮)預估震度 4 以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "地震速報(一般)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "所在地(鄉鎮)預估震度 2 以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "地震速報(無聲)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "所在地(鄉鎮)預估震度 1 以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "所在地(鄉鎮)實測震度 3 以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(無聲通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "所在地(鄉鎮)實測震度 1 以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "強震監視器(一般)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震報告(一般)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震報告(無聲通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "所在地(縣市)實測震度 1 以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "氣象警報", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "雷雨即時訊息", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天氣警特報", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "所在地(鄉鎮)發布雷雨即時訊息或\n山區暴雨時", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "所在地(鄉鎮)發布紅色燈號之\n天氣警特報", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "所在地(鄉鎮)發布上述除外燈號之\n天氣警特報", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "災害資訊", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避難資訊", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "所在地(鄉鎮)發布避難警訊時", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "所在地(鄉鎮)發布避難資訊時", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "太平洋海嘯消息(無聲通知)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "太平洋海嘯消息發布時", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "其他通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "晴有霾", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴有靄", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴有閃電", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴有霧", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴有雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴有雨雪", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴有大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴有雪珠", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴有冰珠", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴有陣雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴陣雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴有雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴有雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴大雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴大雷雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴天伴有雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "多雲", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "多雲有霾", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "多雲有靄", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "多雲有閃電", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "多雲有霧", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "多雲有雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "多雲有雨雪", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "多雲有大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "多雲有雪珠", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "多雲有冰珠", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "多雲有陣雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "多雲陣雨雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "多雲有雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "多雲有雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "多雲有雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "多雲有雷雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "多雲大雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "多雲大雷雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "多雲伴有雷", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "陰有霾", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "陰有靄", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "陰有閃電", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "陰有霧", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "陰有雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "陰有雨雪", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "陰有大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "陰有雪珠", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "陰有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "陰有陣雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "陰陣雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "陰有雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "陰有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "陰有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "陰有雷雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "陰大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "陰大雷雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "陰天伴有雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "取得天氣異常", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "雷達合成回波", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "已結束", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "生效中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "儲存圖片時發生錯誤:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "發生錯誤:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最終)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1級", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2級", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3級", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4級", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7級", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "點擊設定所在地", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 觀測網實測震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "使用 JMA 震度標準 (0.3秒三分量合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "沒有有效資料可顯示", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH時", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - } -} \ No newline at end of file diff --git a/lib/l10n/app_zh_CN.arb b/lib/l10n/app_zh_CN.arb deleted file mode 100644 index df577b6ce..000000000 --- a/lib/l10n/app_zh_CN.arb +++ /dev/null @@ -1,1801 +0,0 @@ -{ - "@@locale": "zh_CN", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "首页", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "强震监视器", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "地震报告", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "地图", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "我", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "设置", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "调整 DPIP 的运行方式", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "赞助我们", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "在Threads关注我们", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTube 直播", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "服务器状态", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "第三方套件授权", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "震级 {magnitude} 深度 {depth} 千米", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "序号 {reportNumber} 显著有感地震", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "小区域有感地震", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "报告详情", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "发震时刻", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "位于", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "地震震级", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "震源深度", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "地震报告图", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "震度图", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "峰值地震动加速度图", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "峰值最大地震动速度图", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "各地震度", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "语言", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "更改 DPIP 的显示语言", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "显示语言", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "已翻译 {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "已校对 {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "协助翻译", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "点击这里来帮助我们改进 DPIP 的翻译", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "暂时无法取得地震预警资料", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "目前无生效中的地震预警", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "地震预警", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "紧急地震预警", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "本地震度", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "震波", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "未知", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "抵达", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "秒后抵达", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "回放", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "储存", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "图片已储存", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "个性化", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "主题色", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "调整 DPIP 整体的外观与颜色", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "浅色", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "深色", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "跟随系统主题", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "位置", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "所在地", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "调整所在地来接收即时天气信息、地震预估震度以及地震波预估抵达秒数等", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "启用自动定位", - "@settings_location_auto": { - "description": "「設定」路徑 → 「啟用自動定位」標題" - }, - "settings_location_auto_description": "自动定位功能将使用您的装置上的定位功能 ,根据您的地理位置,自动更新您的所在地,提供实时的天气和地震资讯,让您随时掌握当地最新状况。", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "尚未设置", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "县市", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "乡镇市区", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "选择所在地", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "复制 FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "已复制 FCM Token", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "此地震可能引起若干海面变动", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "此地震可能引起海啸 注意后续信息", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "获取地震报告时发生错误,请检查网络连接后再试一次。", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "版本 {version}\n构建 {buildNumber}\n由 ExpTech 探索科技制作\n部分资料来源 CWA(中央气象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "来源语言", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "通知测试", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 通知測試" - }, - "notify_test_description": "测试实时天气信息、地震预警等音效通知", - "@notify_test_description": { - "description": "「我」路徑 → 「通知測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "最大震度 5 弱以上 且\n所在地(乡镇)预估震度 4 以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "最大震度 5 弱以上 且\n所在地(乡镇)预估震度 2 以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "侦测到晃动", - "@eq_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "所在地(县市)实测震度 3 以上", - "@report_description_sound": { - "description": "「我」路徑 → 「通知測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "地震预警音效", - "@eew_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "地震信息", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「通知測試」內容 → 地震資訊" - }, - "other_title": "其他", - "@other_title": { - "description": "「我」路徑 → 「通知測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "海啸警报(警报)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "海啸警报发布时\n沿海地区乡镇", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "海啸警报(注意)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "海啸警报发布时\n上述除外地区", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "发送公告时", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「通知測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "地图目录", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "雷达拼图", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "降水", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "气温", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "湿度", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "气压", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "风向/风速", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "台风", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "海嘯信息", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "图例", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "单位:dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "单位:毫米(mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "单位:摄氏度(°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "单位:相对湿度 (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "单位:百帕 (hPa)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "历史", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3天内的历史事件信息", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "没有历史事件信息", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "当前事件信息", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "当前没有事件信息", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "第 {serial} 报", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "雷电", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "服务区域外", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "服务区域外,仅在台湾各地可用", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "无法获取通知权限", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "再试一次", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "无法获取位置权限", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "取消", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "晴", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "阴", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "更多", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "更多功能列表", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "常规​​​​​", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "调试", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 官网", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "通知推送记录", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "高级选项", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "调整 DPIP 的高级选项", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "启用强震监视器", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "近期无海啸信息", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "海啸警报", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "{id}号 第{serial}报", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "发布", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "更新", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "解除", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "预估海啸到达时间及波高", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "各地观测到的海啸", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "发生时间", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "震级", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "深度", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "一切平安,无事件发生。", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "更新日志", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3 天", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2 天", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24 小时", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12 小时", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6 小时", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3 小时", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1 小时", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10 分钟", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "今天", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "欢迎使用 DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "防灾信息平台", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "下一步", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "我们是谁?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 + 的团体。成员来自台湾北中南、日本、韩国、中国的学生。", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "我们的初衷", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形成现在的样子。", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "注意事项", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP 会传输来自 ExpTech 及中央气象署的各种信息,使用时请注意以下几点。", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "任何信息应以中央气象署发布内容为准。", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可能性,我们会尽力避免此类情况,但不保证一定不会发生。", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "强烈摇晃有概率比通知早抵达用户所在地。", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "地震速报为快速计算之结果,可能存在较大误差,应理解并谨慎使用。", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "任何不被官方所认可的行为均有可能承担法律风险,请务必遵守相关规范。", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "权限", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "我们一直和用户站在一起,为用户的隐私而不断努力。", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "通知", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "在重大灾害发生时以通知来传递即时防灾信息", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "使用定位来自动更新所在地设置,提供当地的即时防灾信息", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "用于存储中央气象署或 ExpTech 提供之数据可视化图片", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "不允许", - "@disagree": { - "description": "「歡迎」頁面 → 強震監視器 → 不同意" - }, - "agree": "接受", - "@agree": { - "description": "「歡迎」頁面 → 強震監視器 → 同意" - }, - "trem_service_description": "在 DPIP 中可以查看来自 ExpTech 旗下 TREM 之强震监视器服务,请详细阅读以下条件,并选择是否激活。", - "@trem_service_description": { - "description": "「歡迎」頁面 → 在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "显示的即时震度不是中央气象署所提供之资料,因此可能与中央气象署观测到的结果不一致,应以中央气象署公布之资讯为主。", - "@real_time_magnitude_warning": { - "description": "「歡迎」頁面 → 顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "强震监视器使用的测站为 ExpTech 所有,不归中央气象署管理,请不要向中央气象署交付故障或意见,会造成他们的困扰。", - "@trem_station_warning": { - "description": "「歡迎」頁面 → 強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "强震监视器是由 TREM(台湾即时地震监测)观测到全台现在的震动,做为即时震度显示的功能,地震发生当下可以透过站点颜色变化,观察地震波传播情形。", - "@trem_monitor_description": { - "description": "「歡迎」頁面 → 強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "由于日常杂讯(汽车、工厂、施工等)影响,平时站点可能也会有颜色变化。另外,由于是即时数据,当下无法判断是否是故障,所以也有可能因为站点故障而改变颜色。", - "@station_noise_warning": { - "description": "「歡迎」頁面 → 由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022 年6 月初开始于全台各地部署站点,TREM-Net(TREM 地震观测网)由两个观测网组成,分别为SE-Net(强震观测网「加速度仪」)及MS-Net(微震观测网「速度仪」),共同纪录地震时的各项数据。", - "@trem_net_deployment": { - "description": "「歡迎」頁面 → 2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "发现新版本", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "更新至最新版本以获得最佳体验", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "当前版本", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "最新版本", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "立即更新", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "暂时跳过", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "更新完成", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP 更新完成,要前往查看更新日志吗?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "稍后再说", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "前往查看", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "公告", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "有新的公告,要前往查看吗?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "目前没有公告", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "贡献者", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "无法载入更新日志,请稍后再试。", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "目前没有更新日志", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "公告详情", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "版本详情", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "无法获取权限", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "存储图片时发生错误", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "确定", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "无搜索结果", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "始终允许", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "永久", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "为了获得更好的自动定位体验,您需要授予「自启动权限」以便让 DPIP 在后台自动设置所在地信息。", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "为了获得更好的 DPIP 体验,您需要授予「自启动权限」以便让 DPIP 在后台正常接收警报通知。", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "自启动权限", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所在地信息。", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "为了获得更好的 DPIP 体验,您需要授予「无限制」以便让 DPIP 在后台有正常接收警讯通知。", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "省电策略", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "通知功能已被拒绝,请移至设置允许权限。", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自启动权限被拒绝,请前往设置允许权限。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省电策略被拒绝,请前往设置允许权限。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "权限请求", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "需要用户手动前往设置开启相关权限。", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "尚未设定所在地", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP 需要设置所在地才能正常运作。点击「前往设置」设置所在地后再试一次。", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "前往设置", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "App 日志", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "复制 FCM Token 时发生错误", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "预估震度图例", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "仅用于地震预警时", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "weak_5": "5弱", - "@weak_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5弱" - }, - "strong_5": "5强", - "@strong_5": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 5強" - }, - "weak_6": "6弱", - "@weak_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6弱" - }, - "strong_6": "6强", - "@strong_6": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 6強" - }, - "lightning_1_5": "5 分钟内对地雷电", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10 分钟内对地雷电", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30 分钟内对地雷电", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "60 分钟内对地雷电", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5 分钟内云间雷电", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10 分钟内云间雷电", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30 分钟内云间雷电", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "60 分钟内云间雷电", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "异常", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "网络连接或服务器异常。", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "重试", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "请您到应用程序设置中找到并允许「照片和媒体」权限后再试一次。", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "没有通知记录", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "紧急", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "通知详细信息", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "通知发送区域", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "紧急通知", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "一般通知", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "请您到应用程序设置中找到并允许「通知」权限后再试一次。", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "请您到应用程序设定中找到并允许「位置」权限后再试一次。", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "没有可用数据", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "此页面呈现服务器各时段状态概览。原始数据每5秒更新一次,此处显示精简版本以优化网络用量。请注意,此信息仅供参考,实际状况应以公告为准。", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "全部正常", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "全部异常", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "部分异常", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "正常", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "不稳定", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "无数据", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "前台自动定位", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "南纬 {lat_abs} 度", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "北纬 {lat} 度", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "西经 {lon_abs} 度", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "东经 {lon} 度", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "延迟:{serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "开发者想说的话", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "关于", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警报区域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "预估最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "发震", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "未启用强震监视器", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "请至设定进阶功能中开启强震监视器。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "点击查看提示信息", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (未启用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "简介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "首先感谢所有下载这个软件的用户,整个开发团队在此献上最诚挚的谢意。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP 是一个以集成所有防灾信息为目标的软件,希望能成为民众生活中不可或缺的一部分。尽管目前完成度不高且困难重重,但我们仍会持续朝这个目标前进。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "在开发软件时,我们投入了大量的金钱、时间与精力,在人事成本、设备费用、云端服务、网络费用等项目上,花费超过50万新台币。为此,我们希望获得用户的支持,在不依赖其他第三方公司的前提下,继续维持营运。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "营利模式", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "为了维持 App 的开发,团队内部进行了多次激烈讨论,思考如何才能营利?我们试图在众多方案中,找出一个适合的营利模式。我们发现,大多数同类型软件采用植入广告的方式来达到营利目的,这使得我们一度考虑采用该方式作为营利的方法。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "营利真的太难了", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "我们调查了一般民众的付费意愿,发现大部分人普遍防灾意识不足,更不会花钱在这件事情上。后台的数据能侧面证实这个说法,据统计,热心赞助的民众大约是整体用户的10万分之1,这使得植入广告似乎成为了最好的解决方法。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "为什么不采用广告?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "当灾害发生时,大家一定不会想要看广告吧?这是我们不植入广告的第一个理由。防灾导向的软件,快速正确地传递防灾信息是首要任务。如果因为广告而导致无法正确掌握防灾信息,这反而和我们的理念相违背。况且,灾害发生时通常通信品质不佳,还要额外浪费网络流量在加载广告,这件事太令人沮丧了。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "对大众收费?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "如果植入广告行不通,那对大众收费呢?变成付费软件?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "首先,作为防灾软件,我们希望尽可能地将防灾信息传递给越多人越好。而且,或许真正需要的人没办法再多出额外的经费承担这项支出,我们希望帮助更多的人。其次,作为开发人员,我们希望软件可以有很多人使用,收费会直接导致大家使用意愿降低。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "如何营利?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "总结上述,我们希望培养出对防灾有兴趣的人、重视防灾的人,支持我们的软件开发,一起往前发展。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 开发者的话", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "获取公告时发生错误:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "无效操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作间隔过短,请稍后再尝试。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "知道了", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "错误: 无法取得 FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "获取通知纪录时发生错误", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自动定位功能需要您允许 DPIP 使用通知权限才能正常运作。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自动定位功能需要您允许 DPIP 使用位置权限才能正常运作。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "位置权限", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "为了获得更好的自动定位体验,您需要将位置权限提升至「{permissionType}」以便让 DPIP 在后台自动设置所在地信息。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自动定位功能需要将位置权限提升至「{permissionType}」以在后台使用。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "错误:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全国", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "欢迎页面", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "帮助我们维护服务器的稳定和长久发展", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "全部", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "筛选器", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "重置", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "应用", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "到底了", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "发送时间", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有效至", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "影响区域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "紧急地震预警(重大)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "紧急地震预警(一般)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "紧急地震预警(无声)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "最大震度 5 弱以上 且\n所在地(乡镇)预估震度 1 以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "地震预警(重大)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "所在地(乡镇)预估震度 4 以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "地震预警(一般)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "所在地(乡镇)预估震度 2 以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "地震预警(无声)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "所在地(乡镇)预估震度 1 以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "所在地(乡镇)实测震度 3 以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(无声通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "所在地(乡镇)实测震度 1 以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "强震监视器(一般)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震报告(一般)", - "@sound_report_minor": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震报告(无声通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "所在地(县市)实测震度 1 以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "气象警报", - "@sound_weather_warning": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "雷雨即时信息", - "@sound_rain_instant": { - "description": "「我」路徑 → 「通知測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天气警特报", - "@sound_weather_alert": { - "description": "「我」路徑 → 「通知測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "所在地(乡镇)发布雷雨即时讯息或\n山区暴雨时", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "所在地(乡镇)发布红色灯号之\n天气警特报", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "所在地(乡镇)发布上述除外灯号之\n天气警特报", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "灾害信息", - "@sound_disaster": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避难信息", - "@sound_evacuation": { - "description": "「我」路徑 → 「通知測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "所在地(乡镇)发布避难警讯时", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "所在地(乡镇)发布避难信息时", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "太平洋海啸消息(无声通知)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "太平洋海啸消息发布时", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「通知測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "其他通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「通知測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大", - "@sound_major": { - "description": "「我」路徑 → 「通知測試」內容 → 重大" - }, - "sunny_with_haze": "晴有霾", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴有薄雾", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴有闪电", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴有雾", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴有雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴有雨雪", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴有大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴有雪珠", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴有冰珠", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴有阵雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴阵雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴有冰雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴有雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷冰雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴大雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴大雷冰雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴天伴有雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "多云", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "多云有霾", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "多云有薄雾", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "多云有雷电", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "多云有雾", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "多云有雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "多云有雨雪", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "多云有大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "多云有雪珠", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "多云有冰珠", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "多云有阵雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "多云阵雨雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "多云有冰雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "多云有雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "多云有雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "多云有雷冰雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "多云大雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "多云大雷冰雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "多云伴有雷", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "阴有霾", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "阴有薄雾", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "阴有雷电", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "阴有雾", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "阴有雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "阴有雨雪", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "阴有大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "阴有雪珠", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "阴有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "阴有阵雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "阴阵雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "阴有冰雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "阴有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "阴有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "阴有雷冰雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "阴大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "阴天有强雷冰雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "阴天伴有雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "取得天气异常", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "雷达合成回波", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "已结束", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "生效中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "存储图片需要您允许 DPIP 使用相片和媒体权限才能正常运作。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "存储图片时发生错误:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "发生错误:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最终)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1级", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2级", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3级", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4级", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7级", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "点击设置所在地", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 观测网实测震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "使用 JMA 震度标准 (0.3秒三分量合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "本资料由 TREM-Net 观测网自动观测结果所得,尚未经人为检视确认,仅供应变之初步参考。实际应以中央气象署发布的信息为准。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "没有有效资料可显示", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH时", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "排行榜", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "资料时间:{time}\n共 {ranked_length} 观测点", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "依", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "降序", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "升序", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "合并至", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "储存", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24小时{type}趋势", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "省电策略", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "允许DPIP在后台持续运行,以便实时防灾通知。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自启动", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "允许DPIP在设备重启或关闭后自动启动,以持续提供防灾通知服务。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - } -} \ No newline at end of file diff --git a/lib/l10n/app_zh_TW.arb b/lib/l10n/app_zh_TW.arb deleted file mode 100644 index 9eeb99c90..000000000 --- a/lib/l10n/app_zh_TW.arb +++ /dev/null @@ -1,1826 +0,0 @@ -{ - "@@locale": "zh_TW", - "@@context": "App level localization strings.", - "datetime_format": "yyyy/MM/dd HH:mm:ss", - "@datetime_format": { - "description": "日期時間顯示格式" - }, - "full_date_format": "yyyy/MM/dd (EEEE)", - "@full_date_format": { - "description": "完整日期顯示格式" - }, - "date_format": "yyyy/MM/dd", - "@date_format": { - "description": "日期顯示格式" - }, - "time_format": "HH:mm:ss", - "@time_format": { - "description": "時間顯示格式" - }, - "home": "首頁", - "@home": { - "description": "「首頁」頁面標題" - }, - "monitor": "強震監視器", - "@monitor": { - "description": "「地圖」路徑 → 強震監視器、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 強震監視器" - }, - "report": "地震報告", - "@report": { - "description": "「更多」路徑 → 地震報告、「設定」路徑 → 「通知測試」內容 →「地震資訊」標題 → 地震報告" - }, - "map": "地圖", - "@map": { - "description": "「地圖」頁面標題" - }, - "me": "我", - "@me": { - "description": "「我」頁面標題" - }, - "settings": "設定", - "@settings": { - "description": "「設定」頁面標題" - }, - "settingsDescription": "調整 DPIP 的運作方式。", - "@settingsDescription": { - "description": "「設定」頁面敘述" - }, - "donate": "贊助我們", - "@donate": { - "description": "「我」頁面 → 「贊助我們」按鈕" - }, - "threads": "在 Threads 上追蹤我們", - "@threads": { - "description": "「我」頁面 → 應用程式資訊 → 「在 Threads 上追蹤我們」按鈕" - }, - "youtube": "YouTube 直播", - "@youtube": { - "description": "「我」頁面 → 應用程式資訊 → 「YouTube 直播」按鈕" - }, - "server_status": "伺服器狀態", - "@server_status": { - "description": "「我」頁面 → 應用程式資訊 → 「伺服器狀態」按鈕" - }, - "third_party_libraries": "第三方套件授權", - "@third_party_libraries": { - "description": "「我」頁面 → 應用程式資訊 → 「第三方套件授權」按鈕" - }, - "report_list_item_subtitle": "M {magnitude} 深度 {depth} km", - "@report_list_item_subtitle": { - "description": "「更多」路徑 → 「地震報告列表」頁面 → 地震報告條目 → 副標題", - "placeholders": { - "magnitude": { - "type": "String", - "description": "規模數值" - }, - "depth": { - "type": "String", - "description": "深度數值" - } - } - }, - "report_with_number": "編號 {reportNumber} 顯著有感地震", - "@report_with_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題", - "placeholders": { - "reportNumber": { - "type": "String" - } - } - }, - "report_without_number": "小區域有感地震", - "@report_without_number": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 副標題" - }, - "open_report_url": "報告頁面", - "@open_report_url": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 開啟報告頁面按鈕 → 提示" - }, - "report_event_time": "發震時間", - "@report_event_time": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 發震時間" - }, - "report_location": "位於", - "@report_location": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 位於、「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 位於" - }, - "report_magnitude": "地震規模", - "@report_magnitude": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震規模" - }, - "report_depth": "震源深度", - "@report_depth": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震源深度" - }, - "report_image": "地震報告圖", - "@report_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖" - }, - "report_intensity_image": "震度圖", - "@report_intensity_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 震度圖" - }, - "report_pga_image": "最大地動加速度圖", - "@report_pga_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動加速度圖" - }, - "report_pgv_image": "最大地動速度圖", - "@report_pgv_image": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 最大地動速度圖" - }, - "report_intensity": "各地震度", - "@report_intensity": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 各地震度" - }, - "settings_locale": "語言", - "@settings_locale": { - "description": "「設定」路徑 → 「語言」標題" - }, - "settings_locale_description": "調整 DPIP 的顯示語言", - "@settings_locale_description": { - "description": "「設定」路徑 → 「語言」副標題敘述" - }, - "settings_display_locale": "顯示語言", - "@settings_display_locale": { - "description": "「設定」路徑 → 「顯示語言」標題" - }, - "settings_locale_translated": "已翻譯 {percentage}", - "@settings_locale_translated": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已翻譯百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_approved": "已校對 {percentage}", - "@settings_locale_approved": { - "description": "「設定」路徑 → 「顯示語言」設定 → 語言選項已校對百分比", - "placeholders": { - "percentage": { - "type": "String", - "description": "已翻譯百分比" - } - } - }, - "settings_locale_crowdin": "協助翻譯", - "@settings_locale_crowdin": { - "description": "「設定」路徑 → 「協助翻譯」標題" - }, - "settings_locale_crowdin_description": "點擊這裡來幫助我們改進 DPIP 的翻譯", - "@settings_locale_crowdin_description": { - "description": "「設定」路徑 → 「協助翻譯」副標題敘述" - }, - "earthquake_warning_error": "暫時無法取得地震速報資料", - "@earthquake_warning_error": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 暫時無法取得地震速報資料" - }, - "no_earthquake_warning": "目前無生效中的地震速報", - "@no_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 目前無生效中的地震速報" - }, - "earthquake_warning": "地震速報", - "@earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 地震速報" - }, - "emergency_earthquake_warning": "緊急地震速報", - "@emergency_earthquake_warning": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 緊急地震速報" - }, - "location_estimate": "所在地預估", - "@location_estimate": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 所在地預估" - }, - "seismic_waves": "震波", - "@seismic_waves": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 震波" - }, - "monitor_unknown": "未知", - "@monitor_unknown": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 未知" - }, - "monitor_arrival": "抵達", - "@monitor_arrival": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 抵達" - }, - "monitor_after_seconds": "秒後抵達", - "@monitor_after_seconds": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 秒後抵達" - }, - "report_replay": "重播", - "@report_replay": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 重播按鈕" - }, - "image_save": "儲存", - "@image_save": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片" - }, - "image_saved": "已儲存圖片", - "@image_saved": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊托盤 → 地震報告圖片 → 提示描述" - }, - "settings_Personalization": "個人化", - "@settings_Personalization": { - "description": "「設定」路徑 → 「個人化」標題" - }, - "settings_theme": "主題色", - "@settings_theme": { - "description": "「設定」路徑 → 「主題色」副標題" - }, - "settings_theme_description": "調整 DPIP 整體的外觀與顏色", - "@settings_theme_description": { - "description": "「設定」路徑 → 「主題色」副標題描述" - }, - "theme_light": "淺色", - "@theme_light": { - "description": "「設定」路徑 → 「主題色」設定 → 淺色" - }, - "theme_dark": "深色", - "@theme_dark": { - "description": "「設定」路徑 → 「主題色」設定 → 深色" - }, - "theme_system": "跟隨系統主題", - "@theme_system": { - "description": "「設定」路徑 → 「主題色」設定 → 跟隨系統主題" - }, - "settings_position": "位置", - "@settings_position": { - "description": "「設定」路徑 → 「位置」標題" - }, - "settings_location": "所在地", - "@settings_location": { - "description": "「設定」路徑 → 「所在地」副標題、「歷史」標題頁面 → 降水量" - }, - "settings_location_description": "調整所在地來接收即時天氣資訊、地震預估震度以及地震波預估抵達秒數等", - "@settings_location_description": { - "description": "「設定」路徑 → 「所在地」副標題敘述" - }, - "settings_location_auto": "自動定位", - "@settings_location_auto": { - "description": "「設定」路徑 → 「自動定位」標題" - }, - "settings_location_auto_description": "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。", - "@settings_location_auto_description": { - "description": "「設定」路徑 → 「啟用自動定位」副標題敘述" - }, - "location_Not_set": "尚未設定", - "@location_Not_set": { - "description": "「設定」路徑 → 「所在地」設定 → 尚未設定" - }, - "location_city": "縣市", - "@location_city": { - "description": "「設定」路徑 → 「所在地」設定 → 縣市" - }, - "location_town": "鄉鎮", - "@location_town": { - "description": "「設定」路徑 → 「所在地」設定 → 鄉鎮" - }, - "location_select": "選擇所在地", - "@location_select": { - "description": "「設定」路徑 → 「所在地」設定 → 選擇所在地" - }, - "settings_fcm": "複製 FCM Token", - "@settings_fcm": { - "description": "「我」頁面標題 → 「FCM」標題" - }, - "settings_copy_fcm": "已複製 FCM Token", - "@settings_copy_fcm": { - "description": "「我」頁面標題 → 「FCM」標題 → 提示描述" - }, - "report_offing": "此地震可能引起若干海面變動", - "@report_offing": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起若干海面變動" - }, - "report_tsunami_attention": "此地震可能引起海嘯 注意後續資訊", - "@report_tsunami_attention": { - "description": "「更多」路徑 → 地震報告 → 詳細資訊 → 此地震可能引起海嘯 注意後續資訊" - }, - "report_error": "取得地震報告時發生錯誤,請檢查網路狀況後再試一次。", - "@report_error": { - "description": "「更多」路徑 → 地震報告 → 取得地震報告時發生錯誤,請檢查網路狀況後再試一次。" - }, - "me_version": "版本 {version}\n組建 {buildNumber}\n由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "@me_version": { - "description": "「我」頁面標題 → 版本 {version}\n組建 {buildNumber}由 ExpTech 探索科技製作\n部分資料來源 CWA(中央氣象署)", - "placeholders": { - "version": { - "type": "String" - }, - "buildNumber": { - "type": "String" - } - } - }, - "source_language": "來源語言", - "@source_language": { - "description": "「設定」路徑 → 「顯示語言」設定 → 來源語言" - }, - "notify_test": "音效測試", - "@notify_test": { - "description": "「我」路徑 → 「通知」標題 → 音效測試" - }, - "notify_test_description": "測試即時天氣資訊、地震速報等音效通知", - "@notify_test_description": { - "description": "「我」路徑 → 「音效測試」副標題敘述 → 測試即時天氣資訊、地震速報等音效通知" - }, - "eew_alert_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 4 以上", - "@eew_alert_description_sound": { - "description": "「我」路徑 → 「音效測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上以 且\n所在地(鄉鎮)預估震度 4 以上" - }, - "eew_description_sound": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上", - "@eew_description_sound": { - "description": "「我」路徑 → 「音效測試」內容 →「地震速報音效」副標題敘述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 2 以上" - }, - "eq_description_sound": "偵測到晃動", - "@eq_description_sound": { - "description": "「我」路徑 → 「音效測試」內容 →「地震資訊」副標題敘述 → 偵測到晃動" - }, - "report_description_sound": "所在地(縣市)實測震度 3 以上", - "@report_description_sound": { - "description": "「我」路徑 → 「音效測試」內容 →「地震資訊」副標題敘述 → 所在地(縣市)實測震度 3 以上" - }, - "eew_sound_title": "地震速報音效", - "@eew_sound_title": { - "description": "「我」路徑 → 「音效測試」內容 → 地震速報音效" - }, - "eew_info_sound_title": "地震資訊", - "@eew_info_sound_title": { - "description": "「我」路徑 → 「音效測試」內容 → 地震資訊" - }, - "other_title": "其他", - "@other_title": { - "description": "「我」路徑 → 「音效測試」內容 → 其他、「設定」路徑 → 其他" - }, - "tsunami_alert_sound": "海嘯警報(警報)", - "@tsunami_alert_sound": { - "description": "「設定」路徑 → 「音效測試」內容 →「災害資訊」標題 → 海嘯警報(警報)" - }, - "tsunami_alert_description_sound": "海嘯警報發布時\n沿海地區鄉鎮", - "@tsunami_alert_description_sound": { - "description": "「設定」路徑 → 「音效測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n沿海地區鄉鎮" - }, - "tsunami_alert2_sound": "海嘯警報(注意)", - "@tsunami_alert2_sound": { - "description": "「設定」路徑 → 「音效測試」內容 →「災害資訊」標題 → 海嘯警報(注意)" - }, - "tsunami_alert2_description_sound": "海嘯警報發布時\n上述除外地區", - "@tsunami_alert2_description_sound": { - "description": "「設定」路徑 → 「音效測試」內容 →「災害資訊」標題 → 海嘯警報發布時\n上述除外地區" - }, - "server_announcement_description_sound": "發送公告時", - "@server_announcement_description_sound": { - "description": "「設定」路徑 → 「音效測試」內容 →「其他通知」標題 → 發送公告時" - }, - "monitor_list": "地圖列表", - "@monitor_list": { - "description": "「地圖」路徑 → 地圖列表" - }, - "radar_monitor": "雷達回波", - "@radar_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 雷達回波" - }, - "precipitation_monitor": "降水", - "@precipitation_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 降水" - }, - "temperature_monitor": "氣溫", - "@temperature_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫" - }, - "humidity_monitor": "濕度", - "@humidity_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 濕度" - }, - "pressure_monitor": "氣壓", - "@pressure_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 氣壓" - }, - "wind_direction_and_speed_monitor": "風向/風速", - "@wind_direction_and_speed_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 風向/風速" - }, - "typhoon_monitor": "颱風", - "@typhoon_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 颱風" - }, - "tsunami_info_monitor": "海嘯資訊", - "@tsunami_info_monitor": { - "description": "「地圖」路徑 → 地圖列表 → 海嘯資訊" - }, - "map_legend": "圖例", - "@map_legend": { - "description": "「地圖」路徑 → 地圖列表 → 「圖例」標題" - }, - "unit_dbz": "單位:dBZ", - "@unit_dbz": { - "description": "「地圖」路徑 → 地圖列表 → 「雷達回波」圖例 → 單位:dBZ" - }, - "unit_mm": "單位:毫米 (mm)", - "@unit_mm": { - "description": "「地圖」路徑 → 地圖列表 → 「降水」圖例 → 單位:毫米 (mm)" - }, - "unit_degrees_c": "單位:攝氏度 (°C)", - "@unit_degrees_c": { - "description": "「地圖」路徑 → 地圖列表 → 「氣溫」圖例 → 單位:攝氏度 (°C)" - }, - "unit_relative_humidity": "單位:相對濕度 (%)", - "@unit_relative_humidity": { - "description": "「地圖」路徑 → 地圖列表 → 「濕度」圖例 → 單位:相對濕度 (%)" - }, - "unit_hpa": "單位:百帕 (hPa)", - "@unit_hpa": { - "description": "「地圖」路徑 → 地圖列表 → 「氣壓」圖例 → 單位:百帕 (hPa)" - }, - "history": "歷史", - "@history": { - "description": "「歷史」頁面標題" - }, - "historical_events": "3天內的歷史事件資訊", - "@historical_events": { - "description": "「歷史」路徑 → 「3天內的歷史事件資訊」標題" - }, - "no_historical_events": "沒有歷史事件資訊", - "@no_historical_events": { - "description": "「歷史」路徑 → 沒有歷史事件資訊" - }, - "current_events": "目前的事件資訊", - "@current_events": { - "description": "「首頁」路徑 → 「目前的事件資訊」標題" - }, - "no_events": "目前沒有事件資訊", - "@no_events": { - "description": "「首頁」路徑 → 「目前沒有事件資訊」描述" - }, - "eew_no_x": "第 {serial} 報", - "@eew_no_x": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 第 {serial} 報", - "placeholders": { - "serial": { - "type": "String" - } - } - }, - "lightning": "閃電", - "@lightning": { - "description": "「地圖」路徑 → 地圖列表 → 閃電" - }, - "out_of_service": "服務區域外", - "@out_of_service": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外" - }, - "out_of_service_only_taiwan": "服務區域外,僅在臺灣各地可用", - "@out_of_service_only_taiwan": { - "description": "「設定」路徑 → 「所在地」設定 → 服務區域外,僅在臺灣各地可用" - }, - "unable_notification": "無法取得通知權限", - "@unable_notification": { - "description": "「通知」設定彈窗 → 無法取得通知權限" - }, - "again": "再試一次", - "@again": { - "description": "「通知」設定彈窗 → 再試一次 and " - }, - "unable_location": "無法取得位置權限", - "@unable_location": { - "description": "「所在地」設定彈窗 → 無法取得位置權限" - }, - "cancel": "取消", - "@cancel": { - "description": "「所在地」設定彈窗 → 取消" - }, - "sunny": "晴", - "@sunny": { - "description": "天氣狀況:晴" - }, - "overcast": "陰", - "@overcast": { - "description": "天氣狀況:陰" - }, - "more": "更多", - "@more": { - "description": "「更多」頁面標題" - }, - "more_features": "更多功能列表", - "@more_features": { - "description": "「更多」路徑 → 「更多功能列表」標題" - }, - "me_general": "一般", - "@me_general": { - "description": "「我」路徑 → 一般、「設定」路徑 → 「通知測試」內容 → 通知測試列表" - }, - "me_debug": "除錯", - "@me_debug": { - "description": "「我」路徑 → 除錯" - }, - "official_web": "ExpTech 官網", - "@official_web": { - "description": "「我」路徑 → ExpTech 官網" - }, - "notification_record": "行動通知推播紀錄", - "@notification_record": { - "description": "「我」路徑 → 行動通知推播紀錄" - }, - "advanced_features": "進階功能", - "@advanced_features": { - "description": "「設定」路徑 → 「進階功能」標題" - }, - "advanced_features_title": "調整 DPIP 的進階功能", - "@advanced_features_title": { - "description": "「設定」路徑 → 「進階功能」副描述" - }, - "enable_monitor": "啟用強震監視器", - "@enable_monitor": { - "description": "「設定」路徑 → 「進階功能」標題 → 啟用強震監視器" - }, - "no_tsunami_information": "近期無海嘯資訊", - "@no_tsunami_information": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_warning": "海嘯警報", - "@tsunami_warning": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 近期無海嘯資訊" - }, - "tsunami_number": "{id}號 第{serial}報", - "@tsunami_number": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → {id}號 第{serial}報", - "placeholders": { - "id": { - "type": "String", - "description": "編號" - }, - "serial": { - "type": "String" - } - } - }, - "tsunami_publish": "發布", - "@tsunami_publish": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發布" - }, - "tsunami_renew": "更新", - "@tsunami_renew": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 更新" - }, - "tsunami_relieve": "解除", - "@tsunami_relieve": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 解除" - }, - "estimated_time_wave": "預估海嘯到達時間及波高", - "@estimated_time_wave": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 預估海嘯到達時間及波高" - }, - "observing_tsunamis": "各地觀測到的海嘯", - "@observing_tsunamis": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 各地觀測到的海嘯" - }, - "occurrence_time": "發生時間", - "@occurrence_time": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 發生時間" - }, - "scale": "規模", - "@scale": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 規模" - }, - "depth": "深度", - "@depth": { - "description": "「地圖」路徑 → 地圖列表 → 「海嘯資訊」圖例 → 資訊托盤 → 深度" - }, - "home_safety": "一切平安,無事件發生。", - "@home_safety": { - "description": "「首頁」路徑 → 「一切平安,無事件發生。」描述" - }, - "update_log": "更新日誌", - "@update_log": { - "description": "「我」路徑 → 更新日誌" - }, - "interval_3_days": "3 天", - "@interval_3_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 天" - }, - "interval_2_days": "2 天", - "@interval_2_days": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 2 天" - }, - "interval_24_hours": "24 小時", - "@interval_24_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 24 小時" - }, - "interval_12_hours": "12 小時", - "@interval_12_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 12 小時" - }, - "interval_6_hours": "6 小時", - "@interval_6_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 6 小時" - }, - "interval_3_hours": "3 小時", - "@interval_3_hours": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 3 小時" - }, - "interval_1_hour": "1 小時", - "@interval_1_hour": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 1 小時" - }, - "interval_10_minutes": "10 分鐘", - "@interval_10_minutes": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 10 分鐘" - }, - "interval_now": "今日", - "@interval_now": { - "description": "「地圖」路徑 → 「降水」標題 → 托盤 → 今日" - }, - "welcome_message": "歡迎使用 DPIP", - "@welcome_message": { - "description": "「歡迎」頁面 → 歡迎使用 DPIP" - }, - "disaster_info_platform": "防災資訊平台", - "@disaster_info_platform": { - "description": "「歡迎」頁面 → 防災資訊平台" - }, - "dpip_description": "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。", - "@dpip_description": { - "description": "「歡迎」頁面 → DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" - }, - "next_step": "下一步", - "@next_step": { - "description": "「歡迎」頁面 → 下一步" - }, - "who_we_are": "我們是誰?", - "@who_we_are": { - "description": "「歡迎」頁面 → 我們是誰?" - }, - "exptech_studio_description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。", - "@exptech_studio_description": { - "description": "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" - }, - "our_mission": "我們的初衷", - "@our_mission": { - "description": "「歡迎」頁面 → 我們的初衷" - }, - "founding_mission": "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。", - "@founding_mission": { - "description": "「歡迎」頁面 → 成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" - }, - "notice": "注意事項", - "@notice": { - "description": "「歡迎」頁面 → 注意事項" - }, - "notice_details": "DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。", - "@notice_details": { - "description": "「歡迎」頁面 → DPIP 將傳遞來自 ExpTech 及中央氣象署的各種資訊,使用時請注意以下幾點。" - }, - "official_info": "任何資訊應以中央氣象署發布之內容為準。", - "@official_info": { - "description": "「歡迎」頁面 → 任何資訊應以中央氣象署發布之內容為準。" - }, - "information_reliability": "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。", - "@information_reliability": { - "description": "「歡迎」頁面 → 根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" - }, - "strong_shake_warning": "強烈搖晃有機率比通知早抵達使用者所在地。", - "@strong_shake_warning": { - "description": "「歡迎」頁面 → 強烈搖晃有機率比通知早抵達使用者所在地。" - }, - "earthquake_alert_warning": "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。", - "@earthquake_alert_warning": { - "description": "「歡迎」頁面 → 地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" - }, - "legal_risks": "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。", - "@legal_risks": { - "description": "「歡迎」頁面 → 任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" - }, - "permission": "權限", - "@permission": { - "description": "「歡迎」頁面 → 權限" - }, - "privacy_commitment": "我們一直和使用者站在一起,為使用者的隱私而不斷努力。", - "@privacy_commitment": { - "description": "「歡迎」頁面 → 我們一直和使用者站在一起,為使用者的隱私而不斷努力。" - }, - "notification": "通知", - "@notification": { - "description": "「歡迎」頁面 → 通知" - }, - "notification_service_description": "在重大災害發生時以通知來傳遞即時防災資訊", - "@notification_service_description": { - "description": "「歡迎」頁面 → 在重大災害發生時以通知來傳遞即時防災資訊" - }, - "location_based_service": "使用定位來自動更新所在地設定,提供當地的即時防災資訊", - "@location_based_service": { - "description": "「歡迎」頁面 → 使用定位來自動更新所在地設定,提供當地的即時防災資訊" - }, - "data_visualization_storage": "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片", - "@data_visualization_storage": { - "description": "「歡迎」頁面 → 用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" - }, - "disagree": "不同意", - "@disagree": { - "description": "強震監視器條款 → 不同意" - }, - "agree": "同意", - "@agree": { - "description": "強震監視器條款 → 同意" - }, - "trem_service_description": "在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。", - "@trem_service_description": { - "description": "在 DPIP 中可以查看來自 ExpTech 旗下 TREM 之強震監視器服務,請詳細閱讀以下條件,並選擇是否啟用。" - }, - "real_time_magnitude_warning": "顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。", - "@real_time_magnitude_warning": { - "description": "顯示的即時震度不是中央氣象署所提供之資料,因此可能與中央氣象署觀測到的結果不一致,應以中央氣象署公布之資訊為主。" - }, - "trem_station_warning": "強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。", - "@trem_station_warning": { - "description": "強震監視器使用之測站為 ExpTech 所有,不歸中央氣象署管理,請不要向中央氣象署傳遞故障或意見,會造成他們的困擾。" - }, - "trem_monitor_description": "強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。", - "@trem_monitor_description": { - "description": "強震監視器是由 TREM(臺灣即時地震監測)觀測到全臺現在的震動,做為即時震度顯示的功能,地震發生當下可以透過站點顏色變化,觀察地震波傳播情形。" - }, - "station_noise_warning": "由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。", - "@station_noise_warning": { - "description": "由於日常雜訊(汽車、工廠、施工等)影響,平時站點可能也會有顏色變化。另外,由於是即時資料,當下無法判斷是否是故障,所以也有可能因為站點故障而改變顏色。" - }, - "trem_net_deployment": "2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。", - "@trem_net_deployment": { - "description": "2022 年 6 月初開始於全臺各地部署站點,TREM-Net(TREM 地震觀測網)由兩個觀測網組成,分別為 SE-Net(強震觀測網「加速度儀」)及 MS-Net(微震觀測網「速度儀」),共同紀錄地震時的各項數據。" - }, - "discover_new_version": "發現新版本", - "@discover_new_version": { - "description": "「發現新版本」頁面 → 發現新版本" - }, - "update_to_latest_version": "更新至最新版本以獲得最佳體驗", - "@update_to_latest_version": { - "description": "「發現新版本」頁面 → 更新至最新版本以獲得最佳體驗" - }, - "current_version": "目前版本", - "@current_version": { - "description": "「發現新版本」頁面 → 目前版本" - }, - "latest_version": "最新版本", - "@latest_version": { - "description": "「發現新版本」頁面 → 最新版本" - }, - "update_now": "立即更新", - "@update_now": { - "description": "「發現新版本」頁面 → 立即更新" - }, - "skip_for_now": "暫時略過", - "@skip_for_now": { - "description": "「發現新版本」頁面 → 暫時略過" - }, - "update_complete": "更新完成", - "@update_complete": { - "description": "「發現新版本」頁面 → 更新完成" - }, - "update_complete_prompt": "DPIP 更新完成,要前往查看更新日誌嗎?", - "@update_complete_prompt": { - "description": "「發現新版本」頁面 → DPIP 更新完成,要前往查看更新日誌嗎?" - }, - "remind_later": "稍後再說", - "@remind_later": { - "description": "「發現新版本」頁面 → 稍後再說" - }, - "go_to_view": "前往查看", - "@go_to_view": { - "description": "「發現新版本」頁面 → 前往查看" - }, - "announcement": "公告", - "@announcement": { - "description": "「我」路徑 → 公告" - }, - "new_announcement_prompt": "有新的公告,要前往查看嗎?", - "@new_announcement_prompt": { - "description": "「新公告」頁面 → 有新的公告,要前往查看嗎?" - }, - "no_announcements": "目前沒有公告", - "@no_announcements": { - "description": "「公告」標題 → 目前沒有公告" - }, - "contributor": "貢獻者", - "@contributor": { - "description": "「我」路徑 → 貢獻者" - }, - "unable_to_load_changelog": "無法載入更新日誌,請稍後再試。", - "@unable_to_load_changelog": { - "description": "「我」路徑 →「更新日誌」標題 → 無法載入更新日誌,請稍後再試。" - }, - "no_changelog": "目前沒有更新日誌", - "@no_changelog": { - "description": "「我」路徑 → 「更新日誌」標題 → 當前沒有任何更新日誌" - }, - "announcement_details": "公告詳情", - "@announcement_details": { - "description": "「我」路徑 → 「公告」標題 → 查看公告的具體內容" - }, - "version_details": "版本詳情", - "@version_details": { - "description": "「我」路徑 → 「更新日誌」標題 → 版本詳情" - }, - "unable_to_obtain_permission": "無法取得權限", - "@unable_to_obtain_permission": { - "description": "當無法獲取應用程式所需的權限時顯示的消息 → 無法取得權限" - }, - "error_saving_image": "儲存圖片時發生錯誤", - "@error_saving_image": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤" - }, - "confirm": "確定", - "@confirm": { - "description": "用於確認操作的按鈕文字 → 儲存圖片時發生錯誤" - }, - "no_search_results": "無搜尋結果", - "@no_search_results": { - "description": "當搜尋無結果時顯示的訊息 → 儲存圖片時發生錯誤" - }, - "always_allow": "一律允許", - "@always_allow": { - "description": "「存取權限彈窗」 → 一律允許" - }, - "always": "永遠", - "@always": { - "description": "「存取權限彈窗」 → 永遠" - }, - "auto_start_permission_info": "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_start_permission_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "auto_start_permission_experience": "為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。", - "@auto_start_permission_experience": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "auto_start_permission": "自啟動權限", - "@auto_start_permission": { - "description": "「存取權限彈窗」 → 自啟動權限" - }, - "auto_location_experience_info": "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。", - "@auto_location_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" - }, - "unlimited_permission_experience_info": "為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。", - "@unlimited_permission_experience_info": { - "description": "「存取權限彈窗」 → 為了獲得更好的 DPIP 體驗,您需要給予「無限制」以便讓 DPIP 在背景有正常接收警訊通知。" - }, - "power_saving_strategy": "省電策略", - "@power_saving_strategy": { - "description": "「存取權限彈窗」 → 省電策略" - }, - "notification_permission_denied": "通知功能已被拒絕,請移至設定允許權限。", - "@notification_permission_denied": { - "description": "「存取權限彈窗」 → 通知功能已被拒絕,請移至設定允許權限。" - }, - "autoStart_permission_denied": "自啟動權限已被拒絕,請移至設定允許權限。", - "@autoStart_permission_denied": { - "description": "「存取權限彈窗」 → 自啟動權限已被拒絕,請移至設定允許權限。" - }, - "batteryOptimization_permission_denied": "省電策略已被拒絕,請移至設定允許權限。", - "@batteryOptimization_permission_denied": { - "description": "「存取權限彈窗」 → 省電策略已被拒絕,請移至設定允許權限。" - }, - "permission_request": "權限請求", - "@permission_request": { - "description": "「存取權限彈窗」 → 權限請求" - }, - "manual_permission_enablement": "需要使用者手動到設定開啟相關權限。", - "@manual_permission_enablement": { - "description": "「存取權限彈窗」 → 需要使用者手動到設定開啟相關權限。" - }, - "location_not_set": "尚未設定所在地", - "@location_not_set": { - "description": "「尚未設定所在地彈窗」 → 尚未設定所在地" - }, - "location_setting_required": "DPIP 需要設定所在地才能正常運作。點擊「前往設定」設定所在地後再試一次。", - "@location_setting_required": { - "description": "提示用戶需要設定所在地才能正常運作的訊息" - }, - "go_to_settings": "前往設定", - "@go_to_settings": { - "description": "引導用戶前往設定的選項" - }, - "app_logs": "App 日誌", - "@app_logs": { - "description": "「我」路徑 → App 日誌" - }, - "copy_fcm_token_error": "複製 FCM Token 時發生錯誤", - "@copy_fcm_token_error": { - "description": "「我」路徑 → 複製 FCM Token 時發生錯誤" - }, - "estimated_intensity_legend": "預估震度圖例", - "@estimated_intensity_legend": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 描述預估震度的圖例" - }, - "only_used_during_earthquake_alerts": "僅用於地震速報時", - "@only_used_during_earthquake_alerts": { - "description": "「地圖」路徑 → 強震監視器 → 「!」圖例 → 此項目僅在地震速報時使用" - }, - "intensity": "{count, select, 5{5弱} 6{5強} 7{6弱} 8{6強} 9{7級} other{{count}級}}", - "@intensity": { - "description": "震度", - "placeholders": { - "count": { - "type": "String" - } - } - }, - "lightning_1_5": "5 分鐘內對地閃電", - "@lightning_1_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的對地閃電" - }, - "lightning_1_10": "10 分鐘內對地閃電", - "@lightning_1_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的對地閃電" - }, - "lightning_1_30": "30 分鐘內對地閃電", - "@lightning_1_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的對地閃電" - }, - "lightning_1_60": "60 分鐘內對地閃電", - "@lightning_1_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的對地閃電" - }, - "lightning_0_5": "5 分鐘內雲間閃電", - "@lightning_0_5": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 5 分鐘內發生的雲間閃電" - }, - "lightning_0_10": "10 分鐘內雲間閃電", - "@lightning_0_10": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 10 分鐘內發生的雲間閃電" - }, - "lightning_0_30": "30 分鐘內雲間閃電", - "@lightning_0_30": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 30 分鐘內發生的雲間閃電" - }, - "lightning_0_60": "60 分鐘內雲間閃電", - "@lightning_0_60": { - "description": "「地圖」路徑 → 地圖列表 → 閃電 → 「!」圖例 → 60 分鐘內發生的雲間閃電" - }, - "abnormal": "異常", - "@abnormal": { - "description": "狀態:異常" - }, - "network_or_server_error": "網路連線或伺服器異常。", - "@network_or_server_error": { - "description": "網路連線或伺服器異常。" - }, - "retry": "重試", - "@retry": { - "description": "重試" - }, - "photo_media_permission_request": "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。", - "@photo_media_permission_request": { - "description": "「更多」路徑 → 地震報告 → 詳細地震報告 → 地震報告請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" - }, - "no_notification_history": "沒有通知紀錄", - "@no_notification_history": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 沒有通知紀錄" - }, - "emergency": "緊急", - "@emergency": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急" - }, - "notification_details": "通知詳細資訊", - "@notification_details": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知詳細資訊" - }, - "notification_area": "通知發送區域", - "@notification_area": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 通知發送區域" - }, - "emergency_notification": "緊急通知", - "@emergency_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 緊急通知" - }, - "general_notification": "一般通知", - "@general_notification": { - "description": "「我」路徑 →「行動通知推播紀錄」標題 → 一般通知" - }, - "please_allow_notification_permission": "請您到應用程式設定中找到並允許「通知」權限後再試一次。", - "@please_allow_notification_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「通知」權限後再試一次。" - }, - "please_allow_location_permission": "請您到應用程式設定中找到並允許「位置」權限後再試一次。", - "@please_allow_location_permission": { - "description": "「設定」路徑 → 請您到應用程式設定中找到並允許「位置」權限後再試一次。" - }, - "no_data_available": "沒有可用的資料", - "@no_data_available": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 沒有可用的資料" - }, - "server_status_overview": "此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。", - "@server_status_overview": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 此頁面呈現伺服器各時段狀態概覽。原始資料每5秒更新一次,此處顯示精簡版本以最佳化網路用量。請注意,此資訊僅供參考,實際狀況應以公告為準。" - }, - "all_normal": "全部正常", - "@all_normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部正常" - }, - "all_abnormal": "全部異常", - "@all_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:全部異常" - }, - "partially_abnormal": "部分異常", - "@partially_abnormal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 伺服器狀態:部分異常" - }, - "normal": "正常", - "@normal": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:正常" - }, - "unstable": "不穩定", - "@unstable": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:不穩定" - }, - "no_data": "無資料", - "@no_data": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 狀態:無資料" - }, - "automatic_foreground_positioning": "前景自動定位", - "@automatic_foreground_positioning": { - "description": "前景自動定位" - }, - "south_latitude": "南緯 {lat_abs} 度", - "@south_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 南緯 {lat_abs} 度", - "placeholders": { - "lat_abs": { - "type": "String" - } - } - }, - "north_latitude": "北緯 {lat} 度", - "@north_latitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 北緯 {lat} 度", - "placeholders": { - "lat": { - "type": "String" - } - } - }, - "west_longitude": "西經 {lon_abs} 度", - "@west_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 西經 {lon_abs} 度", - "placeholders": { - "lon_abs": { - "type": "String" - } - } - }, - "east_longitude": "東經 {lon} 度", - "@east_longitude": { - "description": "「地圖」路徑 → 「海嘯資訊」標題 → 東經 {lon} 度", - "placeholders": { - "lon": { - "type": "String" - } - } - }, - "delay": "延遲: {serviceStatus_count} ms", - "@delay": { - "description": "「我」路徑 → 「伺服器狀態」標題 → 資訊內容 → 延遲: {serviceStatus_count} ms", - "placeholders": { - "serviceStatus_count": { - "type": "String" - } - } - }, - "me_developer": "開發者想說的話", - "@me_developer": { - "description": "「我」路徑 → 「開發者想說的話」標題" - }, - "me_about": "關於", - "@me_about": { - "description": "「我」路徑 → 關於" - }, - "alarm_area": "警報區域", - "@alarm_area": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 警報區域" - }, - "estimated_intensity": "預估最大震度", - "@estimated_intensity": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 預估最大震度" - }, - "time_earthquake": "發震", - "@time_earthquake": { - "description": "「地圖」路徑 → 強震監視器 → 資訊托盤 → 發震" - }, - "no_earthquake_monitor": "未啟用強震監視器", - "@no_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 未啟用強震監視器" - }, - "settings_earthquake_monitor": "請至設定進階功能中開啟強震監視器。", - "@settings_earthquake_monitor": { - "description": "「地圖」路徑 → 強震監視器 → 提示資訊 → 請至設定進階功能中開啟強震監視器。" - }, - "view_prompt_information": "點擊查看提示資訊", - "@view_prompt_information": { - "description": "「地圖」路徑 → 強震監視器 → 點擊查看提示資訊" - }, - "highest": "最高", - "@highest": { - "description": "「首頁」路徑 → 「最高」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最高" - }, - "lowest": "最低", - "@lowest": { - "description": "「首頁」路徑 → 「最低」描述、「排行榜」頁面 → 氣溫資訊頁面 → 最低" - }, - "not_enabled": " (未啟用)", - "@not_enabled": { - "description": "「設定」路徑 → 「通知測試」內容 →「 (未啟用)」副標題 " - }, - "introduction": "簡介", - "@introduction": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 簡介" - }, - "first_gratitude": "首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。", - "@first_gratitude": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先感謝所有下載這個軟體的使用者,整個開發團隊在此獻上最誠摯的謝意。" - }, - "dpip_goal": "DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。", - "@dpip_goal": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 是一個以整合所有防災資訊為目標的軟體,希望能成為民眾生活中不可或缺的一部分。儘管目前完成度不高且困難重重,但我們仍會持續朝這個目標前進。" - }, - "development_investment": "在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。", - "@development_investment": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 在開發軟體時,我們投入了大量的金錢、時間與精力,在人事成本、設備費用、雲端服務、網路費用等項目上,花費超過50萬新台幣。為此,我們希望獲得使用者的支持,在不依賴其他第三方公司的前提下,繼續維持營運。" - }, - "profit_model": "營利模式", - "@profit_model": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利模式" - }, - "profit_discussion": "為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。", - "@profit_discussion": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為了維持 App 的開發,團隊內部進行了多次激烈討論,思考如何才能營利?我們試圖在眾多方案中,找出一個適合的營利模式。我們發現,大多數同類型軟體採用植入廣告的方式來達到營利目的,這使得我們一度考慮採用該方式作為營利的方法。" - }, - "profit_difficulty": "營利真的太難了", - "@profit_difficulty": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 營利真的太難了" - }, - "user_payment_survey": "我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。", - "@user_payment_survey": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 我們調查了一般民眾的付費意願,發現大部分人普遍防災意識不足,更不會花錢在這件事情上。後台的數據能側面證實這個說法,據統計,熱心贊助的民眾大約是整體使用者的10萬分之1,這使得植入廣告似乎成為了最好的解決方法。" - }, - "why_no_ads": "為什麼不採用廣告?", - "@why_no_ads": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 為什麼不採用廣告?" - }, - "no_ads_reason": "當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。", - "@no_ads_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 當災害發生時,大家一定不會想要看廣告吧?這是我們不植入廣告的第一個理由。防災導向的軟體,快速正確地傳遞防災資訊是首要任務。如果因為廣告而導致無法正確掌握防災資訊,這反而和我們的理念相違背。況且,災害發生時通常通訊品質不佳,還要額外浪費網路流量在載入廣告,這件事太令人沮喪了。" - }, - "charge_public": "對大眾收費?", - "@charge_public": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 對大眾收費?" - }, - "no_fee_reason": "如果植入廣告行不通,那對大眾收費呢?變成付費軟體?", - "@no_fee_reason": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如果植入廣告行不通,那對大眾收費呢?變成付費軟體?" - }, - "public_charge_consideration": "首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。", - "@public_charge_consideration": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 首先,作為防災軟體,我們希望盡可能地將防災資訊傳遞給越多人越好。而且,或許真正需要的人沒辦法再多出額外的經費承擔這項支出,我們希望幫助更多的人。其次,作為開發人員,我們希望軟體可以有很多人使用,收費會直接導致大家使用意願降低。" - }, - "how_to_profit": "如何營利?", - "@how_to_profit": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 如何營利?" - }, - "summary": "總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。", - "@summary": { - "description": "「我」路徑 → 「開發者想說的話」內容 → 總結上述,我們希望培養出對防災有興趣的人、重視防災的人,支持我們的軟體開發,一起往前發展。" - }, - "developer_message": "DPIP 開發者的話", - "@developer_message": { - "description": "「我」路徑 → 「開發者想說的話」內容 → DPIP 開發者的話" - }, - "error_fetching_announcement": "獲取公告時發生錯誤:", - "@error_fetching_announcement": { - "description": "「我」路徑 →「公告」標題 → 獲取公告時發生錯誤:" - }, - "invalid_operation": "無效操作", - "@invalid_operation": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 無效操作" - }, - "operation_interval_too_short": "操作間隔過短,請稍後再嘗試。", - "@operation_interval_too_short": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 操作間隔過短,請稍後再嘗試。" - }, - "got_it": "知道了", - "@got_it": { - "description": "「通知測試」 → 「操作時間過短」彈窗 → 知道了" - }, - "error_fcm_token": "錯誤: 無法取得 FCM Token", - "@error_fcm_token": { - "description": "錯誤:無法取得 FCM Token" - }, - "error_fetching_notifications": "獲取通知紀錄時發生錯誤", - "@error_fetching_notifications": { - "description": "「我」路徑 →「行動通知推播紀錄」→ 獲取通知紀錄時發生錯誤" - }, - "auto_location_permission_required": "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。", - "@auto_location_permission_required": { - "description": "「通知權限」彈窗 → 自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。" - }, - "location_permission_needed": "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。", - "@location_permission_needed": { - "description": "「位置權限」彈窗 → 自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。" - }, - "location_permission": "位置權限", - "@location_permission": { - "description": "「位置權限」彈窗 → 用於提示用戶授予位置權限" - }, - "improve_auto_location_experience": "為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "@improve_auto_location_experience": { - "description": "「位置權限」彈窗 → 為了獲得更好的自動定位體驗,您需要將位置權限提升至「{permissionType}」以便讓 DPIP 在背景自動設定所在地資訊。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "auto_location_permission_upgrade_needed": "自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "@auto_location_permission_upgrade_needed": { - "description": "「通知權限」彈窗 → 自動定位功能需要將位置權限提升至「{permissionType}」以在背景使用。", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "error_prefix": "錯誤:", - "@error_prefix": { - "description": "錯誤:前綴" - }, - "home_precipitation": "降水量", - "@home_precipitation": { - "description": "「首頁」頁面 → 降水量" - }, - "history_nationwide": "全國", - "@history_nationwide": { - "description": "「歷史」頁面 → 全國" - }, - "me_welcome": "歡迎頁面", - "@me_welcome": { - "description": "「我」頁面 → 「歡迎頁面」按鈕" - }, - "donate_h2": "幫助我們維護伺服器的穩定和長久發展", - "@donate_h2": { - "description": "「我」頁面 →「幫助我們維護伺服器的穩定和長久發展」描述" - }, - "max_earthquake_intensity": "最大震度", - "@max_earthquake_intensity": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 最大震度" - }, - "report_all": "全部", - "@report_all": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」→ 全部" - }, - "report_filter": "篩選器", - "@report_filter": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」" - }, - "report_filter_reset": "重置", - "@report_filter_reset": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 重置" - }, - "report_filter_apply": "套用", - "@report_filter_apply": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 套用" - }, - "report_end": "到底了", - "@report_end": { - "description": "「更多」路徑 → 地震報告 → 使用「篩選器」 → 到底了" - }, - "history_send_time": "發送時間", - "@history_send_time": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 發送時間" - }, - "history_valid_until": "有效至", - "@history_valid_until": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 有效至" - }, - "history_affected_area": "影響區域", - "@history_affected_area": { - "description": "「歷史」路徑 → 歷史事件資訊列表 → 彈窗事件 → 影響區域" - }, - "sound_eew_alert_major": "緊急地震速報(重大)", - "@sound_eew_alert_major": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(重大)" - }, - "sound_eew_minor": "緊急地震速報(一般)", - "@sound_eew_minor": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(一般)" - }, - "sound_eew_silent": "緊急地震速報(無聲)", - "@sound_eew_silent": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 緊急地震速報(無聲)" - }, - "sound_eew_silent_h2": "最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上", - "@sound_eew_silent_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 「緊急地震速報(無聲)」描述 → 最大震度 5 弱以上 且\n所在地(鄉鎮)預估震度 1 以上" - }, - "sound_earthquake_eew_major": "地震速報(重大)", - "@sound_earthquake_eew_major": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 地震速報(重大)" - }, - "sound_earthquake_eew_major_h2": "所在地(鄉鎮)預估震度 4 以上", - "@sound_earthquake_eew_major_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 「地震速報(重大)」描述 → 所在地(鄉鎮)預估震度 4 以上" - }, - "sound_earthquake_eew_minor": "地震速報(一般)", - "@sound_earthquake_eew_minor": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 地震速報(一般)" - }, - "sound_earthquake_eew_minor_h2": "所在地(鄉鎮)預估震度 2 以上", - "@sound_earthquake_eew_minor_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 2 以上" - }, - "sound_earthquake_eew_silent": "地震速報(無聲)", - "@sound_earthquake_eew_silent": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 地震速報(無聲)" - }, - "sound_earthquake_eew_silent_h2": "所在地(鄉鎮)預估震度 1 以上", - "@sound_earthquake_eew_silent_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「緊急地震速報」標題 → 「地震速報(一般)」描述 → 所在地(鄉鎮)預估震度 1 以上" - }, - "sound_int_report_minor": "震度速報(一般)", - "@sound_int_report_minor": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 震度速報(一般)" - }, - "sound_int_report_minor_h2": "所在地(鄉鎮)實測震度 3 以上", - "@sound_int_report_minor_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 「震度速報(一般)」描述 → 所在地(鄉鎮)實測震度 3 以上" - }, - "sound_int_report_silent": "震度速報(無聲通知)", - "@sound_int_report_silent": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 震度速報(無聲通知)" - }, - "sound_int_report_silent_h2": "所在地(鄉鎮)實測震度 1 以上", - "@sound_int_report_silent_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 「震度速報(無聲通知)」描述 → 所在地(鄉鎮)實測震度 1 以上。" - }, - "sound_monitor_minor": "強震監視器(一般)", - "@sound_monitor_minor": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 強震監視器(一般)" - }, - "sound_report_minor": "地震報告(一般)", - "@sound_report_minor": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 地震報告(一般)" - }, - "sound_report_silent": "地震報告(無聲通知)", - "@sound_report_silent": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 地震報告(無聲通知)" - }, - "sound_report_silent_h2": "所在地(縣市)實測震度 1 以上", - "@sound_report_silent_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「地震資訊」標題 → 「地震報告(無聲通知)」描述 → 所在地(縣市)實測震度 1 以上" - }, - "sound_weather_warning": "氣象警報", - "@sound_weather_warning": { - "description": "「我」路徑 → 「音效測試」內容 → 「氣象警報」標題" - }, - "sound_rain_instant": "雷雨即時訊息", - "@sound_rain_instant": { - "description": "「我」路徑 → 「音效測試」內容 → 「雷雨即時訊息」標題" - }, - "sound_weather_alert": "天氣警特報", - "@sound_weather_alert": { - "description": "「我」路徑 → 「音效測試」內容 → 「天氣警特報」標題" - }, - "sound_rain_minor_h2": "所在地(鄉鎮)發布雷雨即時訊息或\n山區暴雨時", - "@sound_rain_minor_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「氣象警報」標題 → 「雷雨即時訊息(一般)」描述 → 所在地(鄉鎮)發布雷雨即時訊息\n或山區暴雨時" - }, - "sound_weather_major_h2": "所在地(鄉鎮)發布紅色燈號之\n天氣警特報", - "@sound_weather_major_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「氣象警報」標題 → 「天氣警特報(重大)」描述 → 所在地(鄉鎮)發布紅色燈號之天氣警特報" - }, - "sound_weather_minor_h2": "所在地(鄉鎮)發布上述除外燈號之\n天氣警特報", - "@sound_weather_minor_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「氣象警報」標題 → 「天氣警特報(一般)」描述 → 所在地(鄉鎮)發布上述除外燈號之天氣警特報" - }, - "sound_disaster": "災害資訊", - "@sound_disaster": { - "description": "「我」路徑 → 「音效測試」內容 → 「災害資訊」標題" - }, - "sound_evacuation": "避難資訊", - "@sound_evacuation": { - "description": "「我」路徑 → 「音效測試」內容 → 「避難資訊」標題" - }, - "sound_evacuation_major_h2": "所在地(鄉鎮)發布避難警訊時", - "@sound_evacuation_major_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「災害資訊」標題 → 「避難資訊(重大)」描述 → 所在地(鄉鎮)發布避難警訊時" - }, - "sound_evacuation_minor_h2": "所在地(鄉鎮)發布避難資訊時", - "@sound_evacuation_minor_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「災害資訊」標題 → 「避難資訊(一般)」描述 → 所在地(鄉鎮)發布避難資訊時" - }, - "sound_tsunami_silent": "太平洋海嘯消息(無聲通知)", - "@sound_tsunami_silent": { - "description": "「我」路徑 → 「音效測試」內容 → 「海嘯警報」標題 → 太平洋海嘯消息(無聲通知)" - }, - "sound_tsunami_silent_h2": "太平洋海嘯消息發布時", - "@sound_tsunami_silent_h2": { - "description": "「我」路徑 → 「音效測試」內容 → 「海嘯警報」標題 → 「太平洋海嘯消息(無聲通知)」描述 → 太平洋海嘯消息發布時" - }, - "sound_other_notifications": "其他通知", - "@sound_other_notifications": { - "description": "「我」路徑 → 「音效測試」內容 → 「其他通知」標題 " - }, - "sound_major": "重大", - "@sound_major": { - "description": "「我」路徑 → 「音效測試」內容 → 重大" - }, - "sunny_with_haze": "晴有霾", - "@sunny_with_haze": { - "description": "天氣狀況:晴天伴有霾" - }, - "sunny_with_mist": "晴有靄", - "@sunny_with_mist": { - "description": "天氣狀況:晴天伴有靄" - }, - "sunny_with_lightning": "晴有閃電", - "@sunny_with_lightning": { - "description": "天氣狀況:晴天伴有閃電" - }, - "sunny_with_fog": "晴有霧", - "@sunny_with_fog": { - "description": "天氣狀況:晴天伴有霧" - }, - "sunny_with_rain": "晴有雨", - "@sunny_with_rain": { - "description": "天氣狀況:晴天伴有雨" - }, - "sunny_with_sleet": "晴有雨雪", - "@sunny_with_sleet": { - "description": "天氣狀況:晴天伴有雨夾雪" - }, - "sunny_with_heavy_snow": "晴有大雪", - "@sunny_with_heavy_snow": { - "description": "天氣狀況:晴天伴有大雪" - }, - "sunny_with_snow_pellets": "晴有雪珠", - "@sunny_with_snow_pellets": { - "description": "天氣狀況:晴天伴有雪珠" - }, - "sunny_with_ice_pellets": "晴有冰珠", - "@sunny_with_ice_pellets": { - "description": "天氣狀況:晴天伴有冰珠" - }, - "sunny_with_snow_showers": "晴有陣雪", - "@sunny_with_snow_showers": { - "description": "天氣狀況:晴天伴有陣雪" - }, - "sunny_with_sleet_showers": "晴陣雨雪", - "@sunny_with_sleet_showers": { - "description": "天氣狀況:晴天伴有陣雨夾雪" - }, - "sunny_with_hail": "晴有雹", - "@sunny_with_hail": { - "description": "天氣狀況:晴天伴有冰雹" - }, - "sunny_with_thunderstorm": "晴有雷雨", - "@sunny_with_thunderstorm": { - "description": "天氣狀況:晴天伴有雷雨" - }, - "sunny_with_thundersnow": "晴有雷雪", - "@sunny_with_thundersnow": { - "description": "天氣狀況:晴天伴有雷雪" - }, - "sunny_with_thunderhail": "晴有雷雹", - "@sunny_with_thunderhail": { - "description": "天氣狀況:晴天伴有雷雹" - }, - "sunny_with_severe_thunderstorm": "晴大雷雨", - "@sunny_with_severe_thunderstorm": { - "description": "天氣狀況:晴天伴有強雷雨" - }, - "sunny_with_severe_thunderhail": "晴大雷雹", - "@sunny_with_severe_thunderhail": { - "description": "天氣狀況:晴天伴有強雷雹" - }, - "sunny_with_thunder": "晴天伴有雷", - "@sunny_with_thunder": { - "description": "天氣狀況:晴天伴有雷" - }, - "partly__cloudy": "多雲", - "@partly__cloudy": { - "description": "天氣狀況:多雲" - }, - "partly_cloudy_with_haze": "多雲有霾", - "@partly_cloudy_with_haze": { - "description": "天氣狀況:多雲伴有霾" - }, - "partly_cloudy_with_mist": "多雲有靄", - "@partly_cloudy_with_mist": { - "description": "天氣狀況:多雲伴有靄" - }, - "partly_cloudy_with_lightning": "多雲有閃電", - "@partly_cloudy_with_lightning": { - "description": "天氣狀況:多雲伴有閃電" - }, - "partly_cloudy_with_fog": "多雲有霧", - "@partly_cloudy_with_fog": { - "description": "天氣狀況:多雲伴有霧" - }, - "partly_cloudy_with_rain": "多雲有雨", - "@partly_cloudy_with_rain": { - "description": "天氣狀況:多雲伴有雨" - }, - "partly_cloudy_with_sleet": "多雲有雨雪", - "@partly_cloudy_with_sleet": { - "description": "天氣狀況:多雲伴有雨夾雪" - }, - "partly_cloudy_with_heavy_snow": "多雲有大雪", - "@partly_cloudy_with_heavy_snow": { - "description": "天氣狀況:多雲伴有大雪" - }, - "partly_cloudy_with_snow_pellets": "多雲有雪珠", - "@partly_cloudy_with_snow_pellets": { - "description": "天氣狀況:多雲伴有雪珠" - }, - "partly_cloudy_with_ice_pellets": "多雲有冰珠", - "@partly_cloudy_with_ice_pellets": { - "description": "天氣狀況:多雲伴有冰珠" - }, - "partly_cloudy_with_snow_showers": "多雲有陣雪", - "@partly_cloudy_with_snow_showers": { - "description": "天氣狀況:多雲伴有陣雪" - }, - "partly_cloudy_with_sleet_showers": "多雲陣雨雪", - "@partly_cloudy_with_sleet_showers": { - "description": "天氣狀況:多雲伴有陣雨夾雪" - }, - "partly_cloudy_with_hail": "多雲有雹", - "@partly_cloudy_with_hail": { - "description": "天氣狀況:多雲伴有冰雹" - }, - "partly_cloudy_with_thunderstorm": "多雲有雷雨", - "@partly_cloudy_with_thunderstorm": { - "description": "天氣狀況:多雲伴有雷雨" - }, - "partly_cloudy_with_thundersnow": "多雲有雷雪", - "@partly_cloudy_with_thundersnow": { - "description": "天氣狀況:多雲伴有雷雪" - }, - "partly_cloudy_with_thunderhail": "多雲有雷雹", - "@partly_cloudy_with_thunderhail": { - "description": "天氣狀況:多雲伴有雷雹" - }, - "partly_cloudy_with_severe_thunderstorm": "多雲大雷雨", - "@partly_cloudy_with_severe_thunderstorm": { - "description": "天氣狀況:多雲伴有強雷雨" - }, - "partly_cloudy_with_severe_thunderhail": "多雲大雷雹", - "@partly_cloudy_with_severe_thunderhail": { - "description": "天氣狀況:多雲伴有強雷雹" - }, - "partly_cloudy_with_thunder": "多雲伴有雷", - "@partly_cloudy_with_thunder": { - "description": "天氣狀況:多雲伴有雷" - }, - "overcast_with_haze": "陰有霾", - "@overcast_with_haze": { - "description": "天氣狀況:陰天伴有霾" - }, - "overcast_with_mist": "陰有靄", - "@overcast_with_mist": { - "description": "天氣狀況:陰天伴有靄" - }, - "overcast_with_lightning": "陰有閃電", - "@overcast_with_lightning": { - "description": "天氣狀況:陰天伴有閃電" - }, - "overcast_with_fog": "陰有霧", - "@overcast_with_fog": { - "description": "天氣狀況:陰天伴有霧" - }, - "overcast_with_rain": "陰有雨", - "@overcast_with_rain": { - "description": "天氣狀況:陰天伴有雨" - }, - "overcast_with_sleet": "陰有雨雪", - "@overcast_with_sleet": { - "description": "天氣狀況:陰天伴有雨夾雪" - }, - "overcast_with_heavy_snow": "陰有大雪", - "@overcast_with_heavy_snow": { - "description": "天氣狀況:陰天伴有大雪" - }, - "overcast_with_snow_pellets": "陰有雪珠", - "@overcast_with_snow_pellets": { - "description": "天氣狀況:陰天伴有雪珠" - }, - "overcast_with_ice_pellets": "陰有冰珠", - "@overcast_with_ice_pellets": { - "description": "天氣狀況:陰天伴有冰珠" - }, - "overcast_with_snow_showers": "陰有陣雪", - "@overcast_with_snow_showers": { - "description": "天氣狀況:陰天伴有陣雪" - }, - "overcast_with_sleet_showers": "陰陣雨雪", - "@overcast_with_sleet_showers": { - "description": "天氣狀況:陰天伴有陣雨夾雪" - }, - "overcast_with_hail": "陰有雹", - "@overcast_with_hail": { - "description": "天氣狀況:陰天伴有冰雹" - }, - "overcast_with_thunderstorm": "陰有雷雨", - "@overcast_with_thunderstorm": { - "description": "天氣狀況:陰天伴有雷雨" - }, - "overcast_with_thundersnow": "陰有雷雪", - "@overcast_with_thundersnow": { - "description": "天氣狀況:陰天伴有雷雪" - }, - "overcast_with_thunderhail": "陰有雷雹", - "@overcast_with_thunderhail": { - "description": "天氣狀況:陰天伴有雷雹" - }, - "overcast_with_severe_thunderstorm": "陰大雷雨", - "@overcast_with_severe_thunderstorm": { - "description": "天氣狀況:陰天伴有強雷雨" - }, - "overcast_with_severe_thunderhail": "陰大雷雹", - "@overcast_with_severe_thunderhail": { - "description": "天氣狀況:陰天伴有強雷雹" - }, - "overcast_with_thunder": "陰天伴有雷", - "@overcast_with_thunder": { - "description": "天氣狀況:陰天伴有雷" - }, - "get_weather_abnormal": "取得天氣異常", - "@get_weather_abnormal": { - "description": "取得天氣異常" - }, - "map_average": "平均", - "@map_average": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 平均" - }, - "radar_synthetic_echo": "雷達合成回波", - "@radar_synthetic_echo": { - "description": "「天氣警特報」地圖解釋 → 雷達合成回波" - }, - "completed": "已結束", - "@completed": { - "description": "「天氣警特報」狀態 → 已結束" - }, - "active": "生效中", - "@active": { - "description": "「天氣警特報」狀態 → 生效中" - }, - "save_image_permission": "儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。", - "@save_image_permission": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片需要您允許 DPIP 使用相片和媒體權限才能正常運作。" - }, - "save_image_error": "儲存圖片時發生錯誤:", - "@save_image_error": { - "description": "當儲存圖片失敗時顯示的錯誤消息 → 儲存圖片時發生錯誤:" - }, - "error_occurred": "發生錯誤:", - "@error_occurred": { - "description": "Weather Status: An error occurred:" - }, - "history_final": "(最終)", - "@history_final": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → (最終)" - }, - "level_1": "1級", - "@level_1": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 1級" - }, - "level_2": "2級", - "@level_2": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 2級" - }, - "level_3": "3級", - "@level_3": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 3級" - }, - "level_4": "4級", - "@level_4": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 4級" - }, - "level_7": "7級", - "@level_7": { - "description": "「更多」路徑 → 地震報告 → 「篩選器」圖例 → 彈出資訊 → 7級" - }, - "home_click_settings": "點擊設定所在地", - "@home_click_settings": { - "description": "「首頁」路徑 → 點擊設定所在地" - }, - "history_earthquake_intensity": "TREM 觀測網實測震度", - "@history_earthquake_intensity": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → TREM 觀測網實測震度" - }, - "history_earthquake_intensity_h2": "使用 JMA 震度標準 (0.3秒三分量合成加速度)", - "@history_earthquake_intensity_h2": { - "description": "「歷史」路徑 → 「震度速報」內容 → 「i」圖例 → 使用 JMA 震度標準 (0.3秒三分量合成加速度)" - }, - "history_seismic_intensity_reference": "本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。", - "@history_seismic_intensity_reference": { - "description": "「歷史」路徑 → 「震度速報」內容 → 資訊托盤 → 本資料係由 TREM-Net 觀測網自動觀測結果所得,尚未經人為檢視確認,僅供應變之初步參考。實際應以中央氣象署發布之資訊為準。" - }, - "map_no_data": "沒有有效資料可顯示", - "@map_no_data": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → 沒有有效資料可顯示" - }, - "map_hh_time": "HH時", - "@map_hh_time": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → HH時" - }, - "ranking": "排行榜", - "@ranking": { - "description": "「排行榜」頁面 → 標題" - }, - "ranking_time": "資料時間:{time}\n共 {ranked_length} 觀測點", - "@ranking_time": { - "description": "「排行榜」頁面 → 資料時間:{time}\n共 {ranked_length} 觀測點", - "placeholders": { - "time": { - "type": "String" - }, - "ranked_length": { - "type": "String" - } - } - }, - "according": "依", - "@according": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 依" - }, - "ranking_descending": "降冪", - "@ranking_descending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 降冪" - }, - "ranking_ascending": "升冪", - "@ranking_ascending": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 升冪" - }, - "ranking_merge_into": "合併至", - "@ranking_merge_into": { - "description": "「排行榜」頁面 → 氣溫/風速資訊頁面 → 合併至" - }, - "permission_storage": "儲存", - "@permission_storage": { - "description": "「歡迎」頁面 → 儲存" - }, - "hours_24_trend": "24小時{type}趨勢", - "@hours_24_trend": { - "description": "「地圖」路徑 → 地圖列表 → 氣溫 → 點擊測站 → 資訊托盤 → '24小時${dataTypeToChineseMap[selectedDataType]}趨勢", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "power_saving_position": "省電策略", - "@power_saving_position": { - "description": "「歡迎」頁面 → 省電策略" - }, - "power_saving_position_text": "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。", - "@power_saving_position_text": { - "description": "「歡迎」頁面 → 允許DPIP在背景中持續運行,以便即時防災通知資訊。" - }, - "automatic_start_position": "自動化啟動", - "@automatic_start_position": { - "description": "「歡迎」頁面 → 自動化啟動" - }, - "automatic_start_position_text": "允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。", - "@automatic_start_position_text": { - "description": "「歡迎」頁面 → 允許 DPIP 在設備重新啟動或關閉後自動啟動,以持續提供防災通知服務。" - }, - "notify_eew": "緊急地震速報", - "@notify_eew": { - "description": "「設定」頁面 → 通知設定 → 緊急地震速報" - }, - "notify_monitor": "強震監視器", - "@notify_monitor": { - "description": "「設定」頁面 → 通知設定 → 強震監視器" - }, - "notify_report": "地震報告", - "@notify_eew": { - "description": "「設定」頁面 → 通知設定 → 地震報告" - }, - "notify_intensity": "震度速報", - "@notify_intensity": { - "description": "「設定」頁面 → 通知設定 → 震度速報" - }, - "notify_thunderstorm": "雷雨即時訊息", - "@notify_thunderstorm": { - "description": "「設定」頁面 → 通知設定 → 雷雨即時訊息" - }, - "notify_advisory": "天氣警特報", - "@notify_advisory": { - "description": "「設定」頁面 → 通知設定 → 天氣警特報" - }, - "notify_evacuation": "避難資訊", - "@notify_evacuation": { - "description": "「設定」頁面 → 通知設定 → 避難資訊" - }, - "notify_tsunami": "海嘯資訊", - "@notify_tsunami": { - "description": "「設定」頁面 → 通知設定 → 海嘯資訊" - } -} \ No newline at end of file diff --git a/lib/utils/extensions/build_context.dart b/lib/utils/extensions/build_context.dart index 33f733320..49275edb2 100644 --- a/lib/utils/extensions/build_context.dart +++ b/lib/utils/extensions/build_context.dart @@ -2,11 +2,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:dpip/l10n/app_localizations.dart'; import 'package:dpip/utils/extensions/go_router.dart'; extension CommonContext on BuildContext { - AppLocalizations get i18n => AppLocalizations.of(this)!; ThemeData get theme => Theme.of(this); NavigatorState get navigator => Navigator.of(this); ColorScheme get colors => Theme.of(this).colorScheme; diff --git a/pubspec.yaml b/pubspec.yaml index 76368056e..ec4261eda 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -84,7 +84,6 @@ dev_dependencies: lint: ^2.0.0 flutter: - generate: true uses-material-design: true assets: # localizations diff --git a/tools/update_translations.sh b/tools/update_translations.sh index edaf206ce..943fd6162 100755 --- a/tools/update_translations.sh +++ b/tools/update_translations.sh @@ -37,7 +37,7 @@ fi # .po 檔案所在目錄 PO_DIR="./assets/translations" -POT_FILE="$PO_DIR/strings.pot" +POT_FILE="./.crowdin/strings.pot" # 執行 i18n 擴充功能匯入器 echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot${RESET}" From 813a091ebf25339b45230d766ab9ec2c0e6b35f9 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 18:23:02 +0800 Subject: [PATCH 29/59] chore: remove duplicated entries --- .crowdin/location_names.csv | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.crowdin/location_names.csv b/.crowdin/location_names.csv index 7679b00aa..53f69b829 100644 --- a/.crowdin/location_names.csv +++ b/.crowdin/location_names.csv @@ -11,7 +11,6 @@ 臺南,臺南,Tainan,,,,, 桃園,桃園,Taoyuan,,,,, 嘉義,嘉義,Chiayi,,,,, -嘉義,嘉義,Chiayi,,,,, 金門,金門,Kinmen,,,,, 高雄,高雄,Kaohsiung,,,,, 臺東,臺東,Taitung,,,,, @@ -20,7 +19,6 @@ 新竹,新竹,Hsinchu,,,,, 臺中,臺中,Taichung,,,,, 苗栗,苗栗,Miaoli,,,,, -新竹,新竹,Hsinchu,,,,, 成功,成功,Chenggong,,,,, 佳冬,佳冬,Jiadong,,,,, 麥寮,麥寮,Mailiao,,,,, @@ -41,7 +39,6 @@ 小港,小港,Xiaogang,,,,, 蘇澳,蘇澳,Su'ao,,,,, 五結,五結,Wujie,,,,, -宜蘭,宜蘭,Yilan,,,,, 壯圍,壯圍,Zhuangwei,,,,, 南竿,南竿,Nangan,,,,, 莒光,莒光,Juguang,,,,, @@ -66,7 +63,6 @@ 湖西,湖西,Huxi,,,,, 金峰,金峰,Jinfeng,,,,, 太麻里,太麻里,Taimali,,,,, -苗栗,苗栗,Miaoli,,,,, 卓蘭,卓蘭,Zhuolan,,,,, 大湖,大湖,Dahu,,,,, 公館,公館,Gongguan,,,,, @@ -76,7 +72,6 @@ 西湖,西湖,Xihu,,,,, 造橋,造橋,Zaoqiao,,,,, 獅潭,獅潭,Shitan,,,,, -彰化,彰化,Changhua,,,,, 和美,和美,Hemei,,,,, 線西,線西,Xianxi,,,,, 伸港,伸港,Shengang,,,,, @@ -96,7 +91,6 @@ 大城,大城,Dacheng,,,,, 竹塘,竹塘,Zhutang,,,,, 溪州,溪州,Xizhou,,,,, -南投,南投,Nantou,,,,, 埔里,埔里,Puli,,,,, 草屯,草屯,Caotun,,,,, 竹山,竹山,Zhushan,,,,, @@ -137,7 +131,6 @@ 梅山,梅山,Meishan,,,,, 大埔,大埔,Dapu,,,,, 阿里山,阿里山,Alishan,,,,, -屏東,屏東,Pingtung,,,,, 潮州,潮州,Chaozhou,,,,, 長治,長治,Changzhi,,,,, 麟洛,麟洛,Linluo,,,,, @@ -198,7 +191,6 @@ 滿州,滿州,Manzhou,,,,, 枋山,枋山,Fangshan,,,,, 牡丹,牡丹,Mudan,,,,, -臺東,臺東,Taitung,,,,, 卑南,卑南,Beinan,,,,, 東河,東河,Donghe,,,,, 吉安,吉安,Ji'an,,,,, @@ -236,7 +228,6 @@ 平溪,平溪,Pingxi,,,,, 烏來,烏來,Wulai,,,,, 豐原,豐原,Fengyuan,,,,, -東勢,東勢,Dongshi,,,,, 后里,后里,Houli,,,,, 神岡,神岡,Shengang,,,,, 新社,新社,Xinshe,,,,, @@ -301,12 +292,9 @@ 中西,中西,West Central,,,,, 大溪,大溪,Daxi,,,,, 八德,八德,Bade,,,,, -桃園,桃園,Taoyuan,,,,, 大園,大園,Dayuan,,,,, 楊梅,楊梅,Yangmei,,,,, 七堵,七堵,Qidu,,,,, -仁愛,仁愛,Ren'ai,,,,, -信義,信義,Xinyi,,,,, 中正,中正,Zhongzheng,,,,, 中山,中山,Zhongshan,,,,, 安樂,安樂,Anle,,,,, @@ -346,10 +334,8 @@ 潭子,潭子,Tanzi,,,,, 萬華,萬華,Wanhua,,,,, 松山,松山,Songshan,,,,, -大同,大同,Datong,,,,, 士林,士林,Shilin,,,,, 北投,北投,Beitou,,,,, -花蓮,花蓮,Hualien,,,,, 新城,新城,Xincheng,,,,, 善化,善化,Shanhua,,,,, 山上,山上,Shanshang,,,,, From b656f2b3966d0287c08101a62f98f0b5d3d544b0 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 18:25:58 +0800 Subject: [PATCH 30/59] fix: encoding --- .crowdin/location_names.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.crowdin/location_names.csv b/.crowdin/location_names.csv index 53f69b829..a8a3cc0d7 100644 --- a/.crowdin/location_names.csv +++ b/.crowdin/location_names.csv @@ -1,4 +1,4 @@ -key,zh-Hant,en,ja,ko,ru,vi,zh-Hans +key,zh-Hant,en,ja,ko,ru,vi,zh-Hans 連江,連江,Lienchiang,,,,, 宜蘭,宜蘭,Yilan,,,,, 彰化,彰化,Changhua,,,,, From 91c8a723bd7a2d7f4d6582344813b1176a1178d9 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Wed, 13 Aug 2025 21:29:14 +0800 Subject: [PATCH 31/59] New Crowdin updates (#379) * New translations strings.pot (Japanese) * New translations strings.pot (Korean) * New translations strings.pot (Russian) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (English) * New translations strings.pot (Vietnamese) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) * New translations strings.pot (Japanese) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) * New translations strings.pot (Japanese) * New translations strings.pot (Chinese Simplified) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) --- assets/translations/en.po | 951 ++++------ assets/translations/ja.po | 961 +++++----- assets/translations/ko.po | 919 ++++----- assets/translations/location_names.csv | 756 ++++---- assets/translations/ru.po | 775 ++++---- assets/translations/vi.po | 907 ++++----- assets/translations/weather_station_names.csv | 1636 ++++++++--------- assets/translations/zh-Hans.po | 938 +++++----- 8 files changed, 3568 insertions(+), 4275 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index 71c28a3bf..6cb0410a7 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -1,1492 +1,1343 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-11 02:40\n" -"Language-Team: English\n" -"Language: en_US\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: en\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: English\n" +"Language: en_US\n" +"PO-Revision-Date: 2025-08-13 10:04\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Current Location" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "Theme" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "Language" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "Unit" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "Map" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "Notifications" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "Earthquake Early Warning" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "Strong Earthquake Monitor" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "Earthquake Reports" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "Earthquake Intensity Report" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "Thunderstorm Advisory" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "Weather Advisory" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "Disaster Prevention Information Platform" +msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "Tsunami information" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "Announcements" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "Support Us" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "Settings" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "Receive All" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "Off" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "Category" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "Intensity 1 or higher at current location" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "Tsunami information, Tsunami warning" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "Tsunami warning only" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "Receive for current location" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "Intensity 4 or higher at current location" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "Sound Test" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "When sending an announcement" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"The sound test is a local notification performed on the device, used only to " -"confirm whether sound can be played properly when receiving alerts. This " -"test does not send any requests to any server" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "Please set your current location to enable notifications" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "Earthquake Warning" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "Earthquake" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "Weather" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "Tsunami" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "Other" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "Severe" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "When a tsunami warning is issued for coastal towns and townships" +msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "General" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "When the Pacific information is issued" +msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "Pacific Tsunami Information (Silent Notification)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "When the Pacific information is issued" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "Strong Earthquake Monitor(General)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "Shaking detected" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "Intensity Report" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "Local (City/Town/District) measured intensity is greater than 3" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "Intensity Report (Silent)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "Local (City/Town/District) measured intensity is greater than 1" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "Earthquake Report (General)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "Local (Municipality/County) measured intensity is greater than 3" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "Earthquake Report (Silent)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "Local (Municipality/County) measured intensity is greater than 1" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "Updated notification setting" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "Failed To Update Notification Settings" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 4" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Emergency Earthquake Early Warning (General)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 2" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Emergency Earthquake Early Warning (Silent)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 1" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 4" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "Earthquake Early Warning (General)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 2" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "Earthquake Early Warning (Silent)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Local (City/Town/District) estimated intensity is greater than 1" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" -msgstr "When the local area(township) issues an evacuating warning" +msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" -msgstr "When the local area(township) issues an evacuating warning" +msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"The location (township) issues a red signal\n" +msgstr "The location (township) issues a red signal\n" "Weather Warning" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"The location (township) where the above-mentioned exceptions are issued\n" +msgstr "The location (township) where the above-mentioned exceptions are issued\n" "Weather Warning" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" msgstr "" -"The location (township) issues instant thunderstorm information or\n" -"Heavy rain in mountainous areas" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" -"The location (township) issues instant thunderstorm information or\n" -"Heavy rain in mountainous areas" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "Use Fahrenheit" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "Switch temperature display to use Fahrenheit (℉)" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "Display Language" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "System Language" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "Help us translate" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "Click here to help us improve the translation of DPIP" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "Select Language" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Translated {translated} ・ Approved {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "Source Language" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "Unable to connect to the store, please try again later" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "Unable to find the item, please try again later" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "Reload" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "Loading store items" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"As an app dedicated to providing real-time earthquake information, DPIP " -"currently has no advertising or other profit models. In order to maintain " -"high-quality services, we need to bear the costs of server operation, " -"seismic data acquisition and transmission, and subsequent function " -"development and maintenance.\n" -"\n" -"Every donation you make below will go directly toward these operating costs, " -"helping DPIP to continue to provide you with services in a sustainable " -"manner. Thank you for your understanding and generosity!" - -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "As an app dedicated to providing real-time earthquake information, DPIP currently has no advertising or other profit models. In order to maintain high-quality services, we need to bear the costs of server operation, seismic data acquisition and transmission, and subsequent function development and maintenance.\n\n" +"Every donation you make below will go directly toward these operating costs, helping DPIP to continue to provide you with services in a sustainable manner. Thank you for your understanding and generosity!" + +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "Subscription" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/month" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "One-time" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "Unable to connect to the {store}, please try again later." -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "Restoring your purchased subscription" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "Restore purchases" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "Terms of use" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "Privacy policy" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "Location" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "Set your location to receive updates about your area" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "Interface" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "Adjust the overall appearance and color of DPIP" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "Adjust the display language of DPIP" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "Adjust the units for value in DPIP" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "Adjust settings of map in DPIP" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "Push notification settings and notification sound test" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "Information" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "Get the latest announcements and news from ExpTech Studio" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "Release Notes" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "View DPIP's Previous Update Records" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "Help us maintain the stability and long-term development of the server" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "Third Party Libraries" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP was made possible by open source" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "Debug" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "App Version" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "Device Info" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "Copy Notification Token" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "App Logs" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "" -"All information should be considered authoritative only if it is consistent " -"with CWA." +msgstr "All information should be considered authoritative only if it is consistent with CWA." -#: lib/app/settings/location/page.dart:76 -#, fuzzy +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "Unable to obtain permission" +msgstr "" -#: lib/app/settings/location/page.dart:78 -#, fuzzy +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "Unable to obtain permission" +msgstr "" -#: lib/app/settings/location/page.dart:79 -#, fuzzy +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "Unable to obtain permission" +msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "Power saving" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "Unable to obtain permission" -#: lib/app/settings/location/page.dart:85 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" -"Please go to the app settings and allow the \"Photos and Media\" permissions " -"and try again." -#: lib/app/settings/location/page.dart:86 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -"Please go to the app settings and allow the \"Photos and Media\" permissions " -"and try again." -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" -"Please go to the app settings and allow the \"Photos and Media\" permissions " -"and try again." -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "Cancel" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "Update Automatically" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "Update your current location periodically" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"The automatic location update feature will use the GPS on your device to " -"update your location based on your geographical position periodically, " -"providing real-time weather and earthquake information, so you can stay up-" -"to-date with the latest local conditions." +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "The automatic location update feature will use the GPS on your device to update your location based on your geographical position periodically, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions." -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "Special Municipalities/County" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "Current Location" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" -msgstr "Strong Earthquake Monitor" +msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "Radar" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "Temperature" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "Precipitation" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "Wind/Gust" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "Simple" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" msgstr "" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "Base Map" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "Initial Layer" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "Animation frame rate" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "" -"Excessively high the animation frame rate may cause lag or device overheating" +msgstr "Excessively high the animation frame rate may cause lag or device overheating" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "Theme Mode" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "Light" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "Dark" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "System" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "Theme Color" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "System Color" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "Use System Color" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "Confirm" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"Severe thunderstorms or heavy rain are occurring near your area. Please take " -"precautions. This will continue until {time}." +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "Severe thunderstorms or heavy rain are occurring near your area. Please take precautions. This will continue until {time}." -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "Out of service area. Available only in Taiwan" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "Not Set" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "Apparent {apparent}°" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "Location not set" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "{serial} report" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"At around {time}, a felt earthquake near {location} had an " -"estimated magnitude of M{magnitude} and a max intensity of " -"{intensity}." +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." -#: lib/app/map/_lib/managers/monitor.dart:926 -#, fuzzy -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -"At around {time}, a felt earthquake near {location} had an " -"estimated magnitude of M{magnitude} and a max intensity of " -"{intensity}." -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "Estimated intensity at current location" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "The earthquake" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " Seconds" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "Arrived" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "Updated to {version}" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "Error while retrieving weather data" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "Unable to load update logs, please try again later." -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "Retry" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "Next" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "Disaster Prevention Information Platform" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "Who are we?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio is a group of mostly students, with an average age of under " -"20 and a headcount of 15+. Members are students from northern, central and " -"southern Taiwan, Japan, South Korea and China." +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China." -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Our original intention" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" msgstr "" -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Precautions" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"Depending on the network status, server status, application status, upstream " -"data source status, etc., there is a possibility that information will not " -"be received. We will try our best to avoid such situations, but we cannot " -"guarantee that they will not happen." +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen." -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "" -"Strong shaking has a chance of reaching the user's location before the " -"notification." +msgstr "Strong shaking has a chance of reaching the user's location before the notification." -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"Earthquake early warning is the result of rapid calculation and may have " -"large errors. It should be understood and used with caution." +msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution." -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "" -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Welcome to DPIP" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP is an app designed by a local Taiwanese team that integrates " -"information from TREM-Net (Taiwan Real-time Earthquake Observation Network) " -"and data from the Central Weather Administration to provide an integrated, " -"single and convenient disaster prevention information application." +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application." -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" -msgstr "" -"Delivering real-time disaster prevention information via notifications when " -"major disasters occur" +msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"Use location to automatically update location settings and provide local " -"real-time disaster prevention information" +msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"Allow DPIP to run continuously in the background for real-time disaster " -"notification information." +msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information." -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "Save" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"Used to store data visualization images provided by the Central " -"Meteorological Administration or ExpTech" +msgstr "Used to store data visualization images provided by the Central Meteorological Administration or ExpTech" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "" -"Users are required to manually go to settings to enable relevant permissions." +msgstr "Users are required to manually go to settings to enable relevant permissions." -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "Permissions" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "We always stand with our users and work hard for their privacy." -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "Map Layers" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "Select the layer you want to display" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "Weather" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "Long press to set the start point of playback" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "Current time" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "Play start" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "Today" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 min" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 hr" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 hr" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 hr" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 hr" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 hr" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 d" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 d" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" -msgstr "Max PGA Image" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" -msgstr "Max PGV Image" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "There are currently no earthquake warnings in effect" -#: lib/app/map/_lib/managers/monitor.dart:865 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -"Estimated M{magnitude}, max intensity {intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" -"Estimated M{magnitude}, max intensity {intensity}" +msgstr "Estimated M{magnitude}, max intensity {intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown} Arrived in seconds" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "Arrived" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "Recent Earthquake Reports" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "More" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "No. {number} Significantly Felt Earthquake" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "Local Earthquake" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "Magnitude" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "Depth" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Web" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "Event Time" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "Location" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "Observed Intensities" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "Earthquake Intensity Map Image" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "Intensity Map Image" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "Max PGA Image" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "Max PGV Image" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "Mistake" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "Resolved" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "Impact: Small" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "Impact: Medium" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "Impact: Major" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "Test" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "Change" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "Done" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "Weather related" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "Unknown" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "Announcement Details" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"Please go to the app settings and allow the \"Photos and Media\" permissions " -"and try again." +msgstr "Please go to the app settings and allow the \"Photos and Media\" permissions and try again." -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "Try again" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "Saved pictures" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "An error occurred while saving the image" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5-" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5+" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6-" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6+" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "Intensity 7" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Sunny" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "Sunny with Haze" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "Sunny with Mist" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "Sunny with Lightning" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "Sunny with Thunder" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "Sunny with Fog" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "Sunny with Rain" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "Sunny with Rain and Snow" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "Sunny with Heavy Snow" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "Sunny with Snow Grains" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "Sunny with Ice Pellets" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "Sunny with Snow Showers" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "Sunny with Rain and Snow Showers" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "Sunny with Hail" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "Sunny with Thunderstorm" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "Clear with thunder and hail" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "Clear sky with heavy thunder and hail" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "Partly cloudy" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "Cloudy with haze" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "Cloudy with haze" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "Cloudy with thunder" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "Cloudy with rain and snow" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "Cloudy with heavy snow" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "Cloudy with ice beads" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "Cloudy with snow showers" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "Cloudy with rain and snow" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "Cloudy with Hail" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "Cloudy with thunderstorm" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "Cloudy with thunder and snow" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "Cloudy with thunder and hail" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "Cloudy with heavy thunderstorm" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "Heavy thunder and hail" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "{town} {townLevel}, {city} {cityLevel}" -#: lib/api/model/location/location.dart:93 -msgid "{city}{town}" -msgstr "{town}, {city}" +#: ./lib/api/model/location/location.dart:93 +msgid "{city} {town}" +msgstr "" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" msgstr "{city} {cityLevel}" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" msgstr "{town} {townLevel}" -#~ msgid "避難資訊" -#~ msgstr "Evacuation information" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "When a tsunami warning is issued for non-coastal areas" - -#~ msgid "直轄市/縣市" -#~ msgstr "Special Municipality/County" - -#~ msgid "鄉鎮市區" -#~ msgstr "City/Town/District" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index 7beafc135..ea84d23bb 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -1,1478 +1,1345 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-01 03:50\n" -"Language-Team: Japanese\n" -"Language: ja_JP\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ja\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" +"PO-Revision-Date: 2025-08-13 13:25\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "現在地" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "テーマ" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "言語" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "単位" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地図" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "緊急地震速報" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "強震モニター" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "地震情報" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "地震速報" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "雷雨注意情報" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天気警報" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "防災情報プラットフォーム" +msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "津波情報" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "お知らせ" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "応援する" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "設定" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "すべて受信" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "オフ" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "受信カテゴリ" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "現在地震度 1 以上で受信" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "津波警報・情報" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "津波警報のみ受信" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "現地のみ受信" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "現在地震度 4 以上で受信" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "サウンドテスト" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "通知受信時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイ" -"スが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイスが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "通知機能を使用する為に現在地を設定してください" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震速報" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天気" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "津波" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "その他" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" msgstr "" -"津波警報が発令された時\n" -"沿岸地域" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "一般" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "太平洋津波情報発信された時" +msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "太平洋津波通信(音無しお知らせ)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "太平洋津波情報発信された時" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "強震モニター(通常)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "揺れを検出" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "震度速報(通常)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "現在地(郷/鎮)測りにより震度 3 超え" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "震度速報(音無し)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "現在地(郷/鎮)測りにより震度 1 超え" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "地震報告(通常)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "現在地(県/市)測りにより震度 3 超え" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "地震報告(音無し)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "現在地(県/市)測りにより震度 1 超え" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "通知設定が更新されました" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "通知設定の更新に失敗しました" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "緊急地震速報(非常)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 4 超え" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "緊急地震速報(通常)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 2 超え" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "緊急地震速報(音無し)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 1 超え" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "地震速報(非常)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "現在地(郷/鎮)測りにより震度 4 超え" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "地震速報(通常)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "現在地(郷/鎮)測りにより震度 2 超え" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "地震速報(音無し)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "現在地(郷/鎮)測りにより震度 1 超え" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" -msgstr "現在地(郷/鎮)に避難注意報が発令された時" +msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" -msgstr "現在地(郷/鎮)に避難情報が発信された時" +msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にレッドアラートの天気注意報/特報が発令され" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にその以外の天気注意報/特報が発令され" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" -msgstr "現在地(郷/鎮)に雷雨/山地にわか雨リアルタイム情報が発信された時" +msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "現在地(郷/鎮)に雷雨/山地にわか雨リアルタイム情報が発信された時" +msgstr "" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "華氏度を使う" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "温度の表示単位を華氏(℉)に変更する" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "表示言語" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "システム言語" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "翻訳を協力" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "DPIPの翻訳にご協力をお願いします!" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "言語を選択" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "{translated} 翻訳済み・{approved} 校正済み" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "ソース言語" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "ストアーへの接続異常" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "該当商品が見つかりません" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "再読み込み" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "ストアーの商品読み込み中" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今まで" -"に広告や他の収益方法などはございません。サービスの品質をより高く保たれるた" -"め、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発や" -"メンテナンスなどのコストを負担しております。\n" -"\n" -"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用" -"しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理" -"解、ご厚意に感謝しています!" - -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今までに広告や他の収益方法などはございません。サービスの品質をより高く保たれるため、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発やメンテナンスなどのコストを負担しております。\n\n" +"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理解、ご厚意に感謝しています!" + +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "サブスクリプション" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/毎月" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "一回払い" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" -msgstr "" -"{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しくださ" -"い。" +msgstr "{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しください。" -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "ご購入内容を復元しています" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "購入を復元" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "利用規約" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "プライバシーポリシー" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "現在地を設定して地域のリアルタイム情報を受け取る" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "画面" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "DPIPのテーマを調整する" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "DPIPの表示言語を調整する" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" -msgstr "" -"DPIP で数値をディスプレイする時の\n" +msgstr "DPIP で数値をディスプレイする時の\n" "が現れる単位を調整する" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "DPIP 地図の設定を調整する" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "プッシュ通知の設定と通知音のテスト" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "情報" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" -msgstr "ExpTech Studio の最新のお知らせと情報をチェック" +msgstr "ExpTech Studioの最新のお知らせと情報をチェック" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "更新履歴" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "過去の更新履歴を見る" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "サーバーの安定性と長期的な運営の維持にご協力ください" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "外部ライブラリの使用許諾" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP の実現はオープンソース・コミュニティのおかげです" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "デバッグ" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "アプリバージョン" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "デバイス情報" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "通知トークンをコピー" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "アプリログ" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "すべての情報は、中央気象署(CWA)の公式発表を基準にしてください。" -#: lib/app/settings/location/page.dart:76 -#, fuzzy +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "権限を取得できませんでした" +msgstr "" -#: lib/app/settings/location/page.dart:78 -#, fuzzy +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "権限を取得できませんでした" +msgstr "" -#: lib/app/settings/location/page.dart:79 -#, fuzzy +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "権限を取得できませんでした" +msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "電力を守る策略" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "権限を取得できませんでした" -#: lib/app/settings/location/page.dart:85 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" -"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" -"お願いします。" -#: lib/app/settings/location/page.dart:86 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" -"お願いします。" -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" -"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" -"お願いします。" -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "キャンセル" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自動更新" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期的に現在地を更新する" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新" -"します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得しま" -"す。" +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。" -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "県/市" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "現在地" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" -msgstr "強震モニター" +msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "レーダー" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "気温" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "降水量" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "風向・風速" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "線" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" -msgstr "" +msgstr "OpenStreetMap" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" -msgstr "" +msgstr "Google" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "ベースマップ" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "初期レイヤー" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "動画のフレームレート" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "速すぎたフレームレートはラッグや設備発熱に至る可能性があります" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "テーマモード" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "ライト" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "ダーク" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "システムに従う" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "テーマ色" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "システム色" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "システムの色を使う" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "確認" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。" -"{time} まで続く見込みです。" +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。{time} まで続く見込みです。" -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "台湾以外ではご利用いただけません" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "未設定" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "体感温度 {apparent}°" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "現在地が設定されていません" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" -msgstr "第 {serial} 報" +msgstr "第{serial}報" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" -#: lib/app/map/_lib/managers/monitor.dart:926 -#, fuzzy -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" -msgstr "" -"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "現在地の予想" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "地震波" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "到達" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" -msgstr "{version} に更新されました" +msgstr "{version}に更新されました" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "天気の取得に失敗しました" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "変更履歴を読み込めませんでした。" -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "再試行" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "次" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "防災情報プラットフォーム" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "私たちについて?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体" -"です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "私たちの初心" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めるこ" -"とでした。その後、活動は学外に広がり、現在の形になりました。" +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めることでした。その後、活動は学外に広がり、現在の形になりました。" -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事項" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があ" -"ります。努力を込めてそのような状況を避けておりながら、発生しませんことには確" -"保かねます。" +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があります。努力を込めてそのような状況を避けておりながら、発生しませんことには確保かねます。" -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "強い揺れが通知より早く到達する確率があります。" -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上" -"謹慎にお使いください。" +msgstr "地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上謹慎にお使いください。" -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能" -"でおりまして、規範を遵うことをお願いいたします。" +msgstr "あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能でおりまして、規範を遵うことをお願いいたします。" -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIPへようこそ" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観" -"測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報" -"アプリケーションを提供しております。" +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報アプリケーションを提供しております。" -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "非常災害が発生した時、通知で即時防災情報を伝えます" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "定位により自動的に現在地を更新し、当地である即時防災情報を受けられます" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を" -"受けられることになります。" +msgstr "バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を受けられることになります。" -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "保存" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用" -"いることになります" +msgstr "台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用いることになります" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "権限を要求" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "ユーザー手動で設定まで相関な権限を開けることが必要です。" -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "権限" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めておりま" -"す。" +msgstr "私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めております。" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地図レイヤー" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "表示する地図のレイヤーを選択してください" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "気象" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" -msgstr "" +msgstr "単位:{unit}" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" -msgstr "長タッチし、プレイ起点を設定する" +msgstr "長タッチして再生の起点を設定する" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" -msgstr "今の時間" +msgstr "表示中の時刻" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" -msgstr "プレイ起点" +msgstr "再生の起点" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" -msgstr "プレイ進度" +msgstr "再生中" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今日" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10分間" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1時間" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3時間" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6時間" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12時間" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24時間" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2日間" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3日間" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" -msgstr "地動最大加速度" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" -msgstr "地動最大速度" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "緊急地震速報は発表されていません" -#: lib/app/map/_lib/managers/monitor.dart:865 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" -msgstr "M{magnitude}、最大震度{intensity}" +msgstr "M{magnitude}、深さ{depth}キロメートル" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "M{magnitude}、最大震度{intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "到達まであと{countdown}秒" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "到達し" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "最近の地震情報" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "さらに表示" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "ID #{number} の顕著な地震" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "局地的地震" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "マグニチュード" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "震源の深さ" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Webで見る" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" -msgstr "発生時刻" +msgstr "発震時刻" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "震源地" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "各地の震度" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "地震情報図" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "震度分布図" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "地動最大加速度" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "地動最大速度" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "エラーが発生した" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "解決済み" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "影響:小" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "影響:中" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "影響:大" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "メンテナンス" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "テスト" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "変更" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "完成" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "地震相関" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "気象相関" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" -msgstr "未知" +msgstr "不明" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "現在お知らせはありません" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "お知らせの詳細" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" -"お願いします。" +msgstr "アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことをお願いします。" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "再試行" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "保存しました" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "画像をセーブする時にエラーが発生しました" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5弱" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5強" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6弱" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6強" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "晴れ" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "晴れ・煙霧" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "晴れ時々霧" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "晴れ時々雷" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "晴れ時々雷" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "晴れ・霧" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "晴れ時々雨" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "晴れ時々雨雪" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "晴れ時々大雪" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "晴れ時々霧雪" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "晴れ時々氷雨" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "晴れ時々にわか雪" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "晴れ時々にわか雨や雪" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "晴れ時々雹" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "晴れ時々雷を伴う雨" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "晴れのち雪、雷あり" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "晴れのち雹、雷あり" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "晴れのち雨、大雷あり" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "晴れのち雹、大雷あり" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "多雲" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "多雲霧もやあり" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "多雲稲妻あり" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "多雲雷あり" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "多雲霧あり" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "多雲雨あり" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "多雲のち雨、雪あり" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "多雲のち大雪" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "多雲のち雪粒" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "多雲のち氷粒" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "多雲のち時々雪" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "多雲のち時々雨、雪あり" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "多雲のち雹" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "多雲のち雨、雷あり" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "多雲のち雪、雷あり" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "多雲のち雹、雷あり" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "多雲のち雨、大雷あり" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "多雲のち雹、大雷あり" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "曇り" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "曇り霧もやあり" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "曇り靄あり" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "曇り稲妻あり" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "曇り雷あり" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "曇り霧あり" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "曇りのち雨" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "曇りのち雨、雪あり" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "曇りのち大雪" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "曇りのち雪粒" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "曇りのち氷粒" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "曇りのち時々雪" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "曇りのち時々雨、雪あり" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "曇りのち雹" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "曇りのち雨、雷あり" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "曇りのち雪、雷あり" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "曇りのち雹、雷あり" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "曇りのち雨、大雷あり" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "曇りのち大雹、大雷あり" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" -msgstr "" +msgstr "{city}{cityLevel} {town}{townLevel}" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:93 msgid "{city} {town}" -msgstr "" +msgstr "{city} {town}" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" -msgstr "" +msgstr "{city}{cityLevel}" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" -msgstr "" - -#~ msgid "避難資訊" -#~ msgstr "避難情報" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "" -#~ "津波警報が発令された時\n" -#~ "沿岸地域を除いた地域" - -#~ msgid "直轄市/縣市" -#~ msgstr "直轄市/県市" +msgstr "{town}{townLevel}" -#~ msgid "鄉鎮市區" -#~ msgstr "区町村" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 3823e6b45..9cb649ca6 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -1,1470 +1,1341 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-02 16:35\n" -"Language-Team: Korean\n" -"Language: ko_KR\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ko\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"PO-Revision-Date: 2025-08-13 10:04\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "현재 지역" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "주제" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "언어" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "단위" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "지도" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "알림" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "긴급 지진 속보" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "강진 모니터" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "지진 보고" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "진도 속보" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "실시간 뇌우 정보" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "기상특보" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "방재 정보 플랫폼" +msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "해일 정보" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "공지" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "저희를 후원해주세요" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "설정" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "모두 수신" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "닫기" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "수신 카테고리" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "현재 위치 진도 1 이상" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "해일 정보, 해일 경보" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "해일 경보만 수신" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "현재 위치 수신" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "현재 위치 진도 4 이상" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "사운드 테스트" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "공지 발송 시" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 " -"음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트" -"는 요청을 서버에 전송하지 않습니다" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트는 요청을 서버에 전송하지 않습니다" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "알림 기능을 사용하시려면 먼저 위치를 설정해 주세요" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "지진 속보" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "지진" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "날씨" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "해일" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "기타" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "중대" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "해일 경보 발령 시, 해안 지역(향, 진)" +msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "일반" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "태평양 해일 정보 발령 시" +msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "태평양 해일 정보(무음 알림)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "태평양 해일 정보 발령 시" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "강진 모니터(일반)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "흔들림 감지" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "진도 속보(일반)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "현재 위치(향, 진) 실측 진도 3 이상" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "진도 속보(무음 알림)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "현재 위치(향, 진) 실측 진도 1 이상" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "지진 보고(일반)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "현재 위치(현, 시) 실측 진도 3 이상" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "지진 보고(무음 알림)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "현재 위치(현, 시) 실측 진도 1 이상" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "알림 설정 갱신" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "알림 설정 갱신 실패" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "긴급 지진 속보(중대)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "​최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 4 이상" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "긴급 지진 속보(일반)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 2 이상" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "긴급 지진 속보(무음)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 1 이상" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "지진 속보(중대)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "현재 위치(향, 진) 예상 진도 4 이상" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "지진 속보(일반)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "현재 위치(향, 진) 예상 진도 2 이상" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "지진 속보(무음)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "현재 위치(향, 진) 예상 진도 1 이상" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" -msgstr "현재 위치(향, 진) 피난 경보 발령 시" +msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" -msgstr "현재 위치(향, 진) 피난 정보 발령 시" +msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 적색 기상 경보 특보를 발령" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 기상 경보를 발령" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" -msgstr "현재 위치(향, 진)에 실시간 뇌우 정보 또는 산간 지역 폭우 발령 시" +msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "현재 위치(향, 진)에 실시간 뇌우 정보 또는 산간 지역 폭우 발령 시" +msgstr "" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "화씨 사용" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "온도 표시를 화씨(°F)로 전환" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "표시 언어" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "시스템 언어" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "번역 돕기" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "여기를 눌러 DPIP 번역 개선을 도와주세요" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "언어 선택" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "번역됨 {translated}・승인됨 {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "출처 언어" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "스토어에 연결할 수 없습니다, 잠시 후 다시 시도해 주세요" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "상품을 찾을 수 없습니다, 잠시 후 다시 시도해 주세요" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "새로 고침" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "스토어 상품 로드 중" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수" -"익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이" -"터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합" -"니다.\n" -"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용" -"되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입" -"니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" - -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합니다.\n" +"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" + +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "정기 구독" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/월" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "일회성 후원" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "{store}에 연결할 수 없습니다, 잠시 후 다시 시도해 주세요." -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "구매했던 구독 복원" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "구매 기록 복원" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "이용 약관" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "개인 정보 보호 정책" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "위치" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "현재 위치를 설정하여 해당 지역 실시간 정보 수신" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "인터페이스" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "DPIP 전체의 외관과 색상을 조정합니다" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "DPIP 표시 언어 조정" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "DPIP의 표시 단위 조정" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "DPIP 지도 설정 조정" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "푸시 알림 설정 및 알림음 테스트" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "정보" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "ExpTech Studio의 최신 공지 및 정보 확인" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "업데이트 로그" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "DPIP 이전 업데이트 기록" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "서버의 안정과 장기적인 발전 돕기" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "제3자 라이브러리 라이선스" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP의 구현은 오픈 소스에 힘입었습니다" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "오류 수정" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "앱 버전" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "기기 정보" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "알림 토큰 복사" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "앱 로그" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "모든 정보는 대만 기상청에서 발표한 내용을 기준으로 합니다." -#: lib/app/settings/location/page.dart:76 -#, fuzzy +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "권한 획득 불가" +msgstr "" -#: lib/app/settings/location/page.dart:78 -#, fuzzy +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "권한 획득 불가" +msgstr "" -#: lib/app/settings/location/page.dart:79 -#, fuzzy +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "권한 획득 불가" +msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "전원 절약 설정" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "권한 획득 불가" -#: lib/app/settings/location/page.dart:85 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" -"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" -"세요." -#: lib/app/settings/location/page.dart:86 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" -"세요." -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" -"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" -"세요." -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "취소" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "자동 업데이트" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "현재 위치 정기적으로 업데이트" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때" -"도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통" -"해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 " -"수 있도록 합니다." +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 수 있도록 합니다." -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "현/시" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "현재 위치" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" -msgstr "강진 모니터" +msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "레이더" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "기온" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "강우" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "풍향/풍속" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "선" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" msgstr "" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "배경 레이어" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "기본 지도" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "애니메이션 주사율" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "" -"지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니" -"다" +msgstr "지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니다" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "테마 모드" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "밝은" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "어두운" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "시스템 테마 따르기" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "테마 색상" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "시스템 색상" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "시스템 색상 사용" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "확인" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주" -"의." +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주의." -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "서비스 지역 외에서는 사용할 수 없으며, 대만에서만 이용 가능합니다" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "설정되지 않음" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "체감 온도 {apparent}" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "현재 위치가 설정되지 않았습니다" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "제 {serial} 보" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " -"M{magnitude}, 현재 위치 최대 진도 {intensity}." +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." -#: lib/app/map/_lib/managers/monitor.dart:926 -#, fuzzy -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " -"M{magnitude}, 현재 위치 최대 진도 {intensity}." -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "현재 위치 예상" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "지진파" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 초" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "도착" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "{version} 업데이트" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "날씨 이상 정보 확인" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "업데이트 로그를 불러올 수 없습니다. 나중에 다시 시도해 주세요." -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "다시 시도" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "다음 단계" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "방재 정보 플랫폼" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "저희에 관하여?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 " -"명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 " -"이루어져 있습니다." +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 이루어져 있습니다." -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "우리의 목표" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이" -"었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "주의 사항" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 " -"정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 " -"다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "강한 흔들림이 알림보다 먼저 사용자 위치에 도착할 가능성이 있습니다." -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 " -"신중하게 사용해야 합니다." +msgstr "지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 신중하게 사용해야 합니다." -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정" -"을 반드시 준수해 주십시오." +msgstr "공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정을 반드시 준수해 주십시오." -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIP에 오신 것을 환영합니다" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 " -"통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀" -"이 설계한 앱입니다." +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀이 설계한 앱입니다." -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "중대 재해 발생 시 알림으로 즉각 재난 대비 정보를 전달합니다" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보" -"를 제공합니다" +msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니" -"다." +msgstr "실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니다." -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "이미지 저장" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" +msgstr "대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "권한 요청" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "사용자가 수동으로 설정에서 관련 권한을 활성화해야 합니다." -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "권한" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." +msgstr "우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "지도 레이어" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "표시 지도 레이더 선택" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "기상" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "길게 눌러 재생 시작 지점 설정" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "현재 시간" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "재생 시작 지점" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "재생 진행도" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "오늘" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 분" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 시간" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 시간" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 시간" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 시간" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 시간" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 일" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 일" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" -msgstr "최대 지반 가속도" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" -msgstr "최대 지반 속도" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "현재 유효 지진 속보 없음" -#: lib/app/map/_lib/managers/monitor.dart:865 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" -"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" +msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}초 후 도착" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "도착" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "최근 지진 현황" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "더 보기" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "번호 {number} 강한 체감 지진" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "소구역 체감 지진" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "지진 규모" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "진원 깊이" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "보고 페이지" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "지진 발생 시간" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "에 위치" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "각 지역 진도" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "지진 보고" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "진도" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "최대 지반 가속도" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "최대 지반 속도" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "오류" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "해결 완료" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "영향:작음" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "영향:보통" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "영향:큼" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "유지 보수" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "테스트" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "변경" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "완성" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "지진 관련" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "기상 관련" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "알 수 없음" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "현재 공지 없음" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "공지 내용" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" -"세요." +msgstr "응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주세요." -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "다시 시도해 주세요" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "이미지 저장 완료" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "이미지 저장 중 오류" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0급" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1급" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2급" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3급" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4급" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5약" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5강" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6약" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6강" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7급" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "맑음" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "맑음・연무" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "맑음・옅은 안개" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "맑음・번개" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "맑음・천둥" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "맑음・짙은 안개" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "맑음・비" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "맑음・비/눈" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "맑음・폭설" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "맑음・싸라기 눈" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "맑음・진눈깨비" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "맑음・소나기 눈" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "맑음・소나기 비/눈" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "맑음・우박" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "맑음・뇌우" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "맑음・천둥 눈" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "맑음・천둥 우박" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "맑음・강한 뇌우" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "맑음・강한 천둥 우박" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "구름 많음" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "구름 많음・연무" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "구름 많음・옅은 안개" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "구름 많음・번개" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "구름 많음・천둥" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "구름 많음・짙은 안개" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "구름 많음・비" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "구름 많음・비/눈" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "구름 많음・폭설" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "구름 많음・싸라기눈" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "구름 많음・진눈깨비" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "구름 많음・소나기 눈" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "구름 많음・소나기 눈/비" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "구름 많음・우박" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "구름 많음・뇌우" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "구름 많음・천둥/눈" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "구름 많음・천둥/우박" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "구름 많음・강한 뇌우" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "구름 많음・강한 천둥/우박" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "흐림" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "흐림・연무" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "흐림・안개" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "흐림・번개" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "흐림・천둥" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "흐림・옅은 안개" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "흐림・비" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "흐림・눈/비" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "흐림・폭설" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "흐림・싸라기눈" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "흐림・진눈깨비" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "흐림・소나기 눈" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "흐림・소나기 눈/비" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "맑음・우박" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "흐림・뇌우" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "흐림・천둥/눈" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "흐림・천둥/우박" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "흐림・강한 뇌우" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "흐림・강한 천둥/우박" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:93 msgid "{city} {town}" msgstr "" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" msgstr "" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" msgstr "" -#~ msgid "避難資訊" -#~ msgstr "피난 정보" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "해일 경보 발령 시, 위의 언급 지역 외" - -#~ msgid "直轄市/縣市" -#~ msgstr "직할시/현시" - -#~ msgid "鄉鎮市區" -#~ msgstr "향/진/시/구" diff --git a/assets/translations/location_names.csv b/assets/translations/location_names.csv index 7679b00aa..c082f72aa 100644 --- a/assets/translations/location_names.csv +++ b/assets/translations/location_names.csv @@ -1,385 +1,371 @@ -key,zh-Hant,en,ja,ko,ru,vi,zh-Hans -連江,連江,Lienchiang,,,,, -宜蘭,宜蘭,Yilan,,,,, -彰化,彰化,Changhua,,,,, -南投,南投,Nantou,,,,, -雲林,雲林,Yunlin,,,,, -屏東,屏東,Pingtung,,,,, -基隆,基隆,Keelung,,,,, -臺北,臺北,Taipei,,,,, -新北,新北,New Taipei,,,,, -臺南,臺南,Tainan,,,,, -桃園,桃園,Taoyuan,,,,, -嘉義,嘉義,Chiayi,,,,, -嘉義,嘉義,Chiayi,,,,, -金門,金門,Kinmen,,,,, -高雄,高雄,Kaohsiung,,,,, -臺東,臺東,Taitung,,,,, -花蓮,花蓮,Hualien,,,,, -澎湖,澎湖,Penghu,,,,, -新竹,新竹,Hsinchu,,,,, -臺中,臺中,Taichung,,,,, -苗栗,苗栗,Miaoli,,,,, -新竹,新竹,Hsinchu,,,,, -成功,成功,Chenggong,,,,, -佳冬,佳冬,Jiadong,,,,, -麥寮,麥寮,Mailiao,,,,, -綠島,綠島,Lüdao,,,,, -蘭嶼,蘭嶼,Lanyu,,,,, -田中,田中,Tianzhong,,,,, -社頭,社頭,Shetou,,,,, -竹田,竹田,Zhutian,,,,, -萬丹,萬丹,Wandan,,,,, -三灣,三灣,Sanwan,,,,, -峨眉,峨眉,Emei,,,,, -南庄,南庄,Nanzhuang,,,,, -太保,太保,Taibao,,,,, -中埔,中埔,Zhongpu,,,,, -番路,番路,Fanlu,,,,, -水上,水上,Shuishang,,,,, -員林,員林,Yuanlin,,,,, -小港,小港,Xiaogang,,,,, -蘇澳,蘇澳,Su'ao,,,,, -五結,五結,Wujie,,,,, -宜蘭,宜蘭,Yilan,,,,, -壯圍,壯圍,Zhuangwei,,,,, -南竿,南竿,Nangan,,,,, -莒光,莒光,Juguang,,,,, -烏坵,烏坵,Wuqiu,,,,, -羅東,羅東,Luodong,,,,, -員山,員山,Yuanshan,,,,, -冬山,冬山,Dongshan,,,,, -三星,三星,Sanxing,,,,, -大同,大同,Datong,,,,, -竹東,竹東,Zhudong,,,,, -新埔,新埔,Xinpu,,,,, -關西,關西,Guanxi,,,,, -湖口,湖口,Hukou,,,,, -芎林,芎林,Qionglin,,,,, -橫山,橫山,Hengshan,,,,, -北埔,北埔,Beipu,,,,, -五峰,五峰,Wufeng,,,,, -龍井,龍井,Longjing,,,,, -大雅,大雅,Daya,,,,, -沙鹿,沙鹿,Shalu,,,,, -梧棲,梧棲,Wuqi,,,,, -湖西,湖西,Huxi,,,,, -金峰,金峰,Jinfeng,,,,, -太麻里,太麻里,Taimali,,,,, -苗栗,苗栗,Miaoli,,,,, -卓蘭,卓蘭,Zhuolan,,,,, -大湖,大湖,Dahu,,,,, -公館,公館,Gongguan,,,,, -銅鑼,銅鑼,Tongluo,,,,, -頭屋,頭屋,Touwu,,,,, -三義,三義,Sanyi,,,,, -西湖,西湖,Xihu,,,,, -造橋,造橋,Zaoqiao,,,,, -獅潭,獅潭,Shitan,,,,, -彰化,彰化,Changhua,,,,, -和美,和美,Hemei,,,,, -線西,線西,Xianxi,,,,, -伸港,伸港,Shengang,,,,, -秀水,秀水,Xiushui,,,,, -花壇,花壇,Huatan,,,,, -芬園,芬園,Fenyuan,,,,, -溪湖,溪湖,Xihu,,,,, -東石,東石,Dongshi,,,,, -大村,大村,Dacun,,,,, -埔鹽,埔鹽,Puyan,,,,, -埔心,埔心,Puxin,,,,, -永靖,永靖,Yongjing,,,,, -二水,二水,Ershui,,,,, -二林,二林,Erlin,,,,, -埤頭,埤頭,Pitou,,,,, -芳苑,芳苑,Fangyuan,,,,, -大城,大城,Dacheng,,,,, -竹塘,竹塘,Zhutang,,,,, -溪州,溪州,Xizhou,,,,, -南投,南投,Nantou,,,,, -埔里,埔里,Puli,,,,, -草屯,草屯,Caotun,,,,, -竹山,竹山,Zhushan,,,,, -集集,集集,Jiji,,,,, -名間,名間,Mingjian,,,,, -鹿谷,鹿谷,Lugu,,,,, -中寮,中寮,Zhongliao,,,,, -魚池,魚池,Yuchi,,,,, -國姓,國姓,Guoxing,,,,, -水里,水里,Shuili,,,,, -信義,信義,Xinyi,,,,, -仁愛,仁愛,Ren'ai,,,,, -斗六,斗六,Douliu,,,,, -斗南,斗南,Dounan,,,,, -虎尾,虎尾,Huwei,,,,, -西螺,西螺,Xiluo,,,,, -土庫,土庫,Tuku,,,,, -北港,北港,Beigang,,,,, -古坑,古坑,Gukeng,,,,, -大埤,大埤,Dapi,,,,, -莿桐,莿桐,Citong,,,,, -林內,林內,Linnei,,,,, -二崙,二崙,Erlun,,,,, -崙背,崙背,Lunbei,,,,, -東勢,東勢,Dongshi,,,,, -褒忠,褒忠,Baozhong,,,,, -元長,元長,Yuanchang,,,,, -水林,水林,Shuilin,,,,, -朴子,朴子,Puzi,,,,, -大林,大林,Dalin,,,,, -民雄,民雄,Minxiong,,,,, -溪口,溪口,Xikou,,,,, -新港,新港,Xingang,,,,, -六腳,六腳,Liujiao,,,,, -義竹,義竹,Yizhu,,,,, -鹿草,鹿草,Lucao,,,,, -竹崎,竹崎,Zhuqi,,,,, -梅山,梅山,Meishan,,,,, -大埔,大埔,Dapu,,,,, -阿里山,阿里山,Alishan,,,,, -屏東,屏東,Pingtung,,,,, -潮州,潮州,Chaozhou,,,,, -長治,長治,Changzhi,,,,, -麟洛,麟洛,Linluo,,,,, -九如,九如,Jiuru,,,,, -里港,里港,Ligang,,,,, -鹽埔,鹽埔,Yanpu,,,,, -高樹,高樹,Gaoshu,,,,, -萬巒,萬巒,Wanluan,,,,, -內埔,內埔,Neipu,,,,, -新埤,新埤,Xinpi,,,,, -崁頂,崁頂,Kanding,,,,, -南州,南州,Nanzhou,,,,, -琉球,琉球,Liuqiu,,,,, -三地門,三地門,Sandimen,,,,, -霧臺,霧臺,Wutai,,,,, -瑪家,瑪家,Majia,,,,, -泰武,泰武,Taiwu,,,,, -來義,來義,Laiyi,,,,, -春日,春日,Chunri,,,,, -獅子,獅子,Shizi,,,,, -鹿野,鹿野,Luye,,,,, -池上,池上,Chishang,,,,, -延平,延平,Yanping,,,,, -光復,光復,Guangfu,,,,, -瑞穗,瑞穗,Ruisui,,,,, -富里,富里,Fuli,,,,, -馬公,馬公,Magong,,,,, -白沙,白沙,Baisha,,,,, -西嶼,西嶼,Xiyu,,,,, -望安,望安,Wang'an,,,,, -七美,七美,Qimei,,,,, -暖暖,暖暖,Nuannuan,,,,, -大安,大安,Da'an,,,,, -文山,文山,Wenshan,,,,, -鹽埕,鹽埕,Yancheng,,,,, -新興,新興,Xinxing,,,,, -前金,前金,Qianjin,,,,, -前鎮,前鎮,Qianzhen,,,,, -頭城,頭城,Toucheng,,,,, -南澳,南澳,Nan'ao,,,,, -竹北,竹北,Zhubei,,,,, -新豐,新豐,Xinfeng,,,,, -苑裡,苑裡,Yuanli,,,,, -通霄,通霄,Tongxiao,,,,, -竹南,竹南,Zhunan,,,,, -後龍,後龍,Houlong,,,,, -鹿港,鹿港,Lukang,,,,, -福興,福興,Fuxing,,,,, -臺西,臺西,Taixi,,,,, -四湖,四湖,Sihu,,,,, -口湖,口湖,Kouhu,,,,, -布袋,布袋,Budai,,,,, -東港,東港,Donggang,,,,, -枋寮,枋寮,Fangliao,,,,, -新園,新園,Xinyuan,,,,, -林邊,林邊,Linbian,,,,, -車城,車城,Checheng,,,,, -滿州,滿州,Manzhou,,,,, -枋山,枋山,Fangshan,,,,, -牡丹,牡丹,Mudan,,,,, -臺東,臺東,Taitung,,,,, -卑南,卑南,Beinan,,,,, -東河,東河,Donghe,,,,, -吉安,吉安,Ji'an,,,,, -壽豐,壽豐,Shoufeng,,,,, -秀林,秀林,Xiulin,,,,, -楠梓,楠梓,Nanzi,,,,, -鳳山,鳳山,Fengshan,,,,, -大寮,大寮,Daliao,,,,, -大樹,大樹,Dashu,,,,, -大社,大社,Dashe,,,,, -仁武,仁武,Renwu,,,,, -鳥松,鳥松,Niaosong,,,,, -岡山,岡山,Gangshan,,,,, -橋頭,橋頭,Qiaotou,,,,, -燕巢,燕巢,Yanchao,,,,, -田寮,田寮,Tianliao,,,,, -阿蓮,阿蓮,Alian,,,,, -路竹,路竹,Luzhu,,,,, -湖內,湖內,Hunei,,,,, -旗山,旗山,Qishan,,,,, -美濃,美濃,Meinong,,,,, -六龜,六龜,Liugui,,,,, -甲仙,甲仙,Jiaxian,,,,, -杉林,杉林,Shanlin,,,,, -內門,內門,Neimen,,,,, -茂林,茂林,Maolin,,,,, -桃源,桃源,Taoyuan,,,,, -那瑪夏,那瑪夏,Namaxia,,,,, -永和,永和,Yonghe,,,,, -新店,新店,Xindian,,,,, -土城,土城,Tucheng,,,,, -蘆洲,蘆洲,Luzhou,,,,, -五股,五股,Wugu,,,,, -坪林,坪林,Pinglin,,,,, -平溪,平溪,Pingxi,,,,, -烏來,烏來,Wulai,,,,, -豐原,豐原,Fengyuan,,,,, -東勢,東勢,Dongshi,,,,, -后里,后里,Houli,,,,, -神岡,神岡,Shengang,,,,, -新社,新社,Xinshe,,,,, -石岡,石岡,Shigang,,,,, -外埔,外埔,Waipu,,,,, -大肚,大肚,Dadu,,,,, -新營,新營,Xinying,,,,, -鹽水,鹽水,Yanshui,,,,, -白河,白河,Baihe,,,,, -後壁,後壁,Houbi,,,,, -麻豆,麻豆,Madou,,,,, -下營,下營,Xiaying,,,,, -六甲,六甲,Liujia,,,,, -官田,官田,Guantian,,,,, -大內,大內,Danei,,,,, -佳里,佳里,Jiali,,,,, -學甲,學甲,Xuejia,,,,, -西港,西港,Xigang,,,,, -新化,新化,Xinhua,,,,, -新市,新市,Xinshi,,,,, -安定,安定,Anding,,,,, -玉井,玉井,Yujing,,,,, -楠西,楠西,Nanxi,,,,, -南化,南化,Nanhua,,,,, -左鎮,左鎮,Zuozhen,,,,, -仁德,仁德,Rende,,,,, -歸仁,歸仁,Guiren,,,,, -關廟,關廟,Guanmiao,,,,, -龍崎,龍崎,Longqi,,,,, -永康,永康,Yongkang,,,,, -北,北,North,,,,, -林園,林園,Linyuan,,,,, -茄萣,茄萣,Qieding,,,,, -永安,永安,Yong'an,,,,, -彌陀,彌陀,Mituo,,,,, -梓官,梓官,Ziguan,,,,, -淡水,淡水,Tamsui,,,,, -瑞芳,瑞芳,Ruifang,,,,, -林口,林口,Linkou,,,,, -三芝,三芝,Sanzhi,,,,, -八里,八里,Bali,,,,, -大甲,大甲,Dajia,,,,, -北門,北門,Beimen,,,,, -安南,安南,Annan,,,,, -蘆竹,蘆竹,Luzhu,,,,, -龜山,龜山,Guishan,,,,, -復興,復興,Fuxing,,,,, -東,東,East,,,,, -西,西,West,,,,, -達仁,達仁,Daren,,,,, -大武,大武,Dawu,,,,, -關山,關山,Guanshan,,,,, -海端,海端,Haiduan,,,,, -香山,香山,Xiangshan,,,,, -礁溪,礁溪,Jiaoxi,,,,, -玉里,玉里,Yuli,,,,, -卓溪,卓溪,Zhuoxi,,,,, -頭份,頭份,Toufen,,,,, -清水,清水,Qingshui,,,,, -南,南,South,,,,, -安平,安平,Anping,,,,, -中西,中西,West Central,,,,, -大溪,大溪,Daxi,,,,, -八德,八德,Bade,,,,, -桃園,桃園,Taoyuan,,,,, -大園,大園,Dayuan,,,,, -楊梅,楊梅,Yangmei,,,,, -七堵,七堵,Qidu,,,,, -仁愛,仁愛,Ren'ai,,,,, -信義,信義,Xinyi,,,,, -中正,中正,Zhongzheng,,,,, -中山,中山,Zhongshan,,,,, -安樂,安樂,Anle,,,,, -三峽,三峽,Sanxia,,,,, -鶯歌,鶯歌,Yingge,,,,, -中和,中和,Zhonghe,,,,, -樹林,樹林,Shulin,,,,, -深坑,深坑,Shenkeng,,,,, -板橋,板橋,Banqiao,,,,, -石碇,石碇,Shiding,,,,, -新莊,新莊,Xinzhuang,,,,, -泰山,泰山,Taishan,,,,, -三重,三重,Sanchong,,,,, -雙溪,雙溪,Shuangxi,,,,, -貢寮,貢寮,Gongliao,,,,, -汐止,汐止,Xizhi,,,,, -萬里,萬里,Wanli,,,,, -金山,金山,Jinshan,,,,, -石門,石門,Shimen,,,,, -苓雅,苓雅,Lingya,,,,, -三民,三民,Sanmin,,,,, -新屋,新屋,Xinwu,,,,, -觀音,觀音,Guanyin,,,,, -北竿,北竿,Beigan,,,,, -東引,東引,Dongyin,,,,, -烈嶼,烈嶼,Lieyu,,,,, -旗津,旗津,Qijin,,,,, -長濱,長濱,Changbin,,,,, -豐濱,豐濱,Fengbin,,,,, -霧峰,霧峰,Wufeng,,,,, -大里,大里,Dali,,,,, -烏日,烏日,Wuri,,,,, -中,中,Central,,,,, -南屯,南屯,Nantun,,,,, -西屯,西屯,Xitun,,,,, -北屯,北屯,Beitun,,,,, -潭子,潭子,Tanzi,,,,, -萬華,萬華,Wanhua,,,,, -松山,松山,Songshan,,,,, -大同,大同,Datong,,,,, -士林,士林,Shilin,,,,, -北投,北投,Beitou,,,,, -花蓮,花蓮,Hualien,,,,, -新城,新城,Xincheng,,,,, -善化,善化,Shanhua,,,,, -山上,山上,Shanshang,,,,, -北斗,北斗,Beidou,,,,, -田尾,田尾,Tianwei,,,,, -金沙,金沙,Jinsha,,,,, -金湖,金湖,Jinhu,,,,, -柳營,柳營,Liuying,,,,, -東山,東山,Dongshan,,,,, -七股,七股,Qigu,,,,, -將軍,將軍,Jiangjun,,,,, -鼓山,鼓山,Gushan,,,,, -左營,左營,Zuoying,,,,, -中壢,中壢,Zhongli,,,,, -寶山,寶山,Baoshan,,,,, -恆春,恆春,Hengchun,,,,, -太平,太平,Taiping,,,,, -鳳林,鳳林,Fenglin,,,,, -萬榮,萬榮,Wanrong,,,,, -龍潭,龍潭,Longtan,,,,, -平鎮,平鎮,Pingzhen,,,,, -南港,南港,Nangang,,,,, -內湖,內湖,Neihu,,,,, -金寧,金寧,Jinning,,,,, -金城,金城,Jincheng,,,,, -尖石,尖石,Jianshi,,,,, -泰安,泰安,Tai'an,,,,, -和平,和平,Heping,,,,, -縣,縣,County,,,,, -鄉,鄉,Township,,,,, -鎮,鎮,Town,,,,, -市,市,City,,,,, -區,區,District,,,,, \ No newline at end of file +"key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" +"連江","連江","Lienchiang","連江","連江","連江","連江","連江" +"宜蘭","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜蘭" +"彰化","彰化","Changhua","彰化","彰化","彰化","彰化","彰化" +"南投","南投","Nantou","南投","南投","南投","南投","南投" +"雲林","雲林","Yunlin","雲林","雲林","雲林","雲林","雲林" +"屏東","屏東","Pingdong","屏東","屏東","屏東","屏東","屏東" +"基隆","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" +"臺北","臺北","Taipei","台北","臺北","臺北","臺北","臺北" +"新北","新北","New Taipei","新北","新北","新北","新北","新北" +"臺南","臺南","Tainan","台南","臺南","臺南","臺南","臺南" +"桃園","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃園" +"嘉義","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉義" +"金門","金門","Kinmen","金門","金門","金門","金門","金門" +"高雄","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" +"臺東","臺東","Taitung","台東","臺東","臺東","臺東","臺東" +"花蓮","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花蓮" +"澎湖","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" +"新竹","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" +"臺中","臺中","Taichung","台中","臺中","臺中","臺中","臺中" +"苗栗","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" +"成功","成功","Chenggong","成功","成功","成功","成功","成功" +"佳冬","佳冬","Jiadong","佳冬","佳冬","佳冬","佳冬","佳冬" +"麥寮","麥寮","Mailiao","麦寮","麥寮","麥寮","麥寮","麥寮" +"綠島","綠島","Ludao","緑島","綠島","綠島","綠島","綠島" +"蘭嶼","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","蘭嶼" +"田中","田中","Tianzhong","田中","田中","田中","田中","田中" +"社頭","社頭","Shetou","社頭","社頭","社頭","社頭","社頭" +"竹田","竹田","Zhutian","竹田","竹田","竹田","竹田","竹田" +"萬丹","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","萬丹" +"三灣","三灣","Sanwan","三湾","三灣","三灣","三灣","三灣" +"峨眉","峨眉","Emei","峨眉","峨眉","峨眉","峨眉","峨眉" +"南庄","南庄","Nanzhuang","南庄","南庄","南庄","南庄","南庄" +"太保","太保","Taibao","太保","太保","太保","太保","太保" +"中埔","中埔","Zhongpu","中埔","中埔","中埔","中埔","中埔" +"番路","番路","Fanlu","番路","番路","番路","番路","番路" +"水上","水上","Shuishang","水上","水上","水上","水上","水上" +"員林","員林","Yuanlin","員林","員林","員林","員林","員林" +"小港","小港","Xiaogang","小港","小港","小港","小港","小港" +"蘇澳","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","蘇澳" +"五結","五結","Wujie","五結","五結","五結","五結","五結" +"壯圍","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壯圍" +"南竿","南竿","Nangan","南竿","南竿","南竿","南竿","南竿" +"莒光","莒光","Juguang","莒光","莒光","莒光","莒光","莒光" +"烏坵","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","烏坵" +"羅東","羅東","Luodong","羅東","羅東","羅東","羅東","羅東" +"員山","員山","Yuanshan","員山","員山","員山","員山","員山" +"冬山","冬山","Dongshan","冬山","冬山","冬山","冬山","冬山" +"三星","三星","Sanxing","三星","三星","三星","三星","三星" +"大同","大同","Datong","大同","大同","大同","大同","大同" +"竹東","竹東","Zhudong","竹東","竹東","竹東","竹東","竹東" +"新埔","新埔","Sinpu","新埔","新埔","新埔","新埔","新埔" +"關西","關西","Guanxi","関西","關西","關西","關西","關西" +"湖口","湖口","Hukou","湖口","湖口","湖口","湖口","湖口" +"芎林","芎林","Qionglin","芎林","芎林","芎林","芎林","芎林" +"橫山","橫山","Hengshan","横山","橫山","橫山","橫山","橫山" +"北埔","北埔","Beipu","北埔","北埔","北埔","北埔","北埔" +"五峰","五峰","Wufeng","五峰","五峰","五峰","五峰","五峰" +"龍井","龍井","Longjing","龍井","龍井","龍井","龍井","龍井" +"大雅","大雅","Daya","大雅","大雅","大雅","大雅","大雅" +"沙鹿","沙鹿","Shalu","沙鹿","沙鹿","沙鹿","沙鹿","沙鹿" +"梧棲","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧棲" +"湖西","湖西","Husi","湖西","湖西","湖西","湖西","湖西" +"金峰","金峰","Jinfeng","金峰","金峰","金峰","金峰","金峰" +"太麻里","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" +"卓蘭","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓蘭" +"大湖","大湖","Dahu","大湖","大湖","大湖","大湖","大湖" +"公館","公館","Gongguan","公館","公館","公館","公館","公館" +"銅鑼","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","銅鑼" +"頭屋","頭屋","Touwu","頭屋","頭屋","頭屋","頭屋","頭屋" +"三義","三義","Sanyi","三義","三義","三義","三義","三義" +"西湖","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" +"造橋","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" +"獅潭","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" +"和美","和美","Hemei","和美","和美","和美","和美","和美" +"線西","線西","Xianxi","線西","線西","線西","線西","線西" +"伸港","伸港","Shenggang","伸港","伸港","伸港","伸港","伸港" +"秀水","秀水","Xiushui","秀水","秀水","秀水","秀水","秀水" +"花壇","花壇","Huatan","花壇","花壇","花壇","花壇","花壇" +"芬園","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬園" +"溪湖","溪湖","Xihu","渓湖","溪湖","溪湖","溪湖","溪湖" +"東石","東石","Dongshi","東石","東石","東石","東石","東石" +"大村","大村","Dacun","大村","大村","大村","大村","大村" +"埔鹽","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔鹽" +"埔心","埔心","Puxin","埔心","埔心","埔心","埔心","埔心" +"永靖","永靖","Yongjing ","永靖","永靖","永靖","永靖","永靖" +"二水","二水","Ershui","二水","二水","二水","二水","二水" +"二林","二林","Erlin","二林","二林","二林","二林","二林" +"埤頭","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤頭" +"芳苑","芳苑","Fangyuan","芳苑","芳苑","芳苑","芳苑","芳苑" +"大城","大城","Dacheng","大城","大城","大城","大城","大城" +"竹塘","竹塘","Zhutang","竹塘","竹塘","竹塘","竹塘","竹塘" +"溪州","溪州","Xizhou","渓州","溪州","溪州","溪州","溪州" +"埔里","埔里","Puli","埔里","埔里","埔里","埔里","埔里" +"草屯","草屯","Caotun","草屯","草屯","草屯","草屯","草屯" +"竹山","竹山","Zhushan","竹山","竹山","竹山","竹山","竹山" +"集集","集集","Jiji","集集","集集","集集","集集","集集" +"名間","名間","Mingjian","名間","名間","名間","名間","名間" +"鹿谷","鹿谷","Lugu","鹿谷","鹿谷","鹿谷","鹿谷","鹿谷" +"中寮","中寮","Zhongliao","中寮","中寮","中寮","中寮","中寮" +"魚池","魚池","Yuchi","魚池","魚池","魚池","魚池","魚池" +"國姓","國姓","Guoxing","国姓","國姓","國姓","國姓","國姓" +"水里","水里","Shuili","水里","水里","水里","水里","水里" +"信義","信義","Xinyi","信義","信義","信義","信義","信義" +"仁愛","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁愛" +"斗六","斗六","Douliu","斗六","斗六","斗六","斗六","斗六" +"斗南","斗南","Dounan","斗南","斗南","斗南","斗南","斗南" +"虎尾","虎尾","Huwei","虎尾","虎尾","虎尾","虎尾","虎尾" +"西螺","西螺","Xiluo","西螺","西螺","西螺","西螺","西螺" +"土庫","土庫","Tuku","土庫","土庫","土庫","土庫","土庫" +"北港","北港","Beigang","北港","北港","北港","北港","北港" +"古坑","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" +"大埤","大埤","Dapi","大埤","大埤","大埤","大埤","大埤" +"莿桐","莿桐","Citong","莿桐","莿桐","莿桐","莿桐","莿桐" +"林內","林內","Linnei","林内","林內","林內","林內","林內" +"二崙","二崙","Erlun","二崙","二崙","二崙","二崙","二崙" +"崙背","崙背","Lunbei","崙背","崙背","崙背","崙背","崙背" +"東勢","東勢","Dongshi","東勢","東勢","東勢","東勢","東勢" +"褒忠","褒忠","Baozhong","褒忠","褒忠","褒忠","褒忠","褒忠" +"元長","元長","Yuanchang","元長","元長","元長","元長","元長" +"水林","水林","Shuilin","水林","水林","水林","水林","水林" +"朴子","朴子","Puzi","朴子","朴子","朴子","朴子","朴子" +"大林","大林","Dalin","大林","大林","大林","大林","大林" +"民雄","民雄","Minxiong","民雄","民雄","民雄","民雄","民雄" +"溪口","溪口","Xikou","渓口","溪口","溪口","溪口","溪口" +"新港","新港","Xingang","新港","新港","新港","新港","新港" +"六腳","六腳","Liujiao","六脚","六腳","六腳","六腳","六腳" +"義竹","義竹","Yizhu","義竹","義竹","義竹","義竹","義竹" +"鹿草","鹿草","Lucao","鹿草","鹿草","鹿草","鹿草","鹿草" +"竹崎","竹崎","Zhuqi","竹崎","竹崎","竹崎","竹崎","竹崎" +"梅山","梅山","Meishan","梅山","梅山","梅山","梅山","梅山" +"大埔","大埔","Dapu","大埔","大埔","大埔","大埔","大埔" +"阿里山","阿里山","Alishan","阿里山","阿里山","阿里山","阿里山","阿里山" +"潮州","潮州","Chaojhou","潮州","潮州","潮州","潮州","潮州" +"長治","長治","Changzhi","長治","長治","長治","長治","長治" +"麟洛","麟洛","Linluo","麟洛","麟洛","麟洛","麟洛","麟洛" +"九如","九如","Jiuru","九如","九如","九如","九如","九如" +"里港","里港","Ligang","里港","里港","里港","里港","里港" +"鹽埔","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","鹽埔" +"高樹","高樹","Gaoshu","高樹","高樹","高樹","高樹","高樹" +"萬巒","萬巒","Wanluan","万巒","萬巒","萬巒","萬巒","萬巒" +"內埔","內埔","Neipu","内埔","內埔","內埔","內埔","內埔" +"新埤","新埤","Xinpi","新埤","新埤","新埤","新埤","新埤" +"崁頂","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁頂" +"南州","南州","Nanzhou","南州","南州","南州","南州","南州" +"琉球","琉球","Liuqiu","琉球","琉球","琉球","琉球","琉球" +"三地門","三地門","Sandimen","三地門","三地門","三地門","三地門","三地門" +"霧臺","霧臺","Wutai","霧台","霧臺","霧臺","霧臺","霧臺" +"瑪家","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","瑪家" +"泰武","泰武","Taiwu","泰武","泰武","泰武","泰武","泰武" +"來義","來義","Laiyi","来義","來義","來義","來義","來義" +"春日","春日","Chunri","春日","春日","春日","春日","春日" +"獅子","獅子","Shizi","獅子","獅子","獅子","獅子","獅子" +"鹿野","鹿野","Luye","鹿野","鹿野","鹿野","鹿野","鹿野" +"池上","池上","Chihshang","池上","池上","池上","池上","池上" +"延平","延平","Yanping","延平","延平","延平","延平","延平" +"光復","光復","Guangfu","光復","光復","光復","光復","光復" +"瑞穗","瑞穗","Ruisui","瑞穂","瑞穗","瑞穗","瑞穗","瑞穗" +"富里","富里","Fuli","富里","富里","富里","富里","富里" +"馬公","馬公","Magong","馬公","馬公","馬公","馬公","馬公" +"白沙","白沙","Baisha","白沙","白沙","白沙","白沙","白沙" +"西嶼","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西嶼" +"望安","望安","Wangan","望安","望安","望安","望安","望安" +"七美","七美","Qimei","七美","七美","七美","七美","七美" +"暖暖","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" +"大安","大安","Da-An","大安","大安","大安","大安","大安" +"文山","文山","Wenshan","文山","文山","文山","文山","文山" +"鹽埕","鹽埕","Yancheng","塩埕","鹽埕","鹽埕","鹽埕","鹽埕" +"新興","新興","Sinsing","新興","新興","新興","新興","新興" +"前金","前金","Qianjin","前金","前金","前金","前金","前金" +"前鎮","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前鎮" +"頭城","頭城","Toucheng","頭城","頭城","頭城","頭城","頭城" +"南澳","南澳","Nanao","南澳","南澳","南澳","南澳","南澳" +"竹北","竹北","Zhubei","竹北","竹北","竹北","竹北","竹北" +"新豐","新豐","Sinfong","新豊","新豐","新豐","新豐","新豐" +"苑裡","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑裡" +"通霄","通霄","Tongxiao","通霄","通霄","通霄","通霄","通霄" +"竹南","竹南","Jhunan","竹南","竹南","竹南","竹南","竹南" +"後龍","後龍","Houlong","後龍","後龍","後龍","後龍","後龍" +"鹿港","鹿港","Lukang","鹿港","鹿港","鹿港","鹿港","鹿港" +"福興","福興","Fuxing","福興","福興","福興","福興","福興" +"臺西","臺西","Taixi","台西","臺西","臺西","臺西","臺西" +"四湖","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" +"口湖","口湖","Kouhu","口湖","口湖","口湖","口湖","口湖" +"布袋","布袋","Budai","布袋","布袋","布袋","布袋","布袋" +"東港","東港","Donggang","東港","東港","東港","東港","東港" +"枋寮","枋寮","Fangliao","枋寮","枋寮","枋寮","枋寮","枋寮" +"新園","新園","Xinyuan","新園","新園","新園","新園","新園" +"林邊","林邊","Linbian","林辺","林邊","林邊","林邊","林邊" +"車城","車城","Checheng","車城","車城","車城","車城","車城" +"滿州","滿州","Manzhou","満州","滿州","滿州","滿州","滿州" +"枋山","枋山","Fangshan","枋山","枋山","枋山","枋山","枋山" +"牡丹","牡丹","Mudan","牡丹","牡丹","牡丹","牡丹","牡丹" +"卑南","卑南","Beinan","卑南","卑南","卑南","卑南","卑南" +"東河","東河","Donghe","東河","東河","東河","東河","東河" +"吉安","吉安","Ji'an","吉安","吉安","吉安","吉安","吉安" +"壽豐","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","壽豐" +"秀林","秀林","Xiulin","秀林","秀林","秀林","秀林","秀林" +"楠梓","楠梓","Nanzi","楠梓","楠梓","楠梓","楠梓","楠梓" +"鳳山","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","鳳山" +"大寮","大寮","Daliao","大寮","大寮","大寮","大寮","大寮" +"大樹","大樹","Dashu","大樹","大樹","大樹","大樹","大樹" +"大社","大社","Dashe","大社","大社","大社","大社","大社" +"仁武","仁武","Renwu","仁武","仁武","仁武","仁武","仁武" +"鳥松","鳥松","Niaosong","鳥松","鳥松","鳥松","鳥松","鳥松" +"岡山","岡山","Gangshan","岡山","岡山","岡山","岡山","岡山" +"橋頭","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","橋頭" +"燕巢","燕巢","Yanchao","燕巣","燕巢","燕巢","燕巢","燕巢" +"田寮","田寮","Tianliao","田寮","田寮","田寮","田寮","田寮" +"阿蓮","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿蓮" +"路竹","路竹","Luzhu","路竹","路竹","路竹","路竹","路竹" +"湖內","湖內","Hunei","湖内","湖內","湖內","湖內","湖內" +"旗山","旗山","Qishan","旗山","旗山","旗山","旗山","旗山" +"美濃","美濃","Meinong","美濃","美濃","美濃","美濃","美濃" +"六龜","六龜","Liugui","六亀","六龜","六龜","六龜","六龜" +"甲仙","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" +"杉林","杉林","Shanlin","杉林","杉林","杉林","杉林","杉林" +"內門","內門","Neimen","内門","內門","內門","內門","內門" +"茂林","茂林","Maolin","茂林","茂林","茂林","茂林","茂林" +"桃源","桃源","Taoyuan","桃源","桃源","桃源","桃源","桃源" +"那瑪夏","那瑪夏","Namaxia","那瑪夏","那瑪夏","那瑪夏","那瑪夏","那瑪夏" +"永和","永和","Yonghe","永和","永和","永和","永和","永和" +"新店","新店","Xindian","新店","新店","新店","新店","新店" +"土城","土城","Tucheng","土城","土城","土城","土城","土城" +"蘆洲","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","蘆洲" +"五股","五股","Wugu","五股","五股","五股","五股","五股" +"坪林","坪林","Pinglin","坪林","坪林","坪林","坪林","坪林" +"平溪","平溪","Pingxi","平渓","平溪","平溪","平溪","平溪" +"烏來","烏來","Wulai","烏来","烏來","烏來","烏來","烏來" +"豐原","豐原","Fengyuan","豊原","豐原","豐原","豐原","豐原" +"后里","后里","Houli","后里","后里","后里","后里","后里" +"神岡","神岡","Shengang","神岡","神岡","神岡","神岡","神岡" +"新社","新社","Xinshe","新社","新社","新社","新社","新社" +"石岡","石岡","Shigang","石岡","石岡","石岡","石岡","石岡" +"外埔","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" +"大肚","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" +"新營","新營","Xinying","新営","新營","新營","新營","新營" +"鹽水","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","鹽水" +"白河","白河","Baihe","白河","白河","白河","白河","白河" +"後壁","後壁","Houbi","後壁","後壁","後壁","後壁","後壁" +"麻豆","麻豆","Madou","麻豆","麻豆","麻豆","麻豆","麻豆" +"下營","下營","Xiaying","下営","下營","下營","下營","下營" +"六甲","六甲","Liujia","六甲","六甲","六甲","六甲","六甲" +"官田","官田","Guantian","官田","官田","官田","官田","官田" +"大內","大內","Danei","大内","大內","大內","大內","大內" +"佳里","佳里","Jiali","佳里","佳里","佳里","佳里","佳里" +"學甲","學甲","Xuejia","学甲","學甲","學甲","學甲","學甲" +"西港","西港","Xigang","西港","西港","西港","西港","西港" +"新化","新化","Xinhua","新化","新化","新化","新化","新化" +"新市","新市","Xinshi","新市","新市","新市","新市","新市" +"安定","安定","Anding","安定","安定","安定","安定","安定" +"玉井","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" +"楠西","楠西","Nanxi","楠西","楠西","楠西","楠西","楠西" +"南化","南化","Nanhua","南化","南化","南化","南化","南化" +"左鎮","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左鎮" +"仁德","仁德","Rende","仁徳","仁德","仁德","仁德","仁德" +"歸仁","歸仁","Guiren","帰仁","歸仁","歸仁","歸仁","歸仁" +"關廟","關廟","Guanmiao","関廟","關廟","關廟","關廟","關廟" +"龍崎","龍崎","Longqi","龍崎","龍崎","龍崎","龍崎","龍崎" +"永康","永康","Yongkang","永康","永康","永康","永康","永康" +"北","北","North","北","北","北","北","北" +"林園","林園","Linyuan","林園","林園","林園","林園","林園" +"茄萣","茄萣","Qieding","茄萣","茄萣","茄萣","茄萣","茄萣" +"永安","永安","Yong'An","永安","永安","永安","永安","永安" +"彌陀","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","彌陀" +"梓官","梓官","Ziguan","梓官","梓官","梓官","梓官","梓官" +"淡水","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" +"瑞芳","瑞芳","Rueifang","瑞芳","瑞芳","瑞芳","瑞芳","瑞芳" +"林口","林口","Linkou","林口","林口","林口","林口","林口" +"三芝","三芝","Sanzhi","三芝","三芝","三芝","三芝","三芝" +"八里","八里","Bali","八里","八里","八里","八里","八里" +"大甲","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" +"北門","北門","Beimen","北門","北門","北門","北門","北門" +"安南","安南","Annan","安南","安南","安南","安南","安南" +"蘆竹","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","蘆竹" +"龜山","龜山","Guishan","亀山","龜山","龜山","龜山","龜山" +"復興","復興","Fuxing","復興","復興","復興","復興","復興" +"東","東","East","東","東","東","東","東" +"西","西","West","西","西","西","西","西" +"達仁","達仁","Daren","達仁","達仁","達仁","達仁","達仁" +"大武","大武","Dawu","大武","大武","大武","大武","大武" +"關山","關山","Guanshan","関山","關山","關山","關山","關山" +"海端","海端","Haiduan","海端","海端","海端","海端","海端" +"香山","香山","Xiangshan","香山","香山","香山","香山","香山" +"礁溪","礁溪","Chiaoshi","礁渓","礁溪","礁溪","礁溪","礁溪" +"玉里","玉里","Yuli","玉里","玉里","玉里","玉里","玉里" +"卓溪","卓溪","Zhuoxi","卓渓","卓溪","卓溪","卓溪","卓溪" +"頭份","頭份","Toufen","頭份","頭份","頭份","頭份","頭份" +"清水","清水","Qingshui","清水","清水","清水","清水","清水" +"南","南","South","南","南","南","南","南" +"安平","安平","Anping","安平","安平","安平","安平","安平" +"中西","中西","West Central","中西","中西","中西","中西","中西" +"大溪","大溪","Dasi","大渓","大溪","大溪","大溪","大溪" +"八德","八德","Bade","八徳","八德","八德","八德","八德" +"大園","大園","Dayuan","大園","大園","大園","大園","大園" +"楊梅","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","楊梅" +"七堵","七堵","Qidu","七堵","七堵","七堵","七堵","七堵" +"中正","中正","Zhongzheng","中正","中正","中正","中正","中正" +"中山","中山","Zhongshan","中山","中山","中山","中山","中山" +"安樂","安樂","Anle","安楽","安樂","安樂","安樂","安樂" +"三峽","三峽","Sanshia","三峡","三峽","三峽","三峽","三峽" +"鶯歌","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","鶯歌" +"中和","中和","Zhonghe","中和","中和","中和","中和","中和" +"樹林","樹林","Shulin","樹林","樹林","樹林","樹林","樹林" +"深坑","深坑","Shenkeng","深坑","深坑","深坑","深坑","深坑" +"板橋","板橋","Banchiao","板橋","板橋","板橋","板橋","板橋" +"石碇","石碇","Shihding","石碇","石碇","石碇","石碇","石碇" +"新莊","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新莊" +"泰山","泰山","Taishan","泰山","泰山","泰山","泰山","泰山" +"三重","三重","Sanchong","三重","三重","三重","三重","三重" +"雙溪","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","雙溪" +"貢寮","貢寮","Gongliao","貢寮","貢寮","貢寮","貢寮","貢寮" +"汐止","汐止","Xizhi","汐止","汐止","汐止","汐止","汐止" +"萬里","萬里","Wanli","万里","萬里","萬里","萬里","萬里" +"金山","金山","Jinshan","金山","金山","金山","金山","金山" +"石門","石門","Shimen","石門","石門","石門","石門","石門" +"苓雅","苓雅","Lingya","苓雅","苓雅","苓雅","苓雅","苓雅" +"三民","三民","Sanmin","三民","三民","三民","三民","三民" +"新屋","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" +"觀音","觀音","Guanyin","観音","觀音","觀音","觀音","觀音" +"北竿","北竿","Beigan","北竿","北竿","北竿","北竿","北竿" +"東引","東引","Dongyin","東引","東引","東引","東引","東引" +"烈嶼","烈嶼","Lieyu","烈嶼","烈嶼","烈嶼","烈嶼","烈嶼" +"旗津","旗津","Qijin","旗津","旗津","旗津","旗津","旗津" +"長濱","長濱","Changbin","長浜","長濱","長濱","長濱","長濱" +"豐濱","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","豐濱" +"霧峰","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","霧峰" +"大里","大里","Dali","大里","大里","大里","大里","大里" +"烏日","烏日","Wuri","烏日","烏日","烏日","烏日","烏日" +"中","中","Central","中","中","中","中","中" +"南屯","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" +"西屯","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" +"北屯","北屯","Beitun","北屯","北屯","北屯","北屯","北屯" +"潭子","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" +"萬華","萬華","Wanhua","万華","萬華","萬華","萬華","萬華" +"松山","松山","Songshan","松山","松山","松山","松山","松山" +"士林","士林","Shilin","士林","士林","士林","士林","士林" +"北投","北投","Beitou","北投","北投","北投","北投","北投" +"新城","新城","Xincheng","新城","新城","新城","新城","新城" +"善化","善化","Shanhua","善化","善化","善化","善化","善化" +"山上","山上","Shanshang","山上","山上","山上","山上","山上" +"北斗","北斗","Beidou","北斗","北斗","北斗","北斗","北斗" +"田尾","田尾","Tianwei","田尾","田尾","田尾","田尾","田尾" +"金沙","金沙","Jinsha ","金沙","金沙","金沙","金沙","金沙" +"金湖","金湖","Jinhu","金湖","金湖","金湖","金湖","金湖" +"柳營","柳營","Liuying","柳営","柳營","柳營","柳營","柳營" +"東山","東山","Dongshan","東山","東山","東山","東山","東山" +"七股","七股","Qigu","七股","七股","七股","七股","七股" +"將軍","將軍","Jiangjun","将軍","將軍","將軍","將軍","將軍" +"鼓山","鼓山","Gushan","鼓山","鼓山","鼓山","鼓山","鼓山" +"左營","左營","Zuoying","左営","左營","左營","左營","左營" +"中壢","中壢","Zhongli","中壢","中壢","中壢","中壢","中壢" +"寶山","寶山","Baoshan","宝山","寶山","寶山","寶山","寶山" +"恆春","恆春","Hengchun","恒春","恆春","恆春","恆春","恆春" +"太平","太平","Taiping","太平","太平","太平","太平","太平" +"鳳林","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","鳳林" +"萬榮","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","萬榮" +"龍潭","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龍潭" +"平鎮","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平鎮" +"南港","南港","Nangang","南港","南港","南港","南港","南港" +"內湖","內湖","Neihu","内湖","內湖","內湖","內湖","內湖" +"金寧","金寧","Jinning","金寧","金寧","金寧","金寧","金寧" +"金城","金城","Jincheng","金城","金城","金城","金城","金城" +"尖石","尖石","Jianshi","尖石","尖石","尖石","尖石","尖石" +"泰安","泰安","Tai-An","泰安","泰安","泰安","泰安","泰安" +"和平","和平","Heping","和平","和平","和平","和平","和平" +"縣","縣","County","県","縣","縣","縣","縣" +"鄉","鄉","Township","郷","鄉","鄉","鄉","鄉" +"鎮","鎮","Town","鎮","鎮","鎮","鎮","鎮" +"市","市","City","市","市","市","市","市" +"區","區","District","区","區","區","區","區" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index aa638b9a0..66cc78ed1 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -1,1387 +1,1340 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-07-23 03:45\n" -"Language-Team: Russian\n" -"Language: ru_RU\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 " -"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 " -"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ru\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"PO-Revision-Date: 2025-08-13 10:04\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "" -#: lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Переведено {translated}・Утверждено {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "" -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "" -#: lib/app/settings/location/page.dart:76 +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" msgstr "" -#: lib/app/settings/location/page.dart:78 +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" msgstr "" -#: lib/app/settings/location/page.dart:79 +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "" -#: lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" msgstr "" -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "" -#: lib/app/settings/map/page.dart:47 +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" msgstr "" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" msgstr "" -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "" -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" msgstr "" -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" msgstr "" -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" msgstr "" -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "" -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" msgstr "" -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "" -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:267 +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:274 +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:865 +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Ясно" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "Ясно, дымка" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "Ясно, туман" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "Ясно, молния" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "Ясно, гром" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "Ясно, туман" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "Ясно, дождь" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "Ясно, дождь со снегом" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "Ясно, сильный снег" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "Ясно, снежная крупа" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "Ясно, ледяной дождь" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "Ясно, снежные заряды" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "Ясно, дождь со снегом" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "Ясно, град" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "Ясно, гроза" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "Ясно, дымка" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "Ясно, туман" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "Ясно, гром" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "Ясно, туман" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "Ясно, дождь" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "Ясно, град" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:93 msgid "{city} {town}" msgstr "" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" msgstr "" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" msgstr "" + diff --git a/assets/translations/vi.po b/assets/translations/vi.po index 04c7ad25b..bc77fc2d0 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -1,1464 +1,1343 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-07-23 03:45\n" -"Language-Team: Vietnamese\n" -"Language: vi_VN\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: vi\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"PO-Revision-Date: 2025-08-13 10:04\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Vị Trí Hiện Tại" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "Ngôn ngữ" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "Bản đồ" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "Thông báo đẩy" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "Cảnh báo động đất sớm" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "giám sát động đất" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "Báo cáo động đất" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "Cảnh báo nhanh về cường độ địa chấn" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "Thông báo giông sét" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "Cảnh báo thời tiết" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "Cổng thông tin phòng chống thiên tai" +msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "Thông tin sóng thần" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "Thông báo" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "quyên tặng" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "Cài đặt" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "Cường độ tại địa phương từ 1 trở lên" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "Cường độ tại địa phương từ 4 trở lên" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "Kiểm tra âm thanh" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "Khi gửi thông báo" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "Cảnh báo động đất sớm" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "Khác" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" msgstr "" -"Khi phát hành cảnh báo sóng thần\n" -"các xã, thị trấn ven biển" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "Nói chung" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "Khi tin tức về sóng thần Thái Bình Dương được công bố" +msgstr "" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "Tin tức về sóng thần Thái Bình Dương (Thông báo im lặng)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "Khi tin tức về sóng thần Thái Bình Dương được công bố" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "Giám sát động đất mạnh(Chung)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "Phát hiện rung chuyển" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "Báo cáo chớp nhoáng cường độ địa chấn (Chung)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "Cường độ thực đo tại địa phương (thị trấn) từ 3 trở lên" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "Báo cáo chớp nhoáng cường độ địa chấn (Thông báo im lặng)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "Cường độ thực đo tại địa phương (thị trấn) từ 1 trở lên" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "Báo cáo động đất (Chung)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "Cường độ thực đo tại địa phương (Quận và thành phố) từ 3 trở lên" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "Báo cáo động đất (Thông báo im lặng)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "Cường độ thực đo tại địa phương (Quận và thành phố) từ 1 trở lên" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "Cảnh báo động đất khẩn cấp (Lớn)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 4 trở lên" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Cảnh báo động đất (Nhỏ)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 2 trở lên" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Cảnn báo động đất (Im Lặng)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 1 trở lên" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "Báo cáo chớp nhoáng động đất (Lớn)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 4 trở lên" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "Cảnh báo sớm về động đất (Chung)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 2 trở lên" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "Báo cáo nhanh về động đất (im lặng)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "Dự đoán cường độ tại địa phương (thị trấn) từ 1 trở lên" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" -msgstr "Khi khu vực địa phương (thị trấn) ban hành cảnh báo sơ tán" +msgstr "" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" -msgstr "Khi khu vực địa phương (thị trấn) thông báo thông tin sơ tán" +msgstr "" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " -"tín hiệu đỏ" +msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu đỏ" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " -"tín hiệu" +msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" -msgstr "Khi khu vực địa phương (thị trấn) ban hành cảnh báo sơ tán" +msgstr "" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "Khi khu vực địa phương (thị trấn) thông báo thông tin sơ tán" +msgstr "" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "Ngôn ngữ hiển thị" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "Ngôn ngữ hệ thống" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "Hỗ trợ biên dịch" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "Nhấp vào đây để giúp chúng tôi cải thiện bản dịch DPIP" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "Chọn ngôn ngữ" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "Đã dịch {translated}・Đã hiệu đính {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "Ngôn ngữ nguồn" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "Không thể tải nhật ký thay đổi, vui lòng thử lại sau." -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "" -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "Vị trí" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "Thiết lập vị trí để nhận thông tin địa phương theo thời gian thực" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "Nhật ký thay đổi" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" -msgstr "" -"Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ " -"của chúng tôi" +msgstr "Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ của chúng tôi" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "Giấy phép gói phần mềm của bên thứ ba" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "Gỡ lỗi" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "Đã sao chép Token thông báo" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "Nhật ký ứng dụng" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "" -"Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung " -"ương (CWA) công bố." +msgstr "Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung ương (CWA) công bố." -#: lib/app/settings/location/page.dart:76 +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" msgstr "" -#: lib/app/settings/location/page.dart:78 +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" msgstr "" -#: lib/app/settings/location/page.dart:79 +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "Chế độ nguồn điện thấp" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "" -#: lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "Hủy bỏ" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "Cập nhật tự động" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "Cập nhật vị trí hiện tại định kỳ" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động " -"cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết " -"và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới " -"nhất tại địa phương." +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới nhất tại địa phương." -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "Quận" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" -msgstr "giám sát động đất" +msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "Hình ảnh radar" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "Nhiệt độ" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "Lượng mưa" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "Hướng gió/Tốc độ gió" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" msgstr "" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "Sáng" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "Tối" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "Theo chủ đề hệ thống" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "Chủ đề" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "Xác nhận" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. " -"Tình trạng này kéo dài đến {time}." +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. Tình trạng này kéo dài đến {time}." -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" -msgstr "" -"Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài " -"Loan." +msgstr "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài Loan." -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "Chưa đặt" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "Bạn chưa thiết lập vị trí của mình" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "Ngoại lệ xảy ra khi thu thập thông tin thời tiết" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "Không thể tải nhật ký thay đổi, vui lòng thử lại sau." -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "Thử lại" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "Tiếp theo" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "Cổng thông tin phòng chống thiên tai" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "Chúng tôi là ai?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có " -"độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và " -"Nam), Nhật Bản, Hàn Quốc và Trung Quốc." +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và Nam), Nhật Bản, Hàn Quốc và Trung Quốc." -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Chúng tôi đã bắt đầu với những gì" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở " -"thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra " -"ngoài phạm vi trường học và trở thành nhóm như hiện nay." +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra ngoài phạm vi trường học và trở thành nhóm như hiện nay." -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Những điều cần lưu ý" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, " -"trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin " -"có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như " -"vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "" -"Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." +msgstr "Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do " -"đó cần phải thận trọng và hiểu rõ." +msgstr "Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do đó cần phải thận trọng và hiểu rõ." -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi " -"phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân " -"thủ các quy định có liên quan." +msgstr "Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân thủ các quy định có liên quan." -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Chào mừng đến với DPIP" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích " -"hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) " -"và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một " -"ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "Dịch vụ được sử dụng để gửi thông báo cảnh báo thiên tai khẩn cấp" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại " -"khu vực hiện tại" +msgstr "Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại khu vực hiện tại" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm " -"họa ngay lập tức." +msgstr "Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm họa ngay lập tức." -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "Lưu trữ hình" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung " -"ương (CWA) hoặc ExpTech." +msgstr "Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) hoặc ExpTech." -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "Yêu cầu để xin phép" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "" -"Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." +msgstr "Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "Sự cho phép" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của " -"họ." +msgstr "Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của họ." -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "Hôm nay" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 phút" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 giờ" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 giờ" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 giờ" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 giờ" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 giờ" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 ngày" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 ngày" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" -msgstr "Bản đồ gia tốc mặt đất tối đa" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" -msgstr "Bản đồ vận tốc mặt đất tối đa" +msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:865 +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "Thêm" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "Động đất nhẹ, cảm nhận được ở khu vực nhỏ" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "Cường độ" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "Độ sâu chấn tiêu" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "Trang báo cáo" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "Ngày giờ nhận biết động đất" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "nằm ở" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "Cường độ địa chấn tại các khu vực" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "Bản đồ báo cáo động đất" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "Bản đồ cường độ địa chấn" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "Bản đồ gia tốc mặt đất tối đa" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "Bản đồ vận tốc mặt đất tối đa" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "Mùa hè" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "Đám mây" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "Ngày nhiều mây" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:93 msgid "{city} {town}" msgstr "" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" msgstr "" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" msgstr "" -#~ msgid "避難資訊" -#~ msgstr "Thông tin di tản" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "" -#~ "Khi cảnh báo sóng thần được ban hành.\n" -#~ "Các khu vực bị loại trừ khỏi các mục trên." - -#~ msgid "直轄市/縣市" -#~ msgstr "Thành phố trực thuộc trung ương/Tỉnh thành" - -#~ msgid "鄉鎮市區" -#~ msgstr "Quận/Phường/Xã" diff --git a/assets/translations/weather_station_names.csv b/assets/translations/weather_station_names.csv index 2e5eaac0d..51624ec03 100644 --- a/assets/translations/weather_station_names.csv +++ b/assets/translations/weather_station_names.csv @@ -1,818 +1,818 @@ -key,zh-Hant,en,ja,ko,ru,vi,zh-Hans -466850,五分山雷達站,Wufenshan,,,,, -466881,新北,New Taipei,,,,, -466900,淡水,Tamsui,,,,, -466910,鞍部,Anbu,,,,, -466920,臺北,Taipei,,,,, -466930,竹子湖,Zhuzihu,,,,, -466940,基隆,Keelung,,,,, -466950,彭佳嶼,Pengjiayu,,,,, -466990,花蓮,Hualien,,,,, -467050,新屋,Xinwu,,,,, -467080,宜蘭,Yilan,,,,, -467110,金門,Kinmen,,,,, -467270,田中,Tianzhong,,,,, -467280,後龍,Houlong,,,,, -467290,古坑,Gukeng,,,,, -467300,東吉島,Dongjidao,,,,, -467350,澎湖,Penghu,,,,, -467410,臺南,Tainan,,,,, -467420,永康,Yongkang,,,,, -467441,高雄,Kaohsiung,,,,, -467480,嘉義,Chiayi,,,,, -467490,臺中,Taichung,,,,, -467530,阿里山,Alishan,,,,, -467540,大武,Dawu,,,,, -467550,玉山,Yushan,,,,, -467571,新竹,Hsinchu,,,,, -467590,恆春,Hengchun,,,,, -467610,成功,Chenggong,,,,, -467620,蘭嶼,Lanyu,,,,, -467650,日月潭,Sun Moon Lake,,,,, -467660,臺東,Taitung,,,,, -467790,墾丁雷達站,Kenting,,,,, -467990,馬祖,Matsu,,,,, -12J990,口湖工作站,Kouhu Branch Station,,,,, -12Q970,東港工作站,Donggang Branch,,,,, -12Q980,恆春工作站,Hengchun Branch,,,,, -42HA10,萬大發電廠,Wanta Hydro,,,,, -72AI40,桃改樹林分場,Shulin Sub-station Of Taoyuan ARES,,,,, -72C440,桃園農改場,,,,,, -72D080,桃改五峰分場,Wufeng Sub-station Of Taoyuan ARES,,,,, -72D680,桃改新埔分場,Sinpu Sub-station Of Taoyuan ARES,,,,, -72G600,臺中農改場,Ta Tsun,,,,, -72HA00,中改埔里分場,Puli Sub-station Of Taichung ARES,,,,, -72K220,南改斗南分場,Dounan Sub-station Of Tainan ARES,,,,, -72M360,南改義竹分場,Yichu Sub-station Of Tainan ARES,,,,, -72M700,南改鹿草分場,Lucao Sub-station Of Tainan ARES,,,,, -72N100,臺南農改場,Tainan,,,,, -72N240,七股研究中心,Qigu Research Center,,,,, -72Q010,高雄農改場,Pingtung,,,,, -72S200,東改班鳩分場,Banjuou Sub-station Of Taitung ARES ,,,,, -72S590,東改賓朗果園,Binlung Orchard Sub-station Of Taitung ARES ,,,,, -72T250,花蓮農改場,Gi An,,,,, -72U480,花改蘭陽分場,Lanyang Sub-station Of Hualien ARES,,,,, -72V140,高改旗南分場,Chinan Sub-station Of Kaohsiung ARES,,,,, -82A750,茶改北部分場,North Branch Of TBRS,,,,, -82C160,茶改場,Tea And Beverage Research Station,,,,, -82H320,茶改中部分場,Middle Branch Of TRES,,,,, -82H840,茶改南部分場,South Branch Of TBRS,,,,, -82S580,茶改東部分場,East Branch Of TBRS,,,,, -A2C560,農工中心,,,,,, -A2K360,水試臺西試驗場,Taixi Experimental Fishing Ground,,,,, -A2K630,臺大雲林校區,Yunlin Branch Of NTU,,,,, -A2N290,臺南蘭花園區,Taiwan Orchid,,,,, -B2E890,畜試北區分所,North Branch Of TLRI,,,,, -B2N890,畜產試驗所,Hsin Hua,,,,, -B2Q810,畜試南區分所,South Branch Of TLRI,,,,, -B2U990,畜試東區分所,East Branch Of TLRI,,,,, -C2A540,四堵,Sihdu,,,,, -C2A560,福山,Fushan,,,,, -C2A650,火燒寮,Huoshaoliao,,,,, -C2A660,瑞芳,Rueifang,,,,, -C2A880,福隆,Fulong,,,,, -C2A920,富貴角,Fugueijiao,,,,, -C2C410,中央大學,Ncu,,,,, -C2D720,關西工作站,Guanxi Experiment Station,,,,, -C2D730,寶山農場,Baoshan Farm,,,,, -C2D740,屯原,Tunyuan,,,,, -C2E520,大湖,Dahu,,,,, -C2E540,龍溪,Longxi,,,,, -C2E880,三義,Sanyi,,,,, -C2E970,八甲,Bajia,,,,, -C2F000,大肚,Dadu,,,,, -C2F860,梨山,Lishan,,,,, -C2F930,大甲,Dajia,,,,, -C2F990,摩天嶺,Motianling,,,,, -C2F9A0,中竹林,Zhongzhulin,,,,, -C2FA00,烏石坑,Wushihkeng,,,,, -C2FB50,出雲,Chuyun,,,,, -C2FB60,頭櫃山,Touguishan,,,,, -C2G640,鹿港,Lukang,,,,, -C2G840,北斗,Beidou,,,,, -C2G870,芳苑,Fangyuan,,,,, -C2G980,田頭村,Toutian Village,,,,, -C2G9A0,畜試所彰化,Changhua Branch Of TLRI,,,,, -C2H950,中寮,Zhongliao,,,,, -C2H9D0,三隻寮,Sanziliao,,,,, -C2H9E0,國姓南港,Guoxing Nangang,,,,, -C2H9F0,柑林,Ganlin,,,,, -C2H9G0,百勝,Bosheng,,,,, -C2H9H0,苗改南投蜂場,Nantou Bee Farm Of Miaoli TARI,,,,, -C2H9J0,中台,Zhongtai,,,,, -C2H9L0,馬烈霸,Malieba,,,,, -C2H9M0,發祥,Faxiang,,,,, -C2H9N0,仁愛東眼,Renaidong,,,,, -C2H9P0,伊拿谷,Yinagu,,,,, -C2H9Q0,北東眼山,Beidongyanshan,,,,, -C2H9R0,卓社,Zhuoshe,,,,, -C2H9S0,龍南,Longnan,,,,, -C2H9T0,名間竹圍,Mingjianzhuwei,,,,, -C2H9U0,鳳鵬,Fengpeng,,,,, -C2H9W0,大坪頂農水,Dapingding Station,,,,, -C2I090,鳳凰,Fenghuang,,,,, -C2K240,草嶺,Caoling,,,,, -C2K610,草嶺石壁,Caolingshibi,,,,, -C2K620,馬光農場,Maguang Organic Agriculture Circular Park,,,,, -C2K630,荷苞,Hebao,,,,, -C2M410,馬頭山,Matoushan,,,,, -C2M620,瑞里,Ruili,,,,, -C2M910,嘉義大學,Chiayi University,,,,, -C2M920,朴子農改,Pozi DARES,,,,, -C2M930,石卓,Shizhuo,,,,, -C2M940,日野賀,Riyehe,,,,, -C2M950,太和,Taihe,,,,, -C2M960,外寮,Wailiao,,,,, -C2M970,碧湖,Bihu,,,,, -C2N160,西拉雅風管處,Siraya NSAH,,,,, -C2O810,曾文,Cengwen,,,,, -C2O930,玉井,Yujing,,,,, -C2O950,安南,Annan,,,,, -C2R170,屏東,Pingdong,,,,, -C2R970,屏科大,National Pingtung University,,,,, -C2V250,甲仙,Jiaxian,,,,, -C2V260,月眉,Yuemei,,,,, -C2V310,美濃,Meinong,,,,, -C2W030,金門農試所,Kimmann,,,,, -C2W230,畜試所澎湖,Penghu Field Area Of TLRI,,,,, -CAG100,王功漁港,Wanggong Fishing Port,,,,, -CAH030,茶改場竹圍站,TRES Chuwei Station,,,,, -CAJ050,海口故事園區,Haikou Story Camping Park,,,,, -CAL110,布袋國中,Budai Junior High School,,,,, -CAN130,水試所海水繁養殖中心,Mariculture Research Center,,,,, -CAN140,六官養殖協會,Liuguan Aquaculture,,,,, -CAQ030,崎峰國小,Cifong Elementary School,,,,, -E2H360,蓮華池,Lienhuchih,,,,, -E2HA20,林試畢祿溪站,Pilushi,,,,, -E2K600,四湖植物園,Sihu Botanical Garden,,,,, -E2P980,林試六龜中心,Lioukuei Research Center ,,,,, -E2P990,林試扇平站,Shanping,,,,, -E2S960,林試太麻里2,Taimalee2,,,,, -E2S980,林試太麻里1,Taimalee Research Center 1,,,,, -G2AI50,關渡,Guandu,,,,, -G2F820,農試所(霧峰),Taichung,,,,, -G2L020,農試嘉義分所,Chiayi Sub-station Of TARI,,,,, -G2M350,農試溪口農場,Xikou Farm Of TARI,,,,, -G2P820,農試鳳山分所,Fengshan Tropical Horticultural Of TARI,,,,, -K2E360,苗栗農改場,,,,,, -K2E710,苗改生物防治研究中心,Biological Control Branch Of Miaoli TARI,,,,, -K2F750,種苗改良場,Shin She,,,,, -U2H480,溪頭,Hsi Tou,,,,, -U2HA30,臺大和社,NTU Exfohoshe,,,,, -U2HA40,臺大內茅埔,NTU Exfoneimoupu,,,,, -U2HA50,臺大竹山,NTU Experimental Forest,,,,, -V2C250,八德合作社,Bade Cooperative,,,,, -V2C260,八德蔬果,Bade Fruit And Vegetable,,,,, -V2K610,大庄合作社,Dazhuang Cooperative,,,,, -V2K620,麥寮合作社,Mailiao Cooperative,,,,, -C0A520,山佳,Shanjia,,,,, -C0A530,坪林,Pinglin,,,,, -C0A550,泰平,Taiping,,,,, -C0A570,桶後,Tonghou,,,,, -C0A640,石碇,Shihding,,,,, -C0A770,科教館,Science Education Center ,,,,, -C0A860,大坪,Daping,,,,, -C0A870,五指山,Wujhihshan,,,,, -C0A890,雙溪,Shuangsi,,,,, -C0A931,三和,Sanhe,,,,, -C0A940,金山,Jinshan,,,,, -C0A950,鼻頭角,Bitoujiao,,,,, -C0A970,三貂角,Sandiaojiao,,,,, -C0A980,社子,Shezih,,,,, -C0A9C0,天母,Tianmu,,,,, -C0A9F0,內湖,Neihu,,,,, -C0AC40,大屯山,Datunshan,,,,, -C0AC60,三峽,Sanshia,,,,, -C0AC70,信義,Xinyi,,,,, -C0AC80,文山,Wenshan,,,,, -C0ACA0,新莊,Xinzhuang,,,,, -C0AD10,八里,Bali,,,,, -C0AD30,蘆洲,Lujhou,,,,, -C0AD40,土城,Tucheng,,,,, -C0AD50,鶯歌,Yingge,,,,, -C0AG80,中和,Zhonghe,,,,, -C0AH00,汐止,Xizhi,,,,, -C0AH10,永和,Yonghe,,,,, -C0AH30,五分山,Wufengshan,,,,, -C0AH40,平等,Pingdeng,,,,, -C0AH50,林口,Linkou,,,,, -C0AH70,松山,Songshan,,,,, -C0AH80,深坑,Shenkeng,,,,, -C0AH90,福山植物園,Fushan Botanical Garden,,,,, -C0AI00,五股,Wugu,,,,, -C0AI10,屈尺,Quchi,,,,, -C0AI20,白沙灣,Baishawan,,,,, -C0AI30,三重,Sanchong,,,,, -C0AI40,石牌,Shipai,,,,, -C0AJ20,野柳,Yehliou,,,,, -C0AJ30,淡水觀海,Danshuei Guanhai,,,,, -C0AJ40,石門,Shimen,,,,, -C0AJ50,水湳洞,Shuinandong,,,,, -C0AJ60,六塊厝,Lioukuaitsuo,,,,, -C0AJ70,田寮,Tianliao,,,,, -C0AJ80,板橋,Banchiao,,,,, -C0AJ90,澳底,Aodi,,,,, -C0AK10,太平里,Taiping Vil.,,,,, -C0AK30,硬漢嶺,Yinghanling,,,,, -C0B010,七堵,Qidu,,,,, -C0B020,基隆嶼,Keelung Islet,,,,, -C0B040,大武崙,Dawulun,,,,, -C0B050,八斗子,Badouzi,,,,, -C0B060,暖暖,Nuannuan,,,,, -C0C460,復興,Fuxing,,,,, -C0C480,桃園,Taoyuan,,,,, -C0C490,八德,Bade,,,,, -C0C590,觀音,Guanyin,,,,, -C0C620,蘆竹,Luzhu,,,,, -C0C630,大溪,Dasi,,,,, -C0C650,平鎮,Pingjhen,,,,, -C0C660,楊梅,Yangmei,,,,, -C0C670,龍潭,Longtan,,,,, -C0C680,龜山,Guishan,,,,, -C0C700,中壢,Zhongli,,,,, -C0C710,大溪永福,Yongfu Daxi,,,,, -C0C720,竹圍,Jhuwei,,,,, -C0C730,中大臨海站,Jhongda Coastal Station,,,,, -C0C740,觀音工業區,Guanyin Industrial Area,,,,, -C0C750,新興坑尾,Sinsingkengwei,,,,, -C0C790,東眼山,Dongyanshan,,,,, -C0C800,四稜,Sileng,,,,, -C0D360,梅花,Meihua,,,,, -C0D430,峨眉,Emei,,,,, -C0D480,打鐵坑,Datiekeng,,,,, -C0D540,橫山,Hengshan,,,,, -C0D550,雪霸,Xueba,,,,, -C0D560,竹東,Zhudong,,,,, -C0D580,寶山,Baoshan,,,,, -C0D590,新豐,Sinfong,,,,, -C0D650,湖口,Hukou,,,,, -C0D660,新竹市東區,Dongqu Hsinshu City,,,,, -C0D670,海天一線,Haitianyisian,,,,, -C0D680,香山濕地,Siangshan Wetland,,,,, -C0D690,外湖,Waihu,,,,, -C0D700,關西,Guanxi,,,,, -C0D750,樂山林道6k,Leshan 6k,,,,, -C0D760,大坪苗圃,Daping Nurserygarden,,,,, -C0E420,竹南,Jhunan,,,,, -C0E430,南庄,Nanzhuang,,,,, -C0E550,明德,Mingde,,,,, -C0E570,白沙屯,Baishatun,,,,, -C0E590,通霄,Tongxiao,,,,, -C0E610,馬都安,Madu-An,,,,, -C0E730,頭份,Toufen,,,,, -C0E740,造橋,Zaoqiao,,,,, -C0E750,苗栗,Miaoli,,,,, -C0E780,銅鑼,Tongluo,,,,, -C0E791,卓蘭,Zhuolan,,,,, -C0E810,西湖,Xihu,,,,, -C0E820,獅潭,Shitan,,,,, -C0E830,苑裡,Yuanli,,,,, -C0E850,大河,Dahe,,,,, -C0E870,高鐵苗栗,THSR Miaoli,,,,, -C0E910,海埔,Haipu,,,,, -C0E920,通霄漁港,Tongsiao Fishing Harbor,,,,, -C0E930,龍鳳,Longfong,,,,, -C0E940,雪見,Shiuejian,,,,, -C0E950,松安,Songan,,,,, -C0E960,觀霧分站,Guanwu,,,,, -C0F0A0,雪山圈谷,Xueshanjuangu,,,,, -C0F0B0,石岡,Shigang,,,,, -C0F0C0,中坑,Zhongkeng,,,,, -C0F0D0,審馬陣,Shenmazhen,,,,, -C0F0E0,南湖圈谷,Nanhuquangu,,,,, -C0F850,東勢,Dongshi,,,,, -C0F970,大坑,Dakeng,,,,, -C0F9I0,神岡,Shengang,,,,, -C0F9K0,大安,Da-An,,,,, -C0F9L0,后里,Houli,,,,, -C0F9M0,豐原,Fengyuan,,,,, -C0F9N0,大里,Dali,,,,, -C0F9O0,潭子,Tanzi,,,,, -C0F9P0,清水,Qingshui,,,,, -C0F9Q0,外埔,Waipu,,,,, -C0F9R0,龍井,Longjing,,,,, -C0F9S0,烏日,Wuri,,,,, -C0F9T0,西屯,Xitun,,,,, -C0F9U0,南屯,Nantun,,,,, -C0F9V0,新社,Xinshe,,,,, -C0F9X0,大雅(中科園區),Daya,,,,, -C0F9Y0,桃山,Taoshan,,,,, -C0F9Z0,雪山東峰,Xueshandongfeng,,,,, -C0FA10,松柏,Songbai,,,,, -C0FA20,溫寮,Wunliao,,,,, -C0FA30,梧棲,Wuqi,,,,, -C0FA40,臺中電廠,Taichung?Power Plant,,,,, -C0FA50,霧峰,Wufeng,,,,, -C0FA60,鞍馬山工作站,Anmashan Office,,,,, -C0FA70,大雪山埡口,Dashiueshan Yakou,,,,, -C0FA80,小雪山天池,Shiaushiueshan Tianchr,,,,, -C0FA90,小雪山林道,Shiaushiueshan,,,,, -C0FB00,大雪山,Dashiueshan,,,,, -C0FB10,出雲山苗圃,Chuyunshan,,,,, -C0FB20,雪山橋,Shiueshanchiau,,,,, -C0FB30,八仙山苗圃,Bashianshan,,,,, -C0FB40,中橫21.6k,Chungheng 21.6k,,,,, -C0FB70,大甲溪埔,"Dajia, Xipu",,,,, -C0G620,芬園,Fenyuan,,,,, -C0G650,員林,Yuanlin,,,,, -C0G660,溪湖,Xihu,,,,, -C0G720,溪州,Xizhou,,,,, -C0G730,二林,Erlin,,,,, -C0G740,大城,Dacheng,,,,, -C0G770,福興,Fuxing,,,,, -C0G780,秀水,Xiushui,,,,, -C0G800,埔鹽,Puyan,,,,, -C0G810,埔心,Puxin,,,,, -C0G820,田尾,Tianwei,,,,, -C0G830,埤頭,Pitou,,,,, -C0G860,社頭,Shetou,,,,, -C0G880,二水,Ershui,,,,, -C0G890,伸港,Shenggang,,,,, -C0G900,線西,Xianxi,,,,, -C0G910,花壇,Huatan,,,,, -C0G920,永靖,Yongjing ,,,,, -C0G940,竹塘,Zhutang,,,,, -C0G950,防潮門,Fangchaomen,,,,, -C0G960,福寶,Fubao,,,,, -C0G970,三豐,Sanfong,,,,, -C0G9B0,和美,Hemei,,,,, -C0H890,埔里,Puli,,,,, -C0H960,草屯,Caotun,,,,, -C0H990,昆陽,Kunyang,,,,, -C0H9A0,神木村,Shenmu Village,,,,, -C0H9C0,合歡山,Hehuan Mountain,,,,, -C0I010,廬山,Lushan,,,,, -C0I080,信義,Xinyi,,,,, -C0I110,竹山,Zhushan,,,,, -C0I360,水里,Shuili,,,,, -C0I370,魚池,Yuchi,,,,, -C0I380,集集,Jiji,,,,, -C0I390,仁愛,Ren'Ai,,,,, -C0I410,名間,Mingjian,,,,, -C0I420,國姓,Guoxing,,,,, -C0I460,南投,Nantou,,,,, -C0I480,梅峰,Meifeng,,,,, -C0I490,萬大林道,Wandalindao,,,,, -C0I520,玉山風口,Yushanfengkou,,,,, -C0I530,小奇萊,Xiaoqilai,,,,, -C0I540,奇萊稜線,Qilailengxian,,,,, -C0K250,崙背,Lunbei,,,,, -C0K280,四湖,Sihu,,,,, -C0K291,宜梧,Yiwu,,,,, -C0K330,虎尾,Huwei,,,,, -C0K390,土庫,Tuku,,,,, -C0K400,斗六,Douliu,,,,, -C0K410,北港,Beigang,,,,, -C0K420,西螺,Xiluo,,,,, -C0K430,褒忠,Baozhong,,,,, -C0K440,二崙,Erlun,,,,, -C0K450,大埤,Dapi,,,,, -C0K460,斗南,Dounan,,,,, -C0K470,林內,Linnei,,,,, -C0K480,莿桐,Citong,,,,, -C0K500,元長,Yuanchang,,,,, -C0K510,水林,Shuilin,,,,, -C0K530,臺西,Taixi,,,,, -C0K550,蔦松,Niaosong,,,,, -C0K560,棋山,Qishan,,,,, -C0K580,高鐵雲林,THSR Yunlin,,,,, -C0K590,雲林東勢,"Dongshi, Yunlin County",,,,, -C0K600,箔子寮,Bozihliao,,,,, -C0M520,東後寮,Donghouliao,,,,, -C0M530,奮起湖,Fenqihu,,,,, -C0M640,中埔,Zhongpu,,,,, -C0M650,朴子,Puzi,,,,, -C0M660,溪口,Xikou,,,,, -C0M670,大林,Dalin,,,,, -C0M680,太保,Taibao,,,,, -C0M690,水上,Shuishang,,,,, -C0M700,竹崎,Zhuqi,,,,, -C0M710,東石,Dongshi,,,,, -C0M720,番路,Fanlu,,,,, -C0M730,嘉義市東區,Dongqu Chiayi City,,,,, -C0M740,六腳,Liujiao,,,,, -C0M750,布袋,Budai,,,,, -C0M760,民雄,Minxiong,,,,, -C0M770,嘉義梅山,Meishan Chiayi County,,,,, -C0M780,鹿草,Lucao,,,,, -C0M790,新港,Xingang,,,,, -C0M800,茶山,Chashan,,,,, -C0M810,里佳,Lijia,,,,, -C0M820,達邦,Dabang,,,,, -C0M850,表湖,Biaohu,,,,, -C0M860,新美,Shinmei,,,,, -C0M880,好美里,Haomeili,,,,, -C0N010,鯤鯓國小,Kunshen Elementary School,,,,, -C0N020,城西,Chengsi,,,,, -C0N030,四草,Sihtsao,,,,, -C0N040,蘆竹溝,Lujhugou,,,,, -C0N050,蚵寮,Eliao,,,,, -C0O830,北寮,Beiliao,,,,, -C0O840,王爺宮,Wangyegong,,,,, -C0O860,大內,Danei,,,,, -C0O900,善化,Shanhua,,,,, -C0O960,崎頂,Qiding,,,,, -C0O970,虎頭埤,Hutoupi,,,,, -C0O980,新市,Xinshi,,,,, -C0O990,媽廟,Mamiao,,,,, -C0R100,尾寮山,Weiliaoshan,,,,, -C0R130,阿禮,Ali,,,,, -C0R140,瑪家,Majia,,,,, -C0R150,三地門,Sandimen,,,,, -C0R160,鹽埔,Yanpuxinwei,,,,, -C0R190,赤山,Chishan,,,,, -C0R220,潮州,Chaojhou,,,,, -C0R240,來義,Laiyi,,,,, -C0R260,春日,Chunri,,,,, -C0R270,琉球嶼,Liouciouyu,,,,, -C0R280,檳榔,Binlang,,,,, -C0R320,車城,Checheng,,,,, -C0R341,牡丹,Mudan,,,,, -C0R350,貓鼻頭,Maobitou,,,,, -C0R440,大漢山,Dahanshan,,,,, -C0R470,高樹,Gaoshu,,,,, -C0R480,長治,Changzhi,,,,, -C0R490,九如,Jiuru,,,,, -C0R520,崁頂,Kanding,,,,, -C0R540,佳冬,Jiadong,,,,, -C0R550,新埤,Xinpi,,,,, -C0R560,新園,Xinyuan,,,,, -C0R570,麟洛,Linluo,,,,, -C0R580,南州,Nanzhou,,,,, -C0R590,里港,Ligang,,,,, -C0R600,舊泰武,Jiutaiwu,,,,, -C0R620,墾雷,Kenlei,,,,, -C0R640,東港,Donggang,,,,, -C0R650,竹田,Zhutian,,,,, -C0R660,枋寮,Fangliao,,,,, -C0R670,楓港,Fenggang,,,,, -C0R680,佳樂水,Jialeshui,,,,, -C0R690,墾丁,Kenting,,,,, -C0R700,枋山,Fangshan,,,,, -C0R710,龍磐,Longpan,,,,, -C0R720,旭海,Xuhai,,,,, -C0R730,大坪頂,Dapingding,,,,, -C0R741,獅子,Shizi,,,,, -C0R750,四林格山,Silingeshan,,,,, -C0R760,南仁湖,Nanrenhu,,,,, -C0R770,保力,Baoli,,,,, -C0R780,滿州,Manzhou,,,,, -C0R790,九棚,Jiupeng,,,,, -C0R800,丹路,Danlu,,,,, -C0R810,內獅,Neishi,,,,, -C0R820,白鷺,Bailu,,,,, -C0R830,高士,Gaoshi,,,,, -C0R840,牡丹池山,Mudanchisahn,,,,, -C0R850,林邊,Linbian,,,,, -C0R860,鼻頭,Bitou,,,,, -C0R870,興海,Singhai,,,,, -C0R880,後壁湖,Houbihu,,,,, -C0R890,山海,Shanhai,,,,, -C0R900,竹坑,Jhukeng,,,,, -C0R910,下寮,Sialiao,,,,, -C0R920,塭仔,Wunzai,,,,, -C0R930,萬丹,Wandan,,,,, -C0R940,加祿堂,Jialutang,,,,, -C0R950,萬隆國小,Wanlongguoxiao,,,,, -C0R960,內埔,Neipu,,,,, -C0S660,下馬,Xiama,,,,, -C0S690,太麻里,Taimali,,,,, -C0S700,知本,Jhihben,,,,, -C0S710,鹿野,Luye,,,,, -C0S730,綠島,Ludao,,,,, -C0S740,池上,Chihshang,,,,, -C0S750,向陽,Siangyang,,,,, -C0S760,紅石,Hongshih,,,,, -C0S770,大溪山,Dasishan,,,,, -C0S790,金崙,Jinlun,,,,, -C0S810,東河,Donghe,,,,, -C0S830,長濱,Changbin,,,,, -C0S840,南田,Nantian,,,,, -C0S890,關山,Guanshan,,,,, -C0S900,蘭嶼高中,Lanyu High School,,,,, -C0S910,蘭嶼燈塔,Lanyu Lighthouse,,,,, -C0S920,金峰嘉蘭,Jialan Jinfeng,,,,, -C0S930,延平,Yanping,,,,, -C0S940,石寧山,Shiningshan,,,,, -C0S950,七塊厝,Qikuaicuo,,,,, -C0S960,香蘭,Xianglan,,,,, -C0S970,加津林,Jiajinlin,,,,, -C0S980,勝林山,Shenglinshan,,,,, -C0S990,山豬窟,Shanzhuku,,,,, -C0SA00,歷坵,Liqiu,,,,, -C0SA10,檳榔四格山,Binlangsigeshan,,,,, -C0SA20,金崙山,Jinlunshan,,,,, -C0SA30,都歷,Duli,,,,, -C0SA40,瑞和,Ruihe,,,,, -C0SA60,知本(水試所),Zhiben (FRI),,,,, -C0SA80,土坂,Tuban,,,,, -C0SA90,達仁林場,Darenlinchang,,,,, -C0SB10,美和,Meihe,,,,, -C0SB20,富岡,Fugang,,,,, -C0SB30,新蘭,Dulan Fire Brigade,,,,, -C0SB40,興隆, Xinglong,,,,, -C0SB50,叭嗡嗡,Baweng,,,,, -C0SB60,白守蓮,Baishoulian,,,,, -C0SB70,小港漁港,Xiaogang Fishing Harbor,,,,, -C0SB80,長濱漁港,Changbin Fishing Harbor,,,,, -C0T790,大禹嶺,Dayuling,,,,, -C0T820,天祥,Tianxiang,,,,, -C0T870,鯉魚潭,Liyutan,,,,, -C0T900,西林,Xilin,,,,, -C0T960,光復,Guangfu,,,,, -C0T9A0,月眉山,Yuemeishan,,,,, -C0T9B0,水源,Shuiyuan,,,,, -C0T9D0,和中,Hezhong,,,,, -C0T9E0,大坑,Dakeng,,,,, -C0T9F0,水璉,Shuilian,,,,, -C0T9G0,鳳林山,Fenglinshan,,,,, -C0T9H0,加路蘭山,Jialulanshan,,,,, -C0T9I0,豐濱,Fengbin,,,,, -C0T9M0,靜浦,Jingpu,,,,, -C0T9N0,富里,Fuli,,,,, -C0TA10,花蓮漁港,Hualien Fishing Harbor,,,,, -C0TA20,加灣,Jiawan,,,,, -C0TA30,鹽寮,Yanliao,,,,, -C0TA40,秀林,Xiulin,,,,, -C0TA50,和仁,Heren,,,,, -C0TA80,立霧山,Liwushan,,,,, -C0U520,雙連埤,Shuanglianpi,,,,, -C0U600,礁溪,Chiaoshi,,,,, -C0U650,玉蘭,Yulan,,,,, -C0U710,太平山,Taipingshan,,,,, -C0U720,南山,Nanshan,,,,, -C0U750,龜山島,Gueishandao,,,,, -C0U760,東澳,Dong-Ao,,,,, -C0U770,南澳,Nanao,,,,, -C0U780,五結,Wujie,,,,, -C0U860,頭城,Toucheng,,,,, -C0U870,大礁溪,Dajiaoxi,,,,, -C0U880,北關,Beiguan,,,,, -C0U890,三星,Sanxing,,,,, -C0U900,內城,Neicheng,,,,, -C0U910,冬山,Dongshan,,,,, -C0U940,羅東,Luodong,,,,, -C0U950,鶯子嶺,Yingziling,,,,, -C0U960,翠峰湖,Cuifenghu,,,,, -C0U970,大福,Dafu,,,,, -C0U980,坪林石牌,Shipai Pinglin,,,,, -C0U990,員山,Yuanshan,,,,, -C0UA00,土場,Tuchang,,,,, -C0UA10,鴛鴦湖,Yuanyanghu,,,,, -C0UA20,多加屯,Duojiatun,,,,, -C0UA30,白嶺,Bailing,,,,, -C0UA40,西德山,Xideshan,,,,, -C0UA50,西帽山,Ximaoshan,,,,, -C0UA60,樟樹山,Zhangshushan,,,,, -C0UA70,桃源谷,Taoyuangu,,,,, -C0UA80,大溪漁港,Dasi Fishing Harbor,,,,, -C0UA90,石城,Shihcheng,,,,, -C0UB00,淡江大學蘭陽校園,Tamkang Lanyang Campus,,,,, -C0UB10,蘇澳,Suao,,,,, -C0UB20,壯圍,Jhuangwei,,,,, -C0UB60,明池,Mingchr,,,,, -C0UB70,太平山中間站,Jhongjian,,,,, -C0UB80,翠峰林道6K,Trifong 6k,,,,, -C0UB90,太平山莊,Taipingshan Villa,,,,, -C0V210,復興,Fuxing,,,,, -C0V350,溪埔,Xipu,,,,, -C0V360,內門,Neimen,,,,, -C0V370,古亭坑,Gutingkeng,,,,, -C0V400,阿公店,Agongdian,,,,, -C0V440,鳳山,Fengshan,,,,, -C0V450,鳳森,Fengsen,,,,, -C0V490,新興,Sinsing,,,,, -C0V530,阿蓮,Alian,,,,, -C0V610,梓官,Ziguan,,,,, -C0V620,永安,Yong'An,,,,, -C0V630,茄萣,Qieding,,,,, -C0V640,湖內,Hunei,,,,, -C0V650,彌陀,Mituo,,,,, -C0V660,岡山,Gangshan,,,,, -C0V680,仁武,Renwu,,,,, -C0V690,鼓山,Gushan,,,,, -C0V700,三民,Sanmin,,,,, -C0V710,苓雅,Lingya,,,,, -C0V720,林園,Linyuan,,,,, -C0V730,大寮,Daliao,,,,, -C0V740,旗山,Qishan,,,,, -C0V750,路竹,Luzhu,,,,, -C0V760,橋頭,Qiaotou,,,,, -C0V770,大社,Dashe,,,,, -C0V790,萬山,Wanshan,,,,, -C0V800,六龜,Liugui,,,,, -C0V810,左營,Zuoying,,,,, -C0V820,小林,Xiaolin,,,,, -C0V840,鳳鼻頭,Fongbitou,,,,, -C0V850,蚵仔寮,Kezailiao,,,,, -C0V860,南寮,Nanliao,,,,, -C0V870,文安,Wunan,,,,, -C0V880,興達,Singda,,,,, -C0V890,前鎮,Chian Jhen,,,,, -C0V900,汕尾,Shanwei,,,,, -C0V910,大樹,Dashu,,,,, -C0W110,東莒,Dongju,,,,, -C0W120,西嶼,Xiyu,,,,, -C0W130,花嶼,Huayu,,,,, -C0W140,金沙,Jinsha ,,,,, -C0W150,金寧,Jinning,,,,, -C0W160,烏坵,Wuqiu,,,,, -C0W180,七美,Qimei,,,,, -C0W190,望安,Wangan,,,,, -C0W200,湖西,Husi,,,,, -C0W220,北竿,Beigan,,,,, -C0W240,九宮,Jiugong ,,,,, -C0X050,東河,Donghe,,,,, -C0X060,下營,Xiaying,,,,, -C0X080,佳里,Jiali,,,,, -C0X100,臺南市北區,Beiqu Tainan City,,,,, -C0X110,臺南市南區,Nanqu Tainan City,,,,, -C0X120,麻豆,Madou,,,,, -C0X130,官田,Guantian,,,,, -C0X140,西港,Xigang,,,,, -C0X150,安定,Anding,,,,, -C0X160,仁德,Rende,,,,, -C0X170,關廟,Guanmiao,,,,, -C0X180,山上,Shanshang,,,,, -C0X190,安平,Anping,,,,, -C0X200,左鎮,Zuozhen,,,,, -C0X210,白河,Baihe,,,,, -C0X220,學甲,Xuejia,,,,, -C0X230,鹽水,Yanshui,,,,, -C0X240,關子嶺,Guanziling,,,,, -C0X250,新營,Xinying,,,,, -C0X260,後壁,Houbi,,,,, -C0X280,將軍,Jiangjun,,,,, -C0X290,北門,Beimen,,,,, -C0X300,鹿寮,Luliao,,,,, -C0X320,柳營,Liuying,,,,, -C0Z020,明里,Mingli,,,,, -C0Z050,佳心,Jiaxin,,,,, -C0Z061,玉里,Yuli,,,,, -C0Z070,舞鶴,Wuhe,,,,, -C0Z080,富源,Fuyuan,,,,, -C0Z100,東華,Donghwa,,,,, -C0Z150,吉安光華,Guanghua Ji-An,,,,, -C0Z160,鳳林,Fenglin,,,,, -C0Z170,卓溪,Zhuoxi,,,,, -C0Z180,新城,Xincheng,,,,, -C0Z190,富世,Fushi,,,,, -C0Z200,萬榮,Wanrong,,,,, -C0Z210,瑞穗,Ruisui,,,,, -C0Z220,和平林道,Hepinglindao,,,,, -C0Z230,和平,Heping,,,,, -C0Z250,瑞穗林道,Ruisuilindao,,,,, -C0Z270,蕃薯寮,Fanshuliao,,,,, -C0Z280,德武,Dewu,,,,, -C0Z290,赤柯山,Chikeshan,,,,, -C0Z300,東里,Dongli,,,,, -C0Z310,清水斷崖,Qingshui Cliff,,,,, -C0Z320,清水林道,Qingshuilindao,,,,, -C0Z330,安通山,Antongshan,,,,, -C1A630,下盆,Siapen,,,,, -C1A750,石碇服務區,Shiding Service Area,,,,, -C1A760,坪林交控,Pinglin Traffic Control Center,,,,, -C1A9N0,四十份,Sihshihfen,,,,, -C1AC50,關渡,Guandu,,,,, -C1AI50,國三N016K,Freeway No. 3 - Rain - N016k,,,,, -C1AI60,國一39K邊坡,Freeway No. 1 - Rain – N039k,,,,, -C1C510,水尾,Shueiwei,,,,, -C1D380,新埔,Sinpu,,,,, -C1D400,鳥嘴山,Niaozueishan,,,,, -C1D410,白蘭,Bailan,,,,, -C1D420,太閣南,Taigenan,,,,, -C1D630,飛鳳山,Fei Feng Mountain,,,,, -C1D640,外坪(五指山),Waiping(Wuzhihshan),,,,, -C1E451,象鼻,Xiangbi,,,,, -C1E461,松安,Song-An,,,,, -C1E480,鳳美,Fongmei,,,,, -C1E511,新開,Xinkai,,,,, -C1E601,南勢,Nanshi,,,,, -C1E670,南礦,Nankuang,,,,, -C1E681,南勢山,Nanshishan,,,,, -C1E691,南湖,Nanhu,,,,, -C1E701,八卦,Bagua,,,,, -C1E711,馬拉邦山,Malabangshan,,,,, -C1E721,泰安,Tai-An,,,,, -C1E770,公館,Gongguan,,,,, -C1E890,國三N149K,Freeway No. 1 - Rain – N149k,,,,, -C1E900,國一N128K,Freeway No. 1 - Rain – N128k,,,,, -C1F871,上谷關,Shangguguan,,,,, -C1F891,稍來,Shaolai,,,,, -C1F911,新伯公,Xinbogong,,,,, -C1F941,雪嶺,Xueling,,,,, -C1F9B1,桐林,Tonglin,,,,, -C1F9C1,白冷,Baileng,,,,, -C1F9D1,白毛台,Baimaotai,,,,, -C1F9E1,龍安,Long-An,,,,, -C1F9F1,伯公龍,Bogonglong,,,,, -C1F9G1,慶福山,Cingfushan,,,,, -C1F9J1,清水林,Qingshuilin,,,,, -C1F9W0,德基,Deji,,,,, -C1G691,下水埔,Xiashuipu,,,,, -C1G9D0,國一S218K,Freeway No. 1 - Rain – S218k,,,,, -C1H000,翠峰,Cuifeng,,,,, -C1H840,國三N238K,Freeway No. 3 - Rain –N238k,,,,, -C1H900,清流,Qingliu,,,,, -C1H920,長豐,Changfeng,,,,, -C1H941,雙冬,Shuangdong,,,,, -C1H971,六分寮,Liufenliao,,,,, -C1H9B1,阿眉,Amei,,,,, -C1I020,萬大,Wanda,,,,, -C1I030,武界,Wujie,,,,, -C1I050,丹大,Danda,,,,, -C1I070,和社,Heshe,,,,, -C1I101,溪頭,Xitou,,,,, -C1I121,大鞍,Da-An,,,,, -C1I131,桶頭,Tongtou,,,,, -C1I140,卡奈托灣,Kanaituowan,,,,, -C1I150,青雲,Qingyun,,,,, -C1I201,中心崙,Zhongxinlun,,,,, -C1I211,蘆竹湳,Luzhunan,,,,, -C1I220,樟湖,Zhanghu,,,,, -C1I230,九份二山,Jiufen'Ershan,,,,, -C1I240,外大坪,Waidaping,,,,, -C1I250,鯉潭,Litan,,,,, -C1I260,北坑,Beikeng,,,,, -C1I280,埔中,Puzhong,,,,, -C1I290,豐丘,Fengqiu,,,,, -C1I310,西巒,Xiluan,,,,, -C1I320,奧萬大,Aowanda,,,,, -C1I330,楓樹林,Fengshulin,,,,, -C1I340,新興橋,Xinxingqiao,,,,, -C1I400,凌霄,Lingxiao,,,,, -C1I430,翠華,Cuihua,,,,, -C1I440,新高口,Xingaokou,,,,, -C1I450,望鄉山,Wangxiangshan,,,,, -C1I470,杉林溪,Shanlinxi,,,,, -C1I500,大尖山,Dajianshan,,,,, -C1I510,線浸林道,Xianjinlindao,,,,, -C1I550,國六W023K,Freeway No. 6 - Rain – W023k,,,,, -C1K540,口湖,Kouhu,,,,, -C1M390,龍美,Longmei,,,,, -C1M400,菜瓜坪,Caiguaping,,,,, -C1M480,獨立山,Dulishan,,,,, -C1M600,頭凍,Toudong,,,,, -C1M610,石磐龍,Shipanlong,,,,, -C1M640,十字,Shizi,,,,, -C1M870,國三N285K,Freeway No. 3 - Rain –N285k,,,,, -C1N001,沙崙,Shalun,,,,, -C1O850,環湖,Huanhu,,,,, -C1O870,大棟山,Dadongshan,,,,, -C1O880,關山,Guanshan,,,,, -C1O921,楠西,Nanxi,,,,, -C1O940,東山服務區,Dongshan Service Area,,,,, -C1R110,口社,Gusia,,,,, -C1R120,上德文,Shangdewun,,,,, -C1R250,力里,Lili,,,,, -C1R290,石門山,Shihmenshan,,,,, -C1R610,西大武山,Xidawushan,,,,, -C1R630,龍泉,Longquan,,,,, -C1S670,摩天,Motian,,,,, -C1S800,華源,Huayuan,,,,, -C1S820,金峰,Jinfeng,,,,, -C1S850,豐南,Funan,,,,, -C1S860,利嘉,Lichai,,,,, -C1S870,南美山,Nanmaisan,,,,, -C1S880,壽卡,Shouka,,,,, -C1SA50,利嘉林道,Lijialindao,,,,, -C1SA70,都蘭,Dulan,,,,, -C1T800,洛韶,Luoshao,,,,, -C1T810,慈恩,Ci-En,,,,, -C1T830,布洛灣,Buluowan,,,,, -C1T920,中興,Zhongxing,,,,, -C1T940,大觀,Daguan,,,,, -C1T950,太安,Tai-An,,,,, -C1T970,大農,Danong,,,,, -C1T980,龍澗,Longjian,,,,, -C1T990,高寮,Gaoliao,,,,, -C1TA00,太魯閣,Taroko,,,,, -C1U501,牛鬥,Nioudou,,,,, -C1U670,寒溪,Hanxi,,,,, -C1U840,東澳嶺,Dongaoling,,,,, -C1U850,觀音海岸,Guanyin Coast,,,,, -C1U920,思源,Siyuan,,,,, -C1U930,粉鳥林,Fenniaolin,,,,, -C1V160,達卡努瓦,Dakanuwa,,,,, -C1V170,排雲,Paiyun,,,,, -C1V190,南天池,Nantianchi,,,,, -C1V200,梅山,Meishan,,,,, -C1V220,小關山,Xiaoguanshan,,,,, -C1V231,高中,Gaozhong,,,,, -C1V300,御油山,Yuyoushan,,,,, -C1V340,大津,Dajin,,,,, -C1V390,尖山,Jianshan,,,,, -C1V570,吉東,Jiadong,,,,, -C1V580,溪南(特生中心),Xinan,,,,, -C1V590,新發,Xinfa,,,,, -C1V600,藤枝,Tengzhi,,,,, -C1V780,多納林道,Duonalindao,,,,, -C1V830,國三S383K,Freeway No. 3 - Rain – S383k,,,,, -C1X040,東原,Dongyuan,,,,, -C1Z030,紅葉,Hongye,,,,, -C1Z040,立山,Lishan,,,,, -C1Z110,三棧,Sanzhan,,,,, -C1Z120,壽豐,Shoufeng,,,,, -C1Z130,銅門,Tongmen,,,,, -C1Z140,荖溪,Laoxi,,,,, -C1Z240,中平林道,Zhongpinglindao,,,,, \ No newline at end of file +"key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" +"466850","五分山雷達站","Wufenshan","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站" +"466881","新北","New Taipei","新北","新北","新北","新北","新北" +"466900","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" +"466910","鞍部","Anbu","鞍部","鞍部","鞍部","鞍部","鞍部" +"466920","臺北","Taipei","台北","臺北","臺北","臺北","臺北" +"466930","竹子湖","Zhuzihu","竹子湖","竹子湖","竹子湖","竹子湖","竹子湖" +"466940","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" +"466950","彭佳嶼","Pengjiayu","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼" +"466990","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花蓮" +"467050","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" +"467080","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜蘭" +"467110","金門","Kinmen","金門","金門","金門","金門","金門" +"467270","田中","Tianzhong","田中","田中","田中","田中","田中" +"467280","後龍","Houlong","後龍","後龍","後龍","後龍","後龍" +"467290","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" +"467300","東吉島","Dongjidao","東吉島","東吉島","東吉島","東吉島","東吉島" +"467350","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" +"467410","臺南","Tainan","台南","臺南","臺南","臺南","臺南" +"467420","永康","Yongkang","永康","永康","永康","永康","永康" +"467441","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" +"467480","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉義" +"467490","臺中","Taichung","台中","臺中","臺中","臺中","臺中" +"467530","阿里山","Alishan","阿里山","阿里山","阿里山","阿里山","阿里山" +"467540","大武","Dawu","大武","大武","大武","大武","大武" +"467550","玉山","Yushan","玉山","玉山","玉山","玉山","玉山" +"467571","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" +"467590","恆春","Hengchun","恒春","恆春","恆春","恆春","恆春" +"467610","成功","Chenggong","成功","成功","成功","成功","成功" +"467620","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","蘭嶼" +"467650","日月潭","Sun Moon Lake","日月潭","日月潭","日月潭","日月潭","日月潭" +"467660","臺東","Taitung","台東","臺東","臺東","臺東","臺東" +"467790","墾丁雷達站","Kenting","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站" +"467990","馬祖","Matsu","馬祖","馬祖","馬祖","馬祖","馬祖" +"12J990","口湖工作站","Kouhu Branch Station","口湖工作站","口湖工作站","口湖工作站","口湖工作站","口湖工作站" +"12Q970","東港工作站","Donggang Branch","東港工作站","東港工作站","東港工作站","東港工作站","東港工作站" +"12Q980","恆春工作站","Hengchun Branch","恆春工作站","恆春工作站","恆春工作站","恆春工作站","恆春工作站" +"42HA10","萬大發電廠","Wanta Hydro","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠" +"72AI40","桃改樹林分場","Shulin Sub-station Of Taoyuan ARES","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場" +"72C440","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場" +"72D080","桃改五峰分場","Wufeng Sub-station Of Taoyuan ARES","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場" +"72D680","桃改新埔分場","Sinpu Sub-station Of Taoyuan ARES","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分場" +"72G600","臺中農改場","Ta Tsun","臺中農改場","臺中農改場","臺中農改場","臺中農改場","臺中農改場" +"72HA00","中改埔里分場","Puli Sub-station Of Taichung ARES","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分場" +"72K220","南改斗南分場","Dounan Sub-station Of Tainan ARES","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分場" +"72M360","南改義竹分場","Yichu Sub-station Of Tainan ARES","南改義竹分場","南改義竹分場","南改義竹分場","南改義竹分場","南改義竹分場" +"72M700","南改鹿草分場","Lucao Sub-station Of Tainan ARES","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分場" +"72N100","臺南農改場","Tainan","臺南農改場","臺南農改場","臺南農改場","臺南農改場","臺南農改場" +"72N240","七股研究中心","Qigu Research Center","七股研究中心","七股研究中心","七股研究中心","七股研究中心","七股研究中心" +"72Q010","高雄農改場","Pingtung","高雄農改場","高雄農改場","高雄農改場","高雄農改場","高雄農改場" +"72S200","東改班鳩分場","Banjuou Sub-station Of Taitung ARES ","東改班鳩分場","東改班鳩分場","東改班鳩分場","東改班鳩分場","東改班鳩分場" +"72S590","東改賓朗果園","Binlung Orchard Sub-station Of Taitung ARES ","東改賓朗果園","東改賓朗果園","東改賓朗果園","東改賓朗果園","東改賓朗果園" +"72T250","花蓮農改場","Gi An","花蓮農改場","花蓮農改場","花蓮農改場","花蓮農改場","花蓮農改場" +"72U480","花改蘭陽分場","Lanyang Sub-station Of Hualien ARES","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場" +"72V140","高改旗南分場","Chinan Sub-station Of Kaohsiung ARES","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分場" +"82A750","茶改北部分場","North Branch Of TBRS","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分場" +"82C160","茶改場","Tea And Beverage Research Station","茶改場","茶改場","茶改場","茶改場","茶改場" +"82H320","茶改中部分場","Middle Branch Of TRES","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分場" +"82H840","茶改南部分場","South Branch Of TBRS","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場" +"82S580","茶改東部分場","East Branch Of TBRS","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場" +"A2C560","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心" +"A2K360","水試臺西試驗場","Taixi Experimental Fishing Ground","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場" +"A2K630","臺大雲林校區","Yunlin Branch Of NTU","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區" +"A2N290","臺南蘭花園區","Taiwan Orchid","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區" +"B2E890","畜試北區分所","North Branch Of TLRI","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所" +"B2N890","畜產試驗所","Hsin Hua","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所" +"B2Q810","畜試南區分所","South Branch Of TLRI","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所" +"B2U990","畜試東區分所","East Branch Of TLRI","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所" +"C2A540","四堵","Sihdu","四堵","四堵","四堵","四堵","四堵" +"C2A560","福山","Fushan","福山","福山","福山","福山","福山" +"C2A650","火燒寮","Huoshaoliao","火燒寮","火燒寮","火燒寮","火燒寮","火燒寮" +"C2A660","瑞芳","Rueifang","瑞芳","瑞芳","瑞芳","瑞芳","瑞芳" +"C2A880","福隆","Fulong","福隆","福隆","福隆","福隆","福隆" +"C2A920","富貴角","Fugueijiao","富貴角","富貴角","富貴角","富貴角","富貴角" +"C2C410","中央大學","Ncu","中央大学","中央大學","中央大學","中央大學","中央大學" +"C2D720","關西工作站","Guanxi Experiment Station","關西工作站","關西工作站","關西工作站","關西工作站","關西工作站" +"C2D730","寶山農場","Baoshan Farm","寶山農場","寶山農場","寶山農場","寶山農場","寶山農場" +"C2D740","屯原","Tunyuan","屯原","屯原","屯原","屯原","屯原" +"C2E520","大湖","Dahu","大湖","大湖","大湖","大湖","大湖" +"C2E540","龍溪","Longxi","龍溪","龍溪","龍溪","龍溪","龍溪" +"C2E880","三義","Sanyi","三義","三義","三義","三義","三義" +"C2E970","八甲","Bajia","八甲","八甲","八甲","八甲","八甲" +"C2F000","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" +"C2F860","梨山","Lishan","梨山","梨山","梨山","梨山","梨山" +"C2F930","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" +"C2F990","摩天嶺","Motianling","摩天嶺","摩天嶺","摩天嶺","摩天嶺","摩天嶺" +"C2F9A0","中竹林","Zhongzhulin","中竹林","中竹林","中竹林","中竹林","中竹林" +"C2FA00","烏石坑","Wushihkeng","烏石坑","烏石坑","烏石坑","烏石坑","烏石坑" +"C2FB50","出雲","Chuyun","出雲","出雲","出雲","出雲","出雲" +"C2FB60","頭櫃山","Touguishan","頭櫃山","頭櫃山","頭櫃山","頭櫃山","頭櫃山" +"C2G640","鹿港","Lukang","鹿港","鹿港","鹿港","鹿港","鹿港" +"C2G840","北斗","Beidou","北斗","北斗","北斗","北斗","北斗" +"C2G870","芳苑","Fangyuan","芳苑","芳苑","芳苑","芳苑","芳苑" +"C2G980","田頭村","Toutian Village","田頭村","田頭村","田頭村","田頭村","田頭村" +"C2G9A0","畜試所彰化","Changhua Branch Of TLRI","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化" +"C2H950","中寮","Zhongliao","中寮","中寮","中寮","中寮","中寮" +"C2H9D0","三隻寮","Sanziliao","三隻寮","三隻寮","三隻寮","三隻寮","三隻寮" +"C2H9E0","國姓南港","Guoxing Nangang","國姓南港","國姓南港","國姓南港","國姓南港","國姓南港" +"C2H9F0","柑林","Ganlin","柑林","柑林","柑林","柑林","柑林" +"C2H9G0","百勝","Bosheng","百勝","百勝","百勝","百勝","百勝" +"C2H9H0","苗改南投蜂場","Nantou Bee Farm Of Miaoli TARI","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場" +"C2H9J0","中台","Zhongtai","中台","中台","中台","中台","中台" +"C2H9L0","馬烈霸","Malieba","馬烈霸","馬烈霸","馬烈霸","馬烈霸","馬烈霸" +"C2H9M0","發祥","Faxiang","發祥","發祥","發祥","發祥","發祥" +"C2H9N0","仁愛東眼","Renaidong","仁愛東眼","仁愛東眼","仁愛東眼","仁愛東眼","仁愛東眼" +"C2H9P0","伊拿谷","Yinagu","伊拿谷","伊拿谷","伊拿谷","伊拿谷","伊拿谷" +"C2H9Q0","北東眼山","Beidongyanshan","北東眼山","北東眼山","北東眼山","北東眼山","北東眼山" +"C2H9R0","卓社","Zhuoshe","卓社","卓社","卓社","卓社","卓社" +"C2H9S0","龍南","Longnan","龍南","龍南","龍南","龍南","龍南" +"C2H9T0","名間竹圍","Mingjianzhuwei","名間竹圍","名間竹圍","名間竹圍","名間竹圍","名間竹圍" +"C2H9U0","鳳鵬","Fengpeng","鳳鵬","鳳鵬","鳳鵬","鳳鵬","鳳鵬" +"C2H9W0","大坪頂農水","Dapingding Station","大坪頂農水","大坪頂農水","大坪頂農水","大坪頂農水","大坪頂農水" +"C2I090","鳳凰","Fenghuang","鳳凰","鳳凰","鳳凰","鳳凰","鳳凰" +"C2K240","草嶺","Caoling","草嶺","草嶺","草嶺","草嶺","草嶺" +"C2K610","草嶺石壁","Caolingshibi","草嶺石壁","草嶺石壁","草嶺石壁","草嶺石壁","草嶺石壁" +"C2K620","馬光農場","Maguang Organic Agriculture Circular Park","馬光農場","馬光農場","馬光農場","馬光農場","馬光農場" +"C2K630","荷苞","Hebao","荷苞","荷苞","荷苞","荷苞","荷苞" +"C2M410","馬頭山","Matoushan","馬頭山","馬頭山","馬頭山","馬頭山","馬頭山" +"C2M620","瑞里","Ruili","瑞里","瑞里","瑞里","瑞里","瑞里" +"C2M910","嘉義大學","Chiayi University","嘉義大学","嘉義大學","嘉義大學","嘉義大學","嘉義大學" +"C2M920","朴子農改","Pozi DARES","朴子農改","朴子農改","朴子農改","朴子農改","朴子農改" +"C2M930","石卓","Shizhuo","石卓","石卓","石卓","石卓","石卓" +"C2M940","日野賀","Riyehe","日野賀","日野賀","日野賀","日野賀","日野賀" +"C2M950","太和","Taihe","太和","太和","太和","太和","太和" +"C2M960","外寮","Wailiao","外寮","外寮","外寮","外寮","外寮" +"C2M970","碧湖","Bihu","碧湖","碧湖","碧湖","碧湖","碧湖" +"C2N160","西拉雅風管處","Siraya NSAH","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處" +"C2O810","曾文","Cengwen","曾文","曾文","曾文","曾文","曾文" +"C2O930","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" +"C2O950","安南","Annan","安南","安南","安南","安南","安南" +"C2R170","屏東","Pingdong","屏東","屏東","屏東","屏東","屏東" +"C2R970","屏科大","National Pingtung University","屏科大","屏科大","屏科大","屏科大","屏科大" +"C2V250","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" +"C2V260","月眉","Yuemei","月眉","月眉","月眉","月眉","月眉" +"C2V310","美濃","Meinong","美濃","美濃","美濃","美濃","美濃" +"C2W030","金門農試所","Kimmann","金門農試所","金門農試所","金門農試所","金門農試所","金門農試所" +"C2W230","畜試所澎湖","Penghu Field Area Of TLRI","畜試所澎湖","畜試所澎湖","畜試所澎湖","畜試所澎湖","畜試所澎湖" +"CAG100","王功漁港","Wanggong Fishing Port","王功漁港","王功漁港","王功漁港","王功漁港","王功漁港" +"CAH030","茶改場竹圍站","TRES Chuwei Station","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站" +"CAJ050","海口故事園區","Haikou Story Camping Park","海口故事園區","海口故事園區","海口故事園區","海口故事園區","海口故事園區" +"CAL110","布袋國中","Budai Junior High School","布袋國中","布袋國中","布袋國中","布袋國中","布袋國中" +"CAN130","水試所海水繁養殖中心","Mariculture Research Center","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心" +"CAN140","六官養殖協會","Liuguan Aquaculture","六官養殖協會","六官養殖協會","六官養殖協會","六官養殖協會","六官養殖協會" +"CAQ030","崎峰國小","Cifong Elementary School","崎峰國小","崎峰國小","崎峰國小","崎峰國小","崎峰國小" +"E2H360","蓮華池","Lienhuchih","蓮華池","蓮華池","蓮華池","蓮華池","蓮華池" +"E2HA20","林試畢祿溪站","Pilushi","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站" +"E2K600","四湖植物園","Sihu Botanical Garden","四湖植物園","四湖植物園","四湖植物園","四湖植物園","四湖植物園" +"E2P980","林試六龜中心","Lioukuei Research Center ","林試六龜中心","林試六龜中心","林試六龜中心","林試六龜中心","林試六龜中心" +"E2P990","林試扇平站","Shanping","林試扇平站","林試扇平站","林試扇平站","林試扇平站","林試扇平站" +"E2S960","林試太麻里2","Taimalee2","林試太麻里2","林試太麻里2","林試太麻里2","林試太麻里2","林試太麻里2" +"E2S980","林試太麻里1","Taimalee Research Center 1","林試太麻里1","林試太麻里1","林試太麻里1","林試太麻里1","林試太麻里1" +"G2AI50","關渡","Guandu","關渡","關渡","關渡","關渡","關渡" +"G2F820","農試所(霧峰)","Taichung","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)" +"G2L020","農試嘉義分所","Chiayi Sub-station Of TARI","農試嘉義分所","農試嘉義分所","農試嘉義分所","農試嘉義分所","農試嘉義分所" +"G2M350","農試溪口農場","Xikou Farm Of TARI","農試溪口農場","農試溪口農場","農試溪口農場","農試溪口農場","農試溪口農場" +"G2P820","農試鳳山分所","Fengshan Tropical Horticultural Of TARI","農試鳳山分所","農試鳳山分所","農試鳳山分所","農試鳳山分所","農試鳳山分所" +"K2E360","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場" +"K2E710","苗改生物防治研究中心","Biological Control Branch Of Miaoli TARI","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心" +"K2F750","種苗改良場","Shin She","種苗改良場","種苗改良場","種苗改良場","種苗改良場","種苗改良場" +"U2H480","溪頭","Hsi Tou","溪頭","溪頭","溪頭","溪頭","溪頭" +"U2HA30","臺大和社","NTU Exfohoshe","臺大和社","臺大和社","臺大和社","臺大和社","臺大和社" +"U2HA40","臺大內茅埔","NTU Exfoneimoupu","臺大內茅埔","臺大內茅埔","臺大內茅埔","臺大內茅埔","臺大內茅埔" +"U2HA50","臺大竹山","NTU Experimental Forest","臺大竹山","臺大竹山","臺大竹山","臺大竹山","臺大竹山" +"V2C250","八德合作社","Bade Cooperative","八德合作社","八德合作社","八德合作社","八德合作社","八德合作社" +"V2C260","八德蔬果","Bade Fruit And Vegetable","八德蔬果","八德蔬果","八德蔬果","八德蔬果","八德蔬果" +"V2K610","大庄合作社","Dazhuang Cooperative","大庄合作社","大庄合作社","大庄合作社","大庄合作社","大庄合作社" +"V2K620","麥寮合作社","Mailiao Cooperative","麥寮合作社","麥寮合作社","麥寮合作社","麥寮合作社","麥寮合作社" +"C0A520","山佳","Shanjia","山佳","山佳","山佳","山佳","山佳" +"C0A530","坪林","Pinglin","坪林","坪林","坪林","坪林","坪林" +"C0A550","泰平","Taiping","泰平","泰平","泰平","泰平","泰平" +"C0A570","桶後","Tonghou","桶後","桶後","桶後","桶後","桶後" +"C0A640","石碇","Shihding","石碇","石碇","石碇","石碇","石碇" +"C0A770","科教館","Science Education Center ","科教館","科教館","科教館","科教館","科教館" +"C0A860","大坪","Daping","大坪","大坪","大坪","大坪","大坪" +"C0A870","五指山","Wujhihshan","五指山","五指山","五指山","五指山","五指山" +"C0A890","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","雙溪" +"C0A931","三和","Sanhe","三和","三和","三和","三和","三和" +"C0A940","金山","Jinshan","金山","金山","金山","金山","金山" +"C0A950","鼻頭角","Bitoujiao","鼻頭角","鼻頭角","鼻頭角","鼻頭角","鼻頭角" +"C0A970","三貂角","Sandiaojiao","三貂角","三貂角","三貂角","三貂角","三貂角" +"C0A980","社子","Shezih","社子","社子","社子","社子","社子" +"C0A9C0","天母","Tianmu","天母","天母","天母","天母","天母" +"C0A9F0","內湖","Neihu","内湖","內湖","內湖","內湖","內湖" +"C0AC40","大屯山","Datunshan","大屯山","大屯山","大屯山","大屯山","大屯山" +"C0AC60","三峽","Sanshia","三峡","三峽","三峽","三峽","三峽" +"C0AC70","信義","Xinyi","信義","信義","信義","信義","信義" +"C0AC80","文山","Wenshan","文山","文山","文山","文山","文山" +"C0ACA0","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新莊" +"C0AD10","八里","Bali","八里","八里","八里","八里","八里" +"C0AD30","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","蘆洲" +"C0AD40","土城","Tucheng","土城","土城","土城","土城","土城" +"C0AD50","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","鶯歌" +"C0AG80","中和","Zhonghe","中和","中和","中和","中和","中和" +"C0AH00","汐止","Xizhi","汐止","汐止","汐止","汐止","汐止" +"C0AH10","永和","Yonghe","永和","永和","永和","永和","永和" +"C0AH30","五分山","Wufengshan","五分山","五分山","五分山","五分山","五分山" +"C0AH40","平等","Pingdeng","平等","平等","平等","平等","平等" +"C0AH50","林口","Linkou","林口","林口","林口","林口","林口" +"C0AH70","松山","Songshan","松山","松山","松山","松山","松山" +"C0AH80","深坑","Shenkeng","深坑","深坑","深坑","深坑","深坑" +"C0AH90","福山植物園","Fushan Botanical Garden","福山植物園","福山植物園","福山植物園","福山植物園","福山植物園" +"C0AI00","五股","Wugu","五股","五股","五股","五股","五股" +"C0AI10","屈尺","Quchi","屈尺","屈尺","屈尺","屈尺","屈尺" +"C0AI20","白沙灣","Baishawan","白沙灣","白沙灣","白沙灣","白沙灣","白沙灣" +"C0AI30","三重","Sanchong","三重","三重","三重","三重","三重" +"C0AI40","石牌","Shipai","石牌","石牌","石牌","石牌","石牌" +"C0AJ20","野柳","Yehliou","野柳","野柳","野柳","野柳","野柳" +"C0AJ30","淡水觀海","Danshuei Guanhai","淡水觀海","淡水觀海","淡水觀海","淡水觀海","淡水觀海" +"C0AJ40","石門","Shimen","石門","石門","石門","石門","石門" +"C0AJ50","水湳洞","Shuinandong","水湳洞","水湳洞","水湳洞","水湳洞","水湳洞" +"C0AJ60","六塊厝","Lioukuaitsuo","六塊厝","六塊厝","六塊厝","六塊厝","六塊厝" +"C0AJ70","田寮","Tianliao","田寮","田寮","田寮","田寮","田寮" +"C0AJ80","板橋","Banchiao","板橋","板橋","板橋","板橋","板橋" +"C0AJ90","澳底","Aodi","澳底","澳底","澳底","澳底","澳底" +"C0AK10","太平里","Taiping Vil.","太平里","太平里","太平里","太平里","太平里" +"C0AK30","硬漢嶺","Yinghanling","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺" +"C0B010","七堵","Qidu","七堵","七堵","七堵","七堵","七堵" +"C0B020","基隆嶼","Keelung Islet","基隆嶼","基隆嶼","基隆嶼","基隆嶼","基隆嶼" +"C0B040","大武崙","Dawulun","大武崙","大武崙","大武崙","大武崙","大武崙" +"C0B050","八斗子","Badouzi","八斗子","八斗子","八斗子","八斗子","八斗子" +"C0B060","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" +"C0C460","復興","Fuxing","復興","復興","復興","復興","復興" +"C0C480","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃園" +"C0C490","八德","Bade","八徳","八德","八德","八德","八德" +"C0C590","觀音","Guanyin","観音","觀音","觀音","觀音","觀音" +"C0C620","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","蘆竹" +"C0C630","大溪","Dasi","大渓","大溪","大溪","大溪","大溪" +"C0C650","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平鎮" +"C0C660","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","楊梅" +"C0C670","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龍潭" +"C0C680","龜山","Guishan","亀山","龜山","龜山","龜山","龜山" +"C0C700","中壢","Zhongli","中壢","中壢","中壢","中壢","中壢" +"C0C710","大溪永福","Yongfu Daxi","大溪永福","大溪永福","大溪永福","大溪永福","大溪永福" +"C0C720","竹圍","Jhuwei","竹圍","竹圍","竹圍","竹圍","竹圍" +"C0C730","中大臨海站","Jhongda Coastal Station","中大臨海站","中大臨海站","中大臨海站","中大臨海站","中大臨海站" +"C0C740","觀音工業區","Guanyin Industrial Area","觀音工業區","觀音工業區","觀音工業區","觀音工業區","觀音工業區" +"C0C750","新興坑尾","Sinsingkengwei","新興坑尾","新興坑尾","新興坑尾","新興坑尾","新興坑尾" +"C0C790","東眼山","Dongyanshan","東眼山","東眼山","東眼山","東眼山","東眼山" +"C0C800","四稜","Sileng","四稜","四稜","四稜","四稜","四稜" +"C0D360","梅花","Meihua","梅花","梅花","梅花","梅花","梅花" +"C0D430","峨眉","Emei","峨眉","峨眉","峨眉","峨眉","峨眉" +"C0D480","打鐵坑","Datiekeng","打鐵坑","打鐵坑","打鐵坑","打鐵坑","打鐵坑" +"C0D540","橫山","Hengshan","横山","橫山","橫山","橫山","橫山" +"C0D550","雪霸","Xueba","雪霸","雪霸","雪霸","雪霸","雪霸" +"C0D560","竹東","Zhudong","竹東","竹東","竹東","竹東","竹東" +"C0D580","寶山","Baoshan","宝山","寶山","寶山","寶山","寶山" +"C0D590","新豐","Sinfong","新豊","新豐","新豐","新豐","新豐" +"C0D650","湖口","Hukou","湖口","湖口","湖口","湖口","湖口" +"C0D660","新竹市東區","Dongqu Hsinshu City","新竹市東區","新竹市東區","新竹市東區","新竹市東區","新竹市東區" +"C0D670","海天一線","Haitianyisian","海天一線","海天一線","海天一線","海天一線","海天一線" +"C0D680","香山濕地","Siangshan Wetland","香山濕地","香山濕地","香山濕地","香山濕地","香山濕地" +"C0D690","外湖","Waihu","外湖","外湖","外湖","外湖","外湖" +"C0D700","關西","Guanxi","関西","關西","關西","關西","關西" +"C0D750","樂山林道6k","Leshan 6k","樂山林道6k","樂山林道6k","樂山林道6k","樂山林道6k","樂山林道6k" +"C0D760","大坪苗圃","Daping Nurserygarden","大坪苗圃","大坪苗圃","大坪苗圃","大坪苗圃","大坪苗圃" +"C0E420","竹南","Jhunan","竹南","竹南","竹南","竹南","竹南" +"C0E430","南庄","Nanzhuang","南庄","南庄","南庄","南庄","南庄" +"C0E550","明德","Mingde","明德","明德","明德","明德","明德" +"C0E570","白沙屯","Baishatun","白沙屯","白沙屯","白沙屯","白沙屯","白沙屯" +"C0E590","通霄","Tongxiao","通霄","通霄","通霄","通霄","通霄" +"C0E610","馬都安","Madu-An","馬都安","馬都安","馬都安","馬都安","馬都安" +"C0E730","頭份","Toufen","頭份","頭份","頭份","頭份","頭份" +"C0E740","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" +"C0E750","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" +"C0E780","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","銅鑼" +"C0E791","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓蘭" +"C0E810","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" +"C0E820","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" +"C0E830","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑裡" +"C0E850","大河","Dahe","大河","大河","大河","大河","大河" +"C0E870","高鐵苗栗","THSR Miaoli","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗" +"C0E910","海埔","Haipu","海埔","海埔","海埔","海埔","海埔" +"C0E920","通霄漁港","Tongsiao Fishing Harbor","通霄漁港","通霄漁港","通霄漁港","通霄漁港","通霄漁港" +"C0E930","龍鳳","Longfong","龍鳳","龍鳳","龍鳳","龍鳳","龍鳳" +"C0E940","雪見","Shiuejian","雪見","雪見","雪見","雪見","雪見" +"C0E950","松安","Songan","松安","松安","松安","松安","松安" +"C0E960","觀霧分站","Guanwu","觀霧分站","觀霧分站","觀霧分站","觀霧分站","觀霧分站" +"C0F0A0","雪山圈谷","Xueshanjuangu","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷" +"C0F0B0","石岡","Shigang","石岡","石岡","石岡","石岡","石岡" +"C0F0C0","中坑","Zhongkeng","中坑","中坑","中坑","中坑","中坑" +"C0F0D0","審馬陣","Shenmazhen","審馬陣","審馬陣","審馬陣","審馬陣","審馬陣" +"C0F0E0","南湖圈谷","Nanhuquangu","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷" +"C0F850","東勢","Dongshi","東勢","東勢","東勢","東勢","東勢" +"C0F970","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" +"C0F9I0","神岡","Shengang","神岡","神岡","神岡","神岡","神岡" +"C0F9K0","大安","Da-An","大安","大安","大安","大安","大安" +"C0F9L0","后里","Houli","后里","后里","后里","后里","后里" +"C0F9M0","豐原","Fengyuan","豊原","豐原","豐原","豐原","豐原" +"C0F9N0","大里","Dali","大里","大里","大里","大里","大里" +"C0F9O0","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" +"C0F9P0","清水","Qingshui","清水","清水","清水","清水","清水" +"C0F9Q0","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" +"C0F9R0","龍井","Longjing","龍井","龍井","龍井","龍井","龍井" +"C0F9S0","烏日","Wuri","烏日","烏日","烏日","烏日","烏日" +"C0F9T0","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" +"C0F9U0","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" +"C0F9V0","新社","Xinshe","新社","新社","新社","新社","新社" +"C0F9X0","大雅(中科園區)","Daya","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)" +"C0F9Y0","桃山","Taoshan","桃山","桃山","桃山","桃山","桃山" +"C0F9Z0","雪山東峰","Xueshandongfeng","雪山東峰","雪山東峰","雪山東峰","雪山東峰","雪山東峰" +"C0FA10","松柏","Songbai","松柏","松柏","松柏","松柏","松柏" +"C0FA20","溫寮","Wunliao","溫寮","溫寮","溫寮","溫寮","溫寮" +"C0FA30","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧棲" +"C0FA40","臺中電廠","Taichung?Power Plant","臺中電廠","臺中電廠","臺中電廠","臺中電廠","臺中電廠" +"C0FA50","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","霧峰" +"C0FA60","鞍馬山工作站","Anmashan Office","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站" +"C0FA70","大雪山埡口","Dashiueshan Yakou","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口" +"C0FA80","小雪山天池","Shiaushiueshan Tianchr","小雪山天池","小雪山天池","小雪山天池","小雪山天池","小雪山天池" +"C0FA90","小雪山林道","Shiaushiueshan","小雪山林道","小雪山林道","小雪山林道","小雪山林道","小雪山林道" +"C0FB00","大雪山","Dashiueshan","大雪山","大雪山","大雪山","大雪山","大雪山" +"C0FB10","出雲山苗圃","Chuyunshan","出雲山苗圃","出雲山苗圃","出雲山苗圃","出雲山苗圃","出雲山苗圃" +"C0FB20","雪山橋","Shiueshanchiau","雪山橋","雪山橋","雪山橋","雪山橋","雪山橋" +"C0FB30","八仙山苗圃","Bashianshan","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃" +"C0FB40","中橫21.6k","Chungheng 21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k" +"C0FB70","大甲溪埔","Dajia, Xipu","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔" +"C0G620","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬園" +"C0G650","員林","Yuanlin","員林","員林","員林","員林","員林" +"C0G660","溪湖","Xihu","渓湖","溪湖","溪湖","溪湖","溪湖" +"C0G720","溪州","Xizhou","渓州","溪州","溪州","溪州","溪州" +"C0G730","二林","Erlin","二林","二林","二林","二林","二林" +"C0G740","大城","Dacheng","大城","大城","大城","大城","大城" +"C0G770","福興","Fuxing","福興","福興","福興","福興","福興" +"C0G780","秀水","Xiushui","秀水","秀水","秀水","秀水","秀水" +"C0G800","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔鹽" +"C0G810","埔心","Puxin","埔心","埔心","埔心","埔心","埔心" +"C0G820","田尾","Tianwei","田尾","田尾","田尾","田尾","田尾" +"C0G830","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤頭" +"C0G860","社頭","Shetou","社頭","社頭","社頭","社頭","社頭" +"C0G880","二水","Ershui","二水","二水","二水","二水","二水" +"C0G890","伸港","Shenggang","伸港","伸港","伸港","伸港","伸港" +"C0G900","線西","Xianxi","線西","線西","線西","線西","線西" +"C0G910","花壇","Huatan","花壇","花壇","花壇","花壇","花壇" +"C0G920","永靖","Yongjing ","永靖","永靖","永靖","永靖","永靖" +"C0G940","竹塘","Zhutang","竹塘","竹塘","竹塘","竹塘","竹塘" +"C0G950","防潮門","Fangchaomen","防潮門","防潮門","防潮門","防潮門","防潮門" +"C0G960","福寶","Fubao","福寶","福寶","福寶","福寶","福寶" +"C0G970","三豐","Sanfong","三豐","三豐","三豐","三豐","三豐" +"C0G9B0","和美","Hemei","和美","和美","和美","和美","和美" +"C0H890","埔里","Puli","埔里","埔里","埔里","埔里","埔里" +"C0H960","草屯","Caotun","草屯","草屯","草屯","草屯","草屯" +"C0H990","昆陽","Kunyang","昆陽","昆陽","昆陽","昆陽","昆陽" +"C0H9A0","神木村","Shenmu Village","神木村","神木村","神木村","神木村","神木村" +"C0H9C0","合歡山","Hehuan Mountain","合歡山","合歡山","合歡山","合歡山","合歡山" +"C0I010","廬山","Lushan","廬山","廬山","廬山","廬山","廬山" +"C0I080","信義","Xinyi","信義","信義","信義","信義","信義" +"C0I110","竹山","Zhushan","竹山","竹山","竹山","竹山","竹山" +"C0I360","水里","Shuili","水里","水里","水里","水里","水里" +"C0I370","魚池","Yuchi","魚池","魚池","魚池","魚池","魚池" +"C0I380","集集","Jiji","集集","集集","集集","集集","集集" +"C0I390","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁愛" +"C0I410","名間","Mingjian","名間","名間","名間","名間","名間" +"C0I420","國姓","Guoxing","国姓","國姓","國姓","國姓","國姓" +"C0I460","南投","Nantou","南投","南投","南投","南投","南投" +"C0I480","梅峰","Meifeng","梅峰","梅峰","梅峰","梅峰","梅峰" +"C0I490","萬大林道","Wandalindao","萬大林道","萬大林道","萬大林道","萬大林道","萬大林道" +"C0I520","玉山風口","Yushanfengkou","玉山風口","玉山風口","玉山風口","玉山風口","玉山風口" +"C0I530","小奇萊","Xiaoqilai","小奇萊","小奇萊","小奇萊","小奇萊","小奇萊" +"C0I540","奇萊稜線","Qilailengxian","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線" +"C0K250","崙背","Lunbei","崙背","崙背","崙背","崙背","崙背" +"C0K280","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" +"C0K291","宜梧","Yiwu","宜梧","宜梧","宜梧","宜梧","宜梧" +"C0K330","虎尾","Huwei","虎尾","虎尾","虎尾","虎尾","虎尾" +"C0K390","土庫","Tuku","土庫","土庫","土庫","土庫","土庫" +"C0K400","斗六","Douliu","斗六","斗六","斗六","斗六","斗六" +"C0K410","北港","Beigang","北港","北港","北港","北港","北港" +"C0K420","西螺","Xiluo","西螺","西螺","西螺","西螺","西螺" +"C0K430","褒忠","Baozhong","褒忠","褒忠","褒忠","褒忠","褒忠" +"C0K440","二崙","Erlun","二崙","二崙","二崙","二崙","二崙" +"C0K450","大埤","Dapi","大埤","大埤","大埤","大埤","大埤" +"C0K460","斗南","Dounan","斗南","斗南","斗南","斗南","斗南" +"C0K470","林內","Linnei","林内","林內","林內","林內","林內" +"C0K480","莿桐","Citong","莿桐","莿桐","莿桐","莿桐","莿桐" +"C0K500","元長","Yuanchang","元長","元長","元長","元長","元長" +"C0K510","水林","Shuilin","水林","水林","水林","水林","水林" +"C0K530","臺西","Taixi","台西","臺西","臺西","臺西","臺西" +"C0K550","蔦松","Niaosong","蔦松","蔦松","蔦松","蔦松","蔦松" +"C0K560","棋山","Qishan","棋山","棋山","棋山","棋山","棋山" +"C0K580","高鐵雲林","THSR Yunlin","高鐵雲林","高鐵雲林","高鐵雲林","高鐵雲林","高鐵雲林" +"C0K590","雲林東勢","Dongshi, Yunlin County","雲林東勢","雲林東勢","雲林東勢","雲林東勢","雲林東勢" +"C0K600","箔子寮","Bozihliao","箔子寮","箔子寮","箔子寮","箔子寮","箔子寮" +"C0M520","東後寮","Donghouliao","東後寮","東後寮","東後寮","東後寮","東後寮" +"C0M530","奮起湖","Fenqihu","奮起湖","奮起湖","奮起湖","奮起湖","奮起湖" +"C0M640","中埔","Zhongpu","中埔","中埔","中埔","中埔","中埔" +"C0M650","朴子","Puzi","朴子","朴子","朴子","朴子","朴子" +"C0M660","溪口","Xikou","渓口","溪口","溪口","溪口","溪口" +"C0M670","大林","Dalin","大林","大林","大林","大林","大林" +"C0M680","太保","Taibao","太保","太保","太保","太保","太保" +"C0M690","水上","Shuishang","水上","水上","水上","水上","水上" +"C0M700","竹崎","Zhuqi","竹崎","竹崎","竹崎","竹崎","竹崎" +"C0M710","東石","Dongshi","東石","東石","東石","東石","東石" +"C0M720","番路","Fanlu","番路","番路","番路","番路","番路" +"C0M730","嘉義市東區","Dongqu Chiayi City","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區" +"C0M740","六腳","Liujiao","六脚","六腳","六腳","六腳","六腳" +"C0M750","布袋","Budai","布袋","布袋","布袋","布袋","布袋" +"C0M760","民雄","Minxiong","民雄","民雄","民雄","民雄","民雄" +"C0M770","嘉義梅山","Meishan Chiayi County","嘉義梅山","嘉義梅山","嘉義梅山","嘉義梅山","嘉義梅山" +"C0M780","鹿草","Lucao","鹿草","鹿草","鹿草","鹿草","鹿草" +"C0M790","新港","Xingang","新港","新港","新港","新港","新港" +"C0M800","茶山","Chashan","茶山","茶山","茶山","茶山","茶山" +"C0M810","里佳","Lijia","里佳","里佳","里佳","里佳","里佳" +"C0M820","達邦","Dabang","達邦","達邦","達邦","達邦","達邦" +"C0M850","表湖","Biaohu","表湖","表湖","表湖","表湖","表湖" +"C0M860","新美","Shinmei","新美","新美","新美","新美","新美" +"C0M880","好美里","Haomeili","好美里","好美里","好美里","好美里","好美里" +"C0N010","鯤鯓國小","Kunshen Elementary School","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小" +"C0N020","城西","Chengsi","城西","城西","城西","城西","城西" +"C0N030","四草","Sihtsao","四草","四草","四草","四草","四草" +"C0N040","蘆竹溝","Lujhugou","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝" +"C0N050","蚵寮","Eliao","蚵寮","蚵寮","蚵寮","蚵寮","蚵寮" +"C0O830","北寮","Beiliao","北寮","北寮","北寮","北寮","北寮" +"C0O840","王爺宮","Wangyegong","王爺宮","王爺宮","王爺宮","王爺宮","王爺宮" +"C0O860","大內","Danei","大内","大內","大內","大內","大內" +"C0O900","善化","Shanhua","善化","善化","善化","善化","善化" +"C0O960","崎頂","Qiding","崎頂","崎頂","崎頂","崎頂","崎頂" +"C0O970","虎頭埤","Hutoupi","虎頭埤","虎頭埤","虎頭埤","虎頭埤","虎頭埤" +"C0O980","新市","Xinshi","新市","新市","新市","新市","新市" +"C0O990","媽廟","Mamiao","媽廟","媽廟","媽廟","媽廟","媽廟" +"C0R100","尾寮山","Weiliaoshan","尾寮山","尾寮山","尾寮山","尾寮山","尾寮山" +"C0R130","阿禮","Ali","阿禮","阿禮","阿禮","阿禮","阿禮" +"C0R140","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","瑪家" +"C0R150","三地門","Sandimen","三地門","三地門","三地門","三地門","三地門" +"C0R160","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","鹽埔" +"C0R190","赤山","Chishan","赤山","赤山","赤山","赤山","赤山" +"C0R220","潮州","Chaojhou","潮州","潮州","潮州","潮州","潮州" +"C0R240","來義","Laiyi","来義","來義","來義","來義","來義" +"C0R260","春日","Chunri","春日","春日","春日","春日","春日" +"C0R270","琉球嶼","Liouciouyu","琉球嶼","琉球嶼","琉球嶼","琉球嶼","琉球嶼" +"C0R280","檳榔","Binlang","檳榔","檳榔","檳榔","檳榔","檳榔" +"C0R320","車城","Checheng","車城","車城","車城","車城","車城" +"C0R341","牡丹","Mudan","牡丹","牡丹","牡丹","牡丹","牡丹" +"C0R350","貓鼻頭","Maobitou","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭" +"C0R440","大漢山","Dahanshan","大漢山","大漢山","大漢山","大漢山","大漢山" +"C0R470","高樹","Gaoshu","高樹","高樹","高樹","高樹","高樹" +"C0R480","長治","Changzhi","長治","長治","長治","長治","長治" +"C0R490","九如","Jiuru","九如","九如","九如","九如","九如" +"C0R520","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁頂" +"C0R540","佳冬","Jiadong","佳冬","佳冬","佳冬","佳冬","佳冬" +"C0R550","新埤","Xinpi","新埤","新埤","新埤","新埤","新埤" +"C0R560","新園","Xinyuan","新園","新園","新園","新園","新園" +"C0R570","麟洛","Linluo","麟洛","麟洛","麟洛","麟洛","麟洛" +"C0R580","南州","Nanzhou","南州","南州","南州","南州","南州" +"C0R590","里港","Ligang","里港","里港","里港","里港","里港" +"C0R600","舊泰武","Jiutaiwu","舊泰武","舊泰武","舊泰武","舊泰武","舊泰武" +"C0R620","墾雷","Kenlei","墾雷","墾雷","墾雷","墾雷","墾雷" +"C0R640","東港","Donggang","東港","東港","東港","東港","東港" +"C0R650","竹田","Zhutian","竹田","竹田","竹田","竹田","竹田" +"C0R660","枋寮","Fangliao","枋寮","枋寮","枋寮","枋寮","枋寮" +"C0R670","楓港","Fenggang","楓港","楓港","楓港","楓港","楓港" +"C0R680","佳樂水","Jialeshui","佳樂水","佳樂水","佳樂水","佳樂水","佳樂水" +"C0R690","墾丁","Kenting","墾丁","墾丁","墾丁","墾丁","墾丁" +"C0R700","枋山","Fangshan","枋山","枋山","枋山","枋山","枋山" +"C0R710","龍磐","Longpan","龍磐","龍磐","龍磐","龍磐","龍磐" +"C0R720","旭海","Xuhai","旭海","旭海","旭海","旭海","旭海" +"C0R730","大坪頂","Dapingding","大坪頂","大坪頂","大坪頂","大坪頂","大坪頂" +"C0R741","獅子","Shizi","獅子","獅子","獅子","獅子","獅子" +"C0R750","四林格山","Silingeshan","四林格山","四林格山","四林格山","四林格山","四林格山" +"C0R760","南仁湖","Nanrenhu","南仁湖","南仁湖","南仁湖","南仁湖","南仁湖" +"C0R770","保力","Baoli","保力","保力","保力","保力","保力" +"C0R780","滿州","Manzhou","満州","滿州","滿州","滿州","滿州" +"C0R790","九棚","Jiupeng","九棚","九棚","九棚","九棚","九棚" +"C0R800","丹路","Danlu","丹路","丹路","丹路","丹路","丹路" +"C0R810","內獅","Neishi","內獅","內獅","內獅","內獅","內獅" +"C0R820","白鷺","Bailu","白鷺","白鷺","白鷺","白鷺","白鷺" +"C0R830","高士","Gaoshi","高士","高士","高士","高士","高士" +"C0R840","牡丹池山","Mudanchisahn","牡丹池山","牡丹池山","牡丹池山","牡丹池山","牡丹池山" +"C0R850","林邊","Linbian","林辺","林邊","林邊","林邊","林邊" +"C0R860","鼻頭","Bitou","鼻頭","鼻頭","鼻頭","鼻頭","鼻頭" +"C0R870","興海","Singhai","興海","興海","興海","興海","興海" +"C0R880","後壁湖","Houbihu","後壁湖","後壁湖","後壁湖","後壁湖","後壁湖" +"C0R890","山海","Shanhai","山海","山海","山海","山海","山海" +"C0R900","竹坑","Jhukeng","竹坑","竹坑","竹坑","竹坑","竹坑" +"C0R910","下寮","Sialiao","下寮","下寮","下寮","下寮","下寮" +"C0R920","塭仔","Wunzai","塭仔","塭仔","塭仔","塭仔","塭仔" +"C0R930","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","萬丹" +"C0R940","加祿堂","Jialutang","加祿堂","加祿堂","加祿堂","加祿堂","加祿堂" +"C0R950","萬隆國小","Wanlongguoxiao","萬隆國小","萬隆國小","萬隆國小","萬隆國小","萬隆國小" +"C0R960","內埔","Neipu","内埔","內埔","內埔","內埔","內埔" +"C0S660","下馬","Xiama","下馬","下馬","下馬","下馬","下馬" +"C0S690","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" +"C0S700","知本","Jhihben","知本","知本","知本","知本","知本" +"C0S710","鹿野","Luye","鹿野","鹿野","鹿野","鹿野","鹿野" +"C0S730","綠島","Ludao","緑島","綠島","綠島","綠島","綠島" +"C0S740","池上","Chihshang","池上","池上","池上","池上","池上" +"C0S750","向陽","Siangyang","向陽","向陽","向陽","向陽","向陽" +"C0S760","紅石","Hongshih","紅石","紅石","紅石","紅石","紅石" +"C0S770","大溪山","Dasishan","大溪山","大溪山","大溪山","大溪山","大溪山" +"C0S790","金崙","Jinlun","金崙","金崙","金崙","金崙","金崙" +"C0S810","東河","Donghe","東河","東河","東河","東河","東河" +"C0S830","長濱","Changbin","長浜","長濱","長濱","長濱","長濱" +"C0S840","南田","Nantian","南田","南田","南田","南田","南田" +"C0S890","關山","Guanshan","関山","關山","關山","關山","關山" +"C0S900","蘭嶼高中","Lanyu High School","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中" +"C0S910","蘭嶼燈塔","Lanyu Lighthouse","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔" +"C0S920","金峰嘉蘭","Jialan Jinfeng","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭" +"C0S930","延平","Yanping","延平","延平","延平","延平","延平" +"C0S940","石寧山","Shiningshan","石寧山","石寧山","石寧山","石寧山","石寧山" +"C0S950","七塊厝","Qikuaicuo","七塊厝","七塊厝","七塊厝","七塊厝","七塊厝" +"C0S960","香蘭","Xianglan","香蘭","香蘭","香蘭","香蘭","香蘭" +"C0S970","加津林","Jiajinlin","加津林","加津林","加津林","加津林","加津林" +"C0S980","勝林山","Shenglinshan","勝林山","勝林山","勝林山","勝林山","勝林山" +"C0S990","山豬窟","Shanzhuku","山豬窟","山豬窟","山豬窟","山豬窟","山豬窟" +"C0SA00","歷坵","Liqiu","歷坵","歷坵","歷坵","歷坵","歷坵" +"C0SA10","檳榔四格山","Binlangsigeshan","檳榔四格山","檳榔四格山","檳榔四格山","檳榔四格山","檳榔四格山" +"C0SA20","金崙山","Jinlunshan","金崙山","金崙山","金崙山","金崙山","金崙山" +"C0SA30","都歷","Duli","都歷","都歷","都歷","都歷","都歷" +"C0SA40","瑞和","Ruihe","瑞和","瑞和","瑞和","瑞和","瑞和" +"C0SA60","知本(水試所)","Zhiben (FRI)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水試所)" +"C0SA80","土坂","Tuban","土坂","土坂","土坂","土坂","土坂" +"C0SA90","達仁林場","Darenlinchang","達仁林場","達仁林場","達仁林場","達仁林場","達仁林場" +"C0SB10","美和","Meihe","美和","美和","美和","美和","美和" +"C0SB20","富岡","Fugang","富岡","富岡","富岡","富岡","富岡" +"C0SB30","新蘭","Dulan Fire Brigade","新蘭","新蘭","新蘭","新蘭","新蘭" +"C0SB40","興隆"," Xinglong","興隆","興隆","興隆","興隆","興隆" +"C0SB50","叭嗡嗡","Baweng","叭嗡嗡","叭嗡嗡","叭嗡嗡","叭嗡嗡","叭嗡嗡" +"C0SB60","白守蓮","Baishoulian","白守蓮","白守蓮","白守蓮","白守蓮","白守蓮" +"C0SB70","小港漁港","Xiaogang Fishing Harbor","小港漁港","小港漁港","小港漁港","小港漁港","小港漁港" +"C0SB80","長濱漁港","Changbin Fishing Harbor","長濱漁港","長濱漁港","長濱漁港","長濱漁港","長濱漁港" +"C0T790","大禹嶺","Dayuling","大禹嶺","大禹嶺","大禹嶺","大禹嶺","大禹嶺" +"C0T820","天祥","Tianxiang","天祥","天祥","天祥","天祥","天祥" +"C0T870","鯉魚潭","Liyutan","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭" +"C0T900","西林","Xilin","西林","西林","西林","西林","西林" +"C0T960","光復","Guangfu","光復","光復","光復","光復","光復" +"C0T9A0","月眉山","Yuemeishan","月眉山","月眉山","月眉山","月眉山","月眉山" +"C0T9B0","水源","Shuiyuan","水源","水源","水源","水源","水源" +"C0T9D0","和中","Hezhong","和中","和中","和中","和中","和中" +"C0T9E0","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" +"C0T9F0","水璉","Shuilian","水璉","水璉","水璉","水璉","水璉" +"C0T9G0","鳳林山","Fenglinshan","鳳林山","鳳林山","鳳林山","鳳林山","鳳林山" +"C0T9H0","加路蘭山","Jialulanshan","加路蘭山","加路蘭山","加路蘭山","加路蘭山","加路蘭山" +"C0T9I0","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","豐濱" +"C0T9M0","靜浦","Jingpu","靜浦","靜浦","靜浦","靜浦","靜浦" +"C0T9N0","富里","Fuli","富里","富里","富里","富里","富里" +"C0TA10","花蓮漁港","Hualien Fishing Harbor","花蓮漁港","花蓮漁港","花蓮漁港","花蓮漁港","花蓮漁港" +"C0TA20","加灣","Jiawan","加灣","加灣","加灣","加灣","加灣" +"C0TA30","鹽寮","Yanliao","鹽寮","鹽寮","鹽寮","鹽寮","鹽寮" +"C0TA40","秀林","Xiulin","秀林","秀林","秀林","秀林","秀林" +"C0TA50","和仁","Heren","和仁","和仁","和仁","和仁","和仁" +"C0TA80","立霧山","Liwushan","立霧山","立霧山","立霧山","立霧山","立霧山" +"C0U520","雙連埤","Shuanglianpi","雙連埤","雙連埤","雙連埤","雙連埤","雙連埤" +"C0U600","礁溪","Chiaoshi","礁渓","礁溪","礁溪","礁溪","礁溪" +"C0U650","玉蘭","Yulan","玉蘭","玉蘭","玉蘭","玉蘭","玉蘭" +"C0U710","太平山","Taipingshan","太平山","太平山","太平山","太平山","太平山" +"C0U720","南山","Nanshan","南山","南山","南山","南山","南山" +"C0U750","龜山島","Gueishandao","龜山島","龜山島","龜山島","龜山島","龜山島" +"C0U760","東澳","Dong-Ao","東澳","東澳","東澳","東澳","東澳" +"C0U770","南澳","Nanao","南澳","南澳","南澳","南澳","南澳" +"C0U780","五結","Wujie","五結","五結","五結","五結","五結" +"C0U860","頭城","Toucheng","頭城","頭城","頭城","頭城","頭城" +"C0U870","大礁溪","Dajiaoxi","大礁溪","大礁溪","大礁溪","大礁溪","大礁溪" +"C0U880","北關","Beiguan","北關","北關","北關","北關","北關" +"C0U890","三星","Sanxing","三星","三星","三星","三星","三星" +"C0U900","內城","Neicheng","內城","內城","內城","內城","內城" +"C0U910","冬山","Dongshan","冬山","冬山","冬山","冬山","冬山" +"C0U940","羅東","Luodong","羅東","羅東","羅東","羅東","羅東" +"C0U950","鶯子嶺","Yingziling","鶯子嶺","鶯子嶺","鶯子嶺","鶯子嶺","鶯子嶺" +"C0U960","翠峰湖","Cuifenghu","翠峰湖","翠峰湖","翠峰湖","翠峰湖","翠峰湖" +"C0U970","大福","Dafu","大福","大福","大福","大福","大福" +"C0U980","坪林石牌","Shipai Pinglin","坪林石牌","坪林石牌","坪林石牌","坪林石牌","坪林石牌" +"C0U990","員山","Yuanshan","員山","員山","員山","員山","員山" +"C0UA00","土場","Tuchang","土場","土場","土場","土場","土場" +"C0UA10","鴛鴦湖","Yuanyanghu","鴛鴦湖","鴛鴦湖","鴛鴦湖","鴛鴦湖","鴛鴦湖" +"C0UA20","多加屯","Duojiatun","多加屯","多加屯","多加屯","多加屯","多加屯" +"C0UA30","白嶺","Bailing","白嶺","白嶺","白嶺","白嶺","白嶺" +"C0UA40","西德山","Xideshan","西德山","西德山","西德山","西德山","西德山" +"C0UA50","西帽山","Ximaoshan","西帽山","西帽山","西帽山","西帽山","西帽山" +"C0UA60","樟樹山","Zhangshushan","樟樹山","樟樹山","樟樹山","樟樹山","樟樹山" +"C0UA70","桃源谷","Taoyuangu","桃源谷","桃源谷","桃源谷","桃源谷","桃源谷" +"C0UA80","大溪漁港","Dasi Fishing Harbor","大溪漁港","大溪漁港","大溪漁港","大溪漁港","大溪漁港" +"C0UA90","石城","Shihcheng","石城","石城","石城","石城","石城" +"C0UB00","淡江大學蘭陽校園","Tamkang Lanyang Campus","淡江大学蘭陽キャンパス","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大學蘭陽校園" +"C0UB10","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","蘇澳" +"C0UB20","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壯圍" +"C0UB60","明池","Mingchr","明池","明池","明池","明池","明池" +"C0UB70","太平山中間站","Jhongjian","太平山中間站","太平山中間站","太平山中間站","太平山中間站","太平山中間站" +"C0UB80","翠峰林道6K","Trifong 6k","翠峰林道6K","翠峰林道6K","翠峰林道6K","翠峰林道6K","翠峰林道6K" +"C0UB90","太平山莊","Taipingshan Villa","太平山莊","太平山莊","太平山莊","太平山莊","太平山莊" +"C0V210","復興","Fuxing","復興","復興","復興","復興","復興" +"C0V350","溪埔","Xipu","溪埔","溪埔","溪埔","溪埔","溪埔" +"C0V360","內門","Neimen","内門","內門","內門","內門","內門" +"C0V370","古亭坑","Gutingkeng","古亭坑","古亭坑","古亭坑","古亭坑","古亭坑" +"C0V400","阿公店","Agongdian","阿公店","阿公店","阿公店","阿公店","阿公店" +"C0V440","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","鳳山" +"C0V450","鳳森","Fengsen","鳳森","鳳森","鳳森","鳳森","鳳森" +"C0V490","新興","Sinsing","新興","新興","新興","新興","新興" +"C0V530","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿蓮" +"C0V610","梓官","Ziguan","梓官","梓官","梓官","梓官","梓官" +"C0V620","永安","Yong'An","永安","永安","永安","永安","永安" +"C0V630","茄萣","Qieding","茄萣","茄萣","茄萣","茄萣","茄萣" +"C0V640","湖內","Hunei","湖内","湖內","湖內","湖內","湖內" +"C0V650","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","彌陀" +"C0V660","岡山","Gangshan","岡山","岡山","岡山","岡山","岡山" +"C0V680","仁武","Renwu","仁武","仁武","仁武","仁武","仁武" +"C0V690","鼓山","Gushan","鼓山","鼓山","鼓山","鼓山","鼓山" +"C0V700","三民","Sanmin","三民","三民","三民","三民","三民" +"C0V710","苓雅","Lingya","苓雅","苓雅","苓雅","苓雅","苓雅" +"C0V720","林園","Linyuan","林園","林園","林園","林園","林園" +"C0V730","大寮","Daliao","大寮","大寮","大寮","大寮","大寮" +"C0V740","旗山","Qishan","旗山","旗山","旗山","旗山","旗山" +"C0V750","路竹","Luzhu","路竹","路竹","路竹","路竹","路竹" +"C0V760","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","橋頭" +"C0V770","大社","Dashe","大社","大社","大社","大社","大社" +"C0V790","萬山","Wanshan","萬山","萬山","萬山","萬山","萬山" +"C0V800","六龜","Liugui","六亀","六龜","六龜","六龜","六龜" +"C0V810","左營","Zuoying","左営","左營","左營","左營","左營" +"C0V820","小林","Xiaolin","小林","小林","小林","小林","小林" +"C0V840","鳳鼻頭","Fongbitou","鳳鼻頭","鳳鼻頭","鳳鼻頭","鳳鼻頭","鳳鼻頭" +"C0V850","蚵仔寮","Kezailiao","蚵仔寮","蚵仔寮","蚵仔寮","蚵仔寮","蚵仔寮" +"C0V860","南寮","Nanliao","南寮","南寮","南寮","南寮","南寮" +"C0V870","文安","Wunan","文安","文安","文安","文安","文安" +"C0V880","興達","Singda","興達","興達","興達","興達","興達" +"C0V890","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前鎮" +"C0V900","汕尾","Shanwei","汕尾","汕尾","汕尾","汕尾","汕尾" +"C0V910","大樹","Dashu","大樹","大樹","大樹","大樹","大樹" +"C0W110","東莒","Dongju","東莒","東莒","東莒","東莒","東莒" +"C0W120","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西嶼" +"C0W130","花嶼","Huayu","花嶼","花嶼","花嶼","花嶼","花嶼" +"C0W140","金沙","Jinsha ","金沙","金沙","金沙","金沙","金沙" +"C0W150","金寧","Jinning","金寧","金寧","金寧","金寧","金寧" +"C0W160","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","烏坵" +"C0W180","七美","Qimei","七美","七美","七美","七美","七美" +"C0W190","望安","Wangan","望安","望安","望安","望安","望安" +"C0W200","湖西","Husi","湖西","湖西","湖西","湖西","湖西" +"C0W220","北竿","Beigan","北竿","北竿","北竿","北竿","北竿" +"C0W240","九宮","Jiugong ","九宮","九宮","九宮","九宮","九宮" +"C0X050","東河","Donghe","東河","東河","東河","東河","東河" +"C0X060","下營","Xiaying","下営","下營","下營","下營","下營" +"C0X080","佳里","Jiali","佳里","佳里","佳里","佳里","佳里" +"C0X100","臺南市北區","Beiqu Tainan City","臺南市北區","臺南市北區","臺南市北區","臺南市北區","臺南市北區" +"C0X110","臺南市南區","Nanqu Tainan City","臺南市南區","臺南市南區","臺南市南區","臺南市南區","臺南市南區" +"C0X120","麻豆","Madou","麻豆","麻豆","麻豆","麻豆","麻豆" +"C0X130","官田","Guantian","官田","官田","官田","官田","官田" +"C0X140","西港","Xigang","西港","西港","西港","西港","西港" +"C0X150","安定","Anding","安定","安定","安定","安定","安定" +"C0X160","仁德","Rende","仁徳","仁德","仁德","仁德","仁德" +"C0X170","關廟","Guanmiao","関廟","關廟","關廟","關廟","關廟" +"C0X180","山上","Shanshang","山上","山上","山上","山上","山上" +"C0X190","安平","Anping","安平","安平","安平","安平","安平" +"C0X200","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左鎮" +"C0X210","白河","Baihe","白河","白河","白河","白河","白河" +"C0X220","學甲","Xuejia","学甲","學甲","學甲","學甲","學甲" +"C0X230","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","鹽水" +"C0X240","關子嶺","Guanziling","關子嶺","關子嶺","關子嶺","關子嶺","關子嶺" +"C0X250","新營","Xinying","新営","新營","新營","新營","新營" +"C0X260","後壁","Houbi","後壁","後壁","後壁","後壁","後壁" +"C0X280","將軍","Jiangjun","将軍","將軍","將軍","將軍","將軍" +"C0X290","北門","Beimen","北門","北門","北門","北門","北門" +"C0X300","鹿寮","Luliao","鹿寮","鹿寮","鹿寮","鹿寮","鹿寮" +"C0X320","柳營","Liuying","柳営","柳營","柳營","柳營","柳營" +"C0Z020","明里","Mingli","明里","明里","明里","明里","明里" +"C0Z050","佳心","Jiaxin","佳心","佳心","佳心","佳心","佳心" +"C0Z061","玉里","Yuli","玉里","玉里","玉里","玉里","玉里" +"C0Z070","舞鶴","Wuhe","舞鶴","舞鶴","舞鶴","舞鶴","舞鶴" +"C0Z080","富源","Fuyuan","富源","富源","富源","富源","富源" +"C0Z100","東華","Donghwa","東華","東華","東華","東華","東華" +"C0Z150","吉安光華","Guanghua Ji-An","吉安光華","吉安光華","吉安光華","吉安光華","吉安光華" +"C0Z160","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","鳳林" +"C0Z170","卓溪","Zhuoxi","卓渓","卓溪","卓溪","卓溪","卓溪" +"C0Z180","新城","Xincheng","新城","新城","新城","新城","新城" +"C0Z190","富世","Fushi","富世","富世","富世","富世","富世" +"C0Z200","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","萬榮" +"C0Z210","瑞穗","Ruisui","瑞穂","瑞穗","瑞穗","瑞穗","瑞穗" +"C0Z220","和平林道","Hepinglindao","和平林道","和平林道","和平林道","和平林道","和平林道" +"C0Z230","和平","Heping","和平","和平","和平","和平","和平" +"C0Z250","瑞穗林道","Ruisuilindao","瑞穗林道","瑞穗林道","瑞穗林道","瑞穗林道","瑞穗林道" +"C0Z270","蕃薯寮","Fanshuliao","蕃薯寮","蕃薯寮","蕃薯寮","蕃薯寮","蕃薯寮" +"C0Z280","德武","Dewu","德武","德武","德武","德武","德武" +"C0Z290","赤柯山","Chikeshan","赤柯山","赤柯山","赤柯山","赤柯山","赤柯山" +"C0Z300","東里","Dongli","東里","東里","東里","東里","東里" +"C0Z310","清水斷崖","Qingshui Cliff","清水斷崖","清水斷崖","清水斷崖","清水斷崖","清水斷崖" +"C0Z320","清水林道","Qingshuilindao","清水林道","清水林道","清水林道","清水林道","清水林道" +"C0Z330","安通山","Antongshan","安通山","安通山","安通山","安通山","安通山" +"C1A630","下盆","Siapen","下盆","下盆","下盆","下盆","下盆" +"C1A750","石碇服務區","Shiding Service Area","石碇服務區","石碇服務區","石碇服務區","石碇服務區","石碇服務區" +"C1A760","坪林交控","Pinglin Traffic Control Center","坪林交控","坪林交控","坪林交控","坪林交控","坪林交控" +"C1A9N0","四十份","Sihshihfen","四十份","四十份","四十份","四十份","四十份" +"C1AC50","關渡","Guandu","關渡","關渡","關渡","關渡","關渡" +"C1AI50","國三N016K","Freeway No. 3 - Rain - N016k","國三N016K","國三N016K","國三N016K","國三N016K","國三N016K" +"C1AI60","國一39K邊坡","Freeway No. 1 - Rain – N039k","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡" +"C1C510","水尾","Shueiwei","水尾","水尾","水尾","水尾","水尾" +"C1D380","新埔","Sinpu","新埔","新埔","新埔","新埔","新埔" +"C1D400","鳥嘴山","Niaozueishan","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山" +"C1D410","白蘭","Bailan","白蘭","白蘭","白蘭","白蘭","白蘭" +"C1D420","太閣南","Taigenan","太閣南","太閣南","太閣南","太閣南","太閣南" +"C1D630","飛鳳山","Fei Feng Mountain","飛鳳山","飛鳳山","飛鳳山","飛鳳山","飛鳳山" +"C1D640","外坪(五指山)","Waiping(Wuzhihshan)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)" +"C1E451","象鼻","Xiangbi","象鼻","象鼻","象鼻","象鼻","象鼻" +"C1E461","松安","Song-An","松安","松安","松安","松安","松安" +"C1E480","鳳美","Fongmei","鳳美","鳳美","鳳美","鳳美","鳳美" +"C1E511","新開","Xinkai","新開","新開","新開","新開","新開" +"C1E601","南勢","Nanshi","南勢","南勢","南勢","南勢","南勢" +"C1E670","南礦","Nankuang","南礦","南礦","南礦","南礦","南礦" +"C1E681","南勢山","Nanshishan","南勢山","南勢山","南勢山","南勢山","南勢山" +"C1E691","南湖","Nanhu","南湖","南湖","南湖","南湖","南湖" +"C1E701","八卦","Bagua","八卦","八卦","八卦","八卦","八卦" +"C1E711","馬拉邦山","Malabangshan","馬拉邦山","馬拉邦山","馬拉邦山","馬拉邦山","馬拉邦山" +"C1E721","泰安","Tai-An","泰安","泰安","泰安","泰安","泰安" +"C1E770","公館","Gongguan","公館","公館","公館","公館","公館" +"C1E890","國三N149K","Freeway No. 1 - Rain – N149k","國三N149K","國三N149K","國三N149K","國三N149K","國三N149K" +"C1E900","國一N128K","Freeway No. 1 - Rain – N128k","國一N128K","國一N128K","國一N128K","國一N128K","國一N128K" +"C1F871","上谷關","Shangguguan","上谷關","上谷關","上谷關","上谷關","上谷關" +"C1F891","稍來","Shaolai","稍來","稍來","稍來","稍來","稍來" +"C1F911","新伯公","Xinbogong","新伯公","新伯公","新伯公","新伯公","新伯公" +"C1F941","雪嶺","Xueling","雪嶺","雪嶺","雪嶺","雪嶺","雪嶺" +"C1F9B1","桐林","Tonglin","桐林","桐林","桐林","桐林","桐林" +"C1F9C1","白冷","Baileng","白冷","白冷","白冷","白冷","白冷" +"C1F9D1","白毛台","Baimaotai","白毛台","白毛台","白毛台","白毛台","白毛台" +"C1F9E1","龍安","Long-An","龍安","龍安","龍安","龍安","龍安" +"C1F9F1","伯公龍","Bogonglong","伯公龍","伯公龍","伯公龍","伯公龍","伯公龍" +"C1F9G1","慶福山","Cingfushan","慶福山","慶福山","慶福山","慶福山","慶福山" +"C1F9J1","清水林","Qingshuilin","清水林","清水林","清水林","清水林","清水林" +"C1F9W0","德基","Deji","德基","德基","德基","德基","德基" +"C1G691","下水埔","Xiashuipu","下水埔","下水埔","下水埔","下水埔","下水埔" +"C1G9D0","國一S218K","Freeway No. 1 - Rain – S218k","國一S218K","國一S218K","國一S218K","國一S218K","國一S218K" +"C1H000","翠峰","Cuifeng","翠峰","翠峰","翠峰","翠峰","翠峰" +"C1H840","國三N238K","Freeway No. 3 - Rain –N238k","國三N238K","國三N238K","國三N238K","國三N238K","國三N238K" +"C1H900","清流","Qingliu","清流","清流","清流","清流","清流" +"C1H920","長豐","Changfeng","長豐","長豐","長豐","長豐","長豐" +"C1H941","雙冬","Shuangdong","雙冬","雙冬","雙冬","雙冬","雙冬" +"C1H971","六分寮","Liufenliao","六分寮","六分寮","六分寮","六分寮","六分寮" +"C1H9B1","阿眉","Amei","阿眉","阿眉","阿眉","阿眉","阿眉" +"C1I020","萬大","Wanda","萬大","萬大","萬大","萬大","萬大" +"C1I030","武界","Wujie","武界","武界","武界","武界","武界" +"C1I050","丹大","Danda","丹大","丹大","丹大","丹大","丹大" +"C1I070","和社","Heshe","和社","和社","和社","和社","和社" +"C1I101","溪頭","Xitou","溪頭","溪頭","溪頭","溪頭","溪頭" +"C1I121","大鞍","Da-An","大鞍","大鞍","大鞍","大鞍","大鞍" +"C1I131","桶頭","Tongtou","桶頭","桶頭","桶頭","桶頭","桶頭" +"C1I140","卡奈托灣","Kanaituowan","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托灣" +"C1I150","青雲","Qingyun","青雲","青雲","青雲","青雲","青雲" +"C1I201","中心崙","Zhongxinlun","中心崙","中心崙","中心崙","中心崙","中心崙" +"C1I211","蘆竹湳","Luzhunan","蘆竹湳","蘆竹湳","蘆竹湳","蘆竹湳","蘆竹湳" +"C1I220","樟湖","Zhanghu","樟湖","樟湖","樟湖","樟湖","樟湖" +"C1I230","九份二山","Jiufen'Ershan","九份二山","九份二山","九份二山","九份二山","九份二山" +"C1I240","外大坪","Waidaping","外大坪","外大坪","外大坪","外大坪","外大坪" +"C1I250","鯉潭","Litan","鯉潭","鯉潭","鯉潭","鯉潭","鯉潭" +"C1I260","北坑","Beikeng","北坑","北坑","北坑","北坑","北坑" +"C1I280","埔中","Puzhong","埔中","埔中","埔中","埔中","埔中" +"C1I290","豐丘","Fengqiu","豐丘","豐丘","豐丘","豐丘","豐丘" +"C1I310","西巒","Xiluan","西巒","西巒","西巒","西巒","西巒" +"C1I320","奧萬大","Aowanda","奧萬大","奧萬大","奧萬大","奧萬大","奧萬大" +"C1I330","楓樹林","Fengshulin","楓樹林","楓樹林","楓樹林","楓樹林","楓樹林" +"C1I340","新興橋","Xinxingqiao","新興橋","新興橋","新興橋","新興橋","新興橋" +"C1I400","凌霄","Lingxiao","凌霄","凌霄","凌霄","凌霄","凌霄" +"C1I430","翠華","Cuihua","翠華","翠華","翠華","翠華","翠華" +"C1I440","新高口","Xingaokou","新高口","新高口","新高口","新高口","新高口" +"C1I450","望鄉山","Wangxiangshan","望鄉山","望鄉山","望鄉山","望鄉山","望鄉山" +"C1I470","杉林溪","Shanlinxi","杉林溪","杉林溪","杉林溪","杉林溪","杉林溪" +"C1I500","大尖山","Dajianshan","大尖山","大尖山","大尖山","大尖山","大尖山" +"C1I510","線浸林道","Xianjinlindao","線浸林道","線浸林道","線浸林道","線浸林道","線浸林道" +"C1I550","國六W023K","Freeway No. 6 - Rain – W023k","國六W023K","國六W023K","國六W023K","國六W023K","國六W023K" +"C1K540","口湖","Kouhu","口湖","口湖","口湖","口湖","口湖" +"C1M390","龍美","Longmei","龍美","龍美","龍美","龍美","龍美" +"C1M400","菜瓜坪","Caiguaping","菜瓜坪","菜瓜坪","菜瓜坪","菜瓜坪","菜瓜坪" +"C1M480","獨立山","Dulishan","獨立山","獨立山","獨立山","獨立山","獨立山" +"C1M600","頭凍","Toudong","頭凍","頭凍","頭凍","頭凍","頭凍" +"C1M610","石磐龍","Shipanlong","石磐龍","石磐龍","石磐龍","石磐龍","石磐龍" +"C1M640","十字","Shizi","十字","十字","十字","十字","十字" +"C1M870","國三N285K","Freeway No. 3 - Rain –N285k","國三N285K","國三N285K","國三N285K","國三N285K","國三N285K" +"C1N001","沙崙","Shalun","沙崙","沙崙","沙崙","沙崙","沙崙" +"C1O850","環湖","Huanhu","環湖","環湖","環湖","環湖","環湖" +"C1O870","大棟山","Dadongshan","大棟山","大棟山","大棟山","大棟山","大棟山" +"C1O880","關山","Guanshan","関山","關山","關山","關山","關山" +"C1O921","楠西","Nanxi","楠西","楠西","楠西","楠西","楠西" +"C1O940","東山服務區","Dongshan Service Area","東山服務區","東山服務區","東山服務區","東山服務區","東山服務區" +"C1R110","口社","Gusia","口社","口社","口社","口社","口社" +"C1R120","上德文","Shangdewun","上德文","上德文","上德文","上德文","上德文" +"C1R250","力里","Lili","力里","力里","力里","力里","力里" +"C1R290","石門山","Shihmenshan","石門山","石門山","石門山","石門山","石門山" +"C1R610","西大武山","Xidawushan","西大武山","西大武山","西大武山","西大武山","西大武山" +"C1R630","龍泉","Longquan","龍泉","龍泉","龍泉","龍泉","龍泉" +"C1S670","摩天","Motian","摩天","摩天","摩天","摩天","摩天" +"C1S800","華源","Huayuan","華源","華源","華源","華源","華源" +"C1S820","金峰","Jinfeng","金峰","金峰","金峰","金峰","金峰" +"C1S850","豐南","Funan","豐南","豐南","豐南","豐南","豐南" +"C1S860","利嘉","Lichai","利嘉","利嘉","利嘉","利嘉","利嘉" +"C1S870","南美山","Nanmaisan","南美山","南美山","南美山","南美山","南美山" +"C1S880","壽卡","Shouka","壽卡","壽卡","壽卡","壽卡","壽卡" +"C1SA50","利嘉林道","Lijialindao","利嘉林道","利嘉林道","利嘉林道","利嘉林道","利嘉林道" +"C1SA70","都蘭","Dulan","都蘭","都蘭","都蘭","都蘭","都蘭" +"C1T800","洛韶","Luoshao","洛韶","洛韶","洛韶","洛韶","洛韶" +"C1T810","慈恩","Ci-En","慈恩","慈恩","慈恩","慈恩","慈恩" +"C1T830","布洛灣","Buluowan","布洛灣","布洛灣","布洛灣","布洛灣","布洛灣" +"C1T920","中興","Zhongxing","中興","中興","中興","中興","中興" +"C1T940","大觀","Daguan","大觀","大觀","大觀","大觀","大觀" +"C1T950","太安","Tai-An","太安","太安","太安","太安","太安" +"C1T970","大農","Danong","大農","大農","大農","大農","大農" +"C1T980","龍澗","Longjian","龍澗","龍澗","龍澗","龍澗","龍澗" +"C1T990","高寮","Gaoliao","高寮","高寮","高寮","高寮","高寮" +"C1TA00","太魯閣","Taroko","太魯閣","太魯閣","太魯閣","太魯閣","太魯閣" +"C1U501","牛鬥","Nioudou","牛鬥","牛鬥","牛鬥","牛鬥","牛鬥" +"C1U670","寒溪","Hanxi","寒溪","寒溪","寒溪","寒溪","寒溪" +"C1U840","東澳嶺","Dongaoling","東澳嶺","東澳嶺","東澳嶺","東澳嶺","東澳嶺" +"C1U850","觀音海岸","Guanyin Coast","觀音海岸","觀音海岸","觀音海岸","觀音海岸","觀音海岸" +"C1U920","思源","Siyuan","思源","思源","思源","思源","思源" +"C1U930","粉鳥林","Fenniaolin","粉鳥林","粉鳥林","粉鳥林","粉鳥林","粉鳥林" +"C1V160","達卡努瓦","Dakanuwa","達卡努瓦","達卡努瓦","達卡努瓦","達卡努瓦","達卡努瓦" +"C1V170","排雲","Paiyun","排雲","排雲","排雲","排雲","排雲" +"C1V190","南天池","Nantianchi","南天池","南天池","南天池","南天池","南天池" +"C1V200","梅山","Meishan","梅山","梅山","梅山","梅山","梅山" +"C1V220","小關山","Xiaoguanshan","小關山","小關山","小關山","小關山","小關山" +"C1V231","高中","Gaozhong","高中","高中","高中","高中","高中" +"C1V300","御油山","Yuyoushan","御油山","御油山","御油山","御油山","御油山" +"C1V340","大津","Dajin","大津","大津","大津","大津","大津" +"C1V390","尖山","Jianshan","尖山","尖山","尖山","尖山","尖山" +"C1V570","吉東","Jiadong","吉東","吉東","吉東","吉東","吉東" +"C1V580","溪南(特生中心)","Xinan","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)" +"C1V590","新發","Xinfa","新發","新發","新發","新發","新發" +"C1V600","藤枝","Tengzhi","藤枝","藤枝","藤枝","藤枝","藤枝" +"C1V780","多納林道","Duonalindao","多納林道","多納林道","多納林道","多納林道","多納林道" +"C1V830","國三S383K","Freeway No. 3 - Rain – S383k","國三S383K","國三S383K","國三S383K","國三S383K","國三S383K" +"C1X040","東原","Dongyuan","東原","東原","東原","東原","東原" +"C1Z030","紅葉","Hongye","紅葉","紅葉","紅葉","紅葉","紅葉" +"C1Z040","立山","Lishan","立山","立山","立山","立山","立山" +"C1Z110","三棧","Sanzhan","三棧","三棧","三棧","三棧","三棧" +"C1Z120","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","壽豐" +"C1Z130","銅門","Tongmen","銅門","銅門","銅門","銅門","銅門" +"C1Z140","荖溪","Laoxi","荖溪","荖溪","荖溪","荖溪","荖溪" +"C1Z240","中平林道","Zhongpinglindao","中平林道","中平林道","中平林道","中平林道","中平林道" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index fa38593e7..29b690620 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -1,1460 +1,1346 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-11 02:40\n" -"Language-Team: Chinese Simplified\n" -"Language: zh_CN\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-CN\n" -"X-Crowdin-File: /main/assets/translations/strings.pot\n" -"X-Crowdin-File-ID: 20\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"PO-Revision-Date: 2025-08-13 13:25\n" -#: lib/app/settings/location/page.dart:372 +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "所在地" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "主题" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "语言" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "单位" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地图" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "紧急地震预警" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "强震监视器" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:800 msgid "地震報告" msgstr "地震报告" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "震度速报" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "雷雨即时信息" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天气警特报" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "防灾信息平台" +msgstr "防灾资讯" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯資訊" msgstr "海啸信息" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "公告" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "赞助我们" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "设置" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "接收全部" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "关闭" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "接收类别" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "所在地震度1以上" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "海啸信息、海啸警报" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "只接收海啸警报" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "接收所在地" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "所在地震度4以上" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "音效测试" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "发送公告时" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音" -"效。此测试不会向服务器发送任何请求" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音效。此测试不会向服务器发送任何请求" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "请先设置所在地以使用通知功能" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震预警" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天气" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/settings/notify/page.dart:247 msgid "海嘯" msgstr "海啸" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "其他" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "" -"海啸警报发布时\n" -"沿海地区乡镇" +msgstr "海啸警报发布时" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "常规​​​​​" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "太平洋海啸消息发布时" +msgstr "海啸信息发布时" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "太平洋海啸消息(无声通知)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "太平洋海啸消息发布时" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "强震监视器(一般)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "检测到晃动" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "震度速報(一般)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "所在地(乡镇)实测震度 3 以上" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "震度速報(无声通知)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "所在地(乡镇)实测震度 1 以上" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "地震报告(一般)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "所在地(县市)实测震度 3 以上" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "地震报告(无声通知)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "所在地(县市)实测震度 1 以上" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "已更新通知设定" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "更新通知设定失败" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "紧急地震预警(重大)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 4 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "紧急地震预警(一般)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 2 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "紧急地震预警(无声)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 1 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "地震预警(重大)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "所在地(乡镇)预估震度 4 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "地震预警(一般)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "所在地(乡镇)预估震度 2 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "地震预警(无声)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "所在地(乡镇)预估震度 1 以上" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" -msgstr "所在地(乡镇)发布避难警报时" +msgstr "所在地(乡镇)发布防灾警讯时" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" -msgstr "所在地(乡镇)发布避难信息时" +msgstr "所在地(乡镇)发布防灾资讯时" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"所在地(乡镇)发布红灯信号的\n" +msgstr "所在地(乡镇)发布红灯信号的\n" "天气警特报" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"所在地(乡镇)发布上述除外灯信号的\n" +msgstr "所在地(乡镇)发布上述除外灯信号的\n" "天气警特报" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" -msgstr "" -"所在地(乡镇)发布雷雨即时信息或\n" -"山区暴雨时" +msgstr "所在地(乡镇)发布山区暴雨时" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "" -"所在地(乡镇)发布雷雨即时信息或\n" -"山区暴雨时" +msgstr "所在地(乡镇)发布雷雨即时信息时" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "使用华氏度" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "切换温度显示单位为华氏度 (℉)" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "显示语言" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "系统语言" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "协助翻译" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "点击这里来帮助我们改进 DPIP 的翻译" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "选择语言" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "已翻译 {translated}・已校对 {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "来源语言" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "无法连接到商店,请稍后再试" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "找不到商品,请稍后再试" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "重新加载" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "正在加载商店商品中" -#: lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维" -"持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与" -"维护的成本!\n" -"\n" -"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定" -"底,为您提供服务。感谢您的理解与慷慨!" - -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:161 +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与维护的成本!\n\n" +"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定底,为您提供服务。感谢您的理解与慷慨!" + +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "订阅制" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/月" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "单次支持" -#: lib/app/settings/donate/page.dart:284 +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "无法连接至 {store} ,请稍后再试。" -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "正在恢复您购买的订阅" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "恢复购买" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "使用条款" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "隐私权政策" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "设置您的所在地,以接收本地的实时信息" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "界面" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "更改 DPIP 整体的外观与颜色" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "更改 DPIP 的显示语言" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "调整 DPIP 显示数值所使用的单位" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "调整 DPIP 地图的设置" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "设置推送通知及测试通知音效" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "信息" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "掌握 ExpTech Studio 的最新公告与资讯" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "更新日志" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "查看 DPIP 的更新记录" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "帮助我们维护服务器的稳定和长久发展" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "第三方套件授权" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP 的实现得益于开源项目的支持" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "调试" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "应用程序版本" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "设备信息" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "复制通知 Token" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "App 日志" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "任何信息应以中央气象署发布内容为准。" -#: lib/app/settings/location/page.dart:76 -#, fuzzy +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "无法取得权限" +msgstr "" -#: lib/app/settings/location/page.dart:78 -#, fuzzy +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "无法取得权限" +msgstr "" -#: lib/app/settings/location/page.dart:79 -#, fuzzy +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "无法取得权限" +msgstr "" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "省电策略" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "无法取得权限" -#: lib/app/settings/location/page.dart:85 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" -msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" - -#: lib/app/settings/location/page.dart:86 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" -msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgstr "" -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" -#: lib/app/settings/location/page.dart:93 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" -msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所在地信息。" + +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgstr "" -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "取消" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" -msgstr "" +msgstr "始终允许" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自动更新" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期更新当前位置" -#: lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您" -"的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新" -"动态。" +#: ./lib/app/settings/location/page.dart:242 +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新动态。" -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" -msgstr "" +msgstr "通知功能已被拒绝,请前往设置允许权限。" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" -msgstr "" +msgstr "省电策略被拒绝,请前往设置允许权限。" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" -msgstr "" +msgstr "新增地点" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:26 msgid "縣市" msgstr "县市" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:38 msgid "目前所在地" msgstr "当前位置" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/settings/map/page.dart:47 msgid "監視器" -msgstr "强震监视器" +msgstr "" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "雷达拼图" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "气温" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "降水" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "风向/风速" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "線條" msgstr "线条" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" -msgstr "" +msgstr "OpenStreetMap" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" -msgstr "" +msgstr "Google" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "底图" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "默认图层" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "动画帧率" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" -msgstr "" +msgstr "影响强震监视器的地震波模拟动画流畅度" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "过高的动画帧率可能会造成设备卡顿或发热" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "主题模式" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "浅色" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "深色" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "跟随系统主题" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "主题色" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "系统颜色" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "使用系统颜色" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "确定" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "服务区域外,仅在台湾各地可用" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:23 msgid "尚未設定" msgstr "尚未设置" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "体感约 {apparent}°" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "尚未设定所在地" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "第 {serial} 报" -#: lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time} 左右,{location}附近发生有感地震,预计规模 " -"M{magnitude}、所在地最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:1100 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" -#: lib/app/map/_lib/managers/monitor.dart:926 -#, fuzzy -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" -msgstr "" -"{time} 左右,{location}附近发生有感地震,预计规模 " -"M{magnitude}、所在地最大震度{intensity}。" +#: ./lib/app/map/_lib/managers/monitor.dart:926 +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、深度{depth}公里。" -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "所在地预估" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "震波" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "抵达" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "已更新至 {version}" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "取得天气异常" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "无法载入更新日志,请稍后再试。" -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "重试" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "下一步" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "防灾信息平台" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "我们是谁?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的" -"团体。成员来自台湾北中南、日本、韩国、中国的学生。" +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的团体。成员来自台湾北中南、日本、韩国、中国的学生。" -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "我们的初衷" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形" -"成现在的样子。" +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形成现在的样子。" -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事项" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可" -"能性,我们会尽力避免此类情况,但不保证一定不会发生。" +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可能性,我们会尽力避免此类情况,但不保证一定不会发生。" -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "强烈摇晃有概率比通知早抵达用户所在地。" -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" msgstr "地震速报为快速计算的结果,可能存在较大误差,应理解并谨慎使用。" -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "任何不被官方所认可的行为均有可能承担法律风险,请务必遵守相关规范。" -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "欢迎使用 DPIP" -#: lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信" -"息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" +#: ./lib/app/welcome/1-about/page.dart:81 +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "在重大灾害发生时以通知来传递即时防灾信息" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "使用定位来自动更新所在地设置,提供当地的即时防灾信息" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "允许DPIP在后台持续运行,以便获取实时防灾通知。" -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "储存" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "用于存储中央气象署或 ExpTech 提供的数据可视化图片" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "权限请求" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "需要用户手动前往设置开启相关权限。" -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "权限" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "我们一直和用户站在一起,为用户的隐私而不断努力。" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地图图层" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "选择要显示的地图图层" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "气象" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" -msgstr "" +msgstr "单位:{unit}" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "长按设定播放起点" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "目前时间" -#: lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "播放起点" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "播放进度" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今天" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 分钟" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 小时" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 小时" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 小时" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 小时" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 小时" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 天" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 天" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" -msgstr "" +msgstr "海外测站" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" -msgstr "" +msgstr "实时震度:" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" -msgstr "峰值地震动加速度图" +msgstr "地动加速度:" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" -msgstr "峰值最大地震动速度图" +msgstr "地动速度:" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" -msgstr "" +msgstr "无数据" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "目前没有生效中的地震预警" -#: lib/app/map/_lib/managers/monitor.dart:865 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" -msgstr "规模 M{magnitude},所在地预估{intensity}" +msgstr "规模 M{magnitude}、深度{depth}公里" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "规模 M{magnitude},所在地预估{intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}秒后抵达" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "已抵达" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:357 msgid "近期的地震報告" msgstr "近期地震报告" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "更多" msgstr "更多" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:578 msgid "編號 {number} 顯著有感地震" msgstr "序号 {number} 显著有感地震" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:579 msgid "小區域有感地震" msgstr "小区域有感地震" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:638 msgid "地震規模" msgstr "地震震级" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:660 msgid "震源深度" msgstr "震源深度" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:597 msgid "報告頁面" msgstr "报告详情" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:621 msgid "發震時間" msgstr "发震时刻" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:628 msgid "位於" msgstr "位于" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:684 msgid "各地震度" msgstr "各地震度" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:755 msgid "地震報告圖" msgstr "地震报告图" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:765 msgid "震度圖" msgstr "震度图" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:775 msgid "最大地動加速度圖" msgstr "峰值地震动加速度图" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:785 msgid "最大地動速度圖" msgstr "峰值最大地震动速度图" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "错误" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "已解决" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "影响:小" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "影响:中" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "影响:大" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "维护" -#: lib/route/announcement/announcement.dart:19 +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "测试" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "变更" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "完成" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "地震相关信息" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "气象相关信息" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "未知" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "目前没有通知" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "通知详情" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "请领导应用程序设定中找到并允许「相片和媒体」权限后在试一次。" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "再试一次" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "已存储图片" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "存储图片时发生错误" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0级" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1级" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2级" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3级" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4级" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5弱" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5强" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6弱" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6强" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7级" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "晴" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "晴天有霾" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "晴有霭" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "晴有闪电" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "晴天有雷" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "晴有雾" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "晴天有雨" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "晴天有雨夹雪" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "晴天有大雪" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "晴天有雪丸" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "晴天有冰丸" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "晴有阵雪" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "晴阵雨雪" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "晴天有冰雹" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "晴天有雷阵雨" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "晴天有雷雪" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "晴天有雷冰雹" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "晴天有强雷阵雨" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "晴天有强雷冰雹" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "局部多云" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "局部多云有霾" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "局部多云有薄雾" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "局部多云有闪电" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "局部多云有雷" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "局部多云有雾" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "局部多云有雨" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "局部多云有雨夹雪" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "局部多云有大雪" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "局部多云有雪丸" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "局部多云有冰丸" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "局部多云有阵雪" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "局部多云有阵雨夹雪" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "局部多云有冰雹" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "局部多云有雷阵雨" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "局部多云有雷雪" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "局部多云有雷冰雹" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "局部多云有强雷阵雨" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "局部多云有强雷冰雹" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "阴" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "晴有霾" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "晴有霭" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "阴天有闪电" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "晴天伴有雷" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "晴有雾" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "晴有雨" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "阴天有雨夹雪" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "阴天有雷雪" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "阴天有雪丸" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "阴天有冰丸" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "阴天有阵雪" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "阴天有阵雨夹雪" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "晴有雹" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "阴天有雷阵雨" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "阴天有雷雪" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "阴天有雷冰雹" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "阴天有强雷阵雨" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "阴天有强雷冰雹" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:80 msgid "{city}{cityLevel} {town}{townLevel}" -msgstr "" +msgstr "{city}{cityLevel} {town}{townLevel}" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:93 msgid "{city} {town}" -msgstr "" +msgstr "{city} {town}" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:102 msgid "{city}{cityLevel}" -msgstr "" +msgstr "{city}{cityLevel}" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:111 msgid "{town}{townLevel}" -msgstr "" - -#~ msgid "避難資訊" -#~ msgstr "避难信息" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "" -#~ "海啸警报发布时\n" -#~ "上述除外地区" - -#~ msgid "直轄市/縣市" -#~ msgstr "直辖市/县市" +msgstr "{town}{townLevel}" -#~ msgid "鄉鎮市區" -#~ msgstr "乡镇市区" From 8f3b987931d888e38832bd4dee68c115c7417d18 Mon Sep 17 00:00:00 2001 From: lowrt Date: Wed, 13 Aug 2025 23:41:41 +0800 Subject: [PATCH 32/59] Build: 3.0.5 --- android/app/build.gradle | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 6ebe2f450..faf685a97 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 35 - versionCode 300010200 + versionCode 300050000 versionName flutterVersionName multiDexEnabled true } diff --git a/pubspec.yaml b/pubspec.yaml index ec4261eda..9867229d8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: dpip description: "Disaster Prevention Information Platform" publish_to: 'none' -version: 3.0.200 +version: 3.0.5 environment: sdk: '>=3.7.0 <4.0.0' From 413deb153230c3fecd225fb1e99fee3820ccbf24 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 14 Aug 2025 08:54:27 +0800 Subject: [PATCH 33/59] i18n: layer sheet use shorter term (#382) * fix: update i18n zh-Hant * chore: use shorter terms --- .crowdin/strings.pot | 60 +- assets/translations/en.po | 276 ++++-- assets/translations/ja.po | 258 ++++-- assets/translations/ko.po | 249 ++++-- assets/translations/ru.po | 171 ++-- assets/translations/vi.po | 260 ++++-- assets/translations/zh-Hans.po | 233 +++-- assets/translations/zh-Hant.po | 885 ++++++++----------- lib/app/map/_widgets/layer_toggle_sheet.dart | 8 +- tools/update_translations.sh | 139 ++- 10 files changed, 1479 insertions(+), 1060 deletions(-) diff --git a/.crowdin/strings.pot b/.crowdin/strings.pot index 8c9ae0388..420434c55 100644 --- a/.crowdin/strings.pot +++ b/.crowdin/strings.pot @@ -30,7 +30,7 @@ msgstr "" msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "" @@ -50,7 +50,7 @@ msgstr "" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "" @@ -126,7 +126,7 @@ msgstr "" msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "" @@ -570,15 +570,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -598,7 +598,7 @@ msgstr "" msgid "風向/風速" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "" @@ -670,7 +670,7 @@ msgstr "" msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "" @@ -828,6 +828,14 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +msgid "報告" +msgstr "" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" @@ -928,59 +936,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "" @@ -1324,18 +1332,18 @@ msgstr "" msgid "陰大雷雹" msgstr "" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" \ No newline at end of file diff --git a/assets/translations/en.po b/assets/translations/en.po index 6cb0410a7..174fd68b2 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 10:04\n" +"Language-Team: English\n" +"Language: en_US\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: en\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: English\n" -"Language: en_US\n" -"PO-Revision-Date: 2025-08-13 10:04\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "Earthquake Early Warning" msgid "強震監視器" msgstr "Strong Earthquake Monitor" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "Earthquake Reports" @@ -64,7 +64,7 @@ msgstr "Weather Advisory" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "Tsunami information" @@ -121,8 +121,13 @@ msgid "發送公告時" msgstr "When sending an announcement" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"The sound test is a local notification performed on the device, used only to " +"confirm whether sound can be played properly when receiving alerts. This " +"test does not send any requests to any server" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -140,7 +145,7 @@ msgstr "Earthquake" msgid "天氣" msgstr "Weather" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "Tsunami" @@ -225,27 +230,36 @@ msgid "緊急地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 4" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Emergency Earthquake Early Warning (General)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 2" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Emergency Earthquake Early Warning (Silent)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1" +msgstr "" +"Maximum intensity is greater than 5- and local (City/Town/District) " +"estimated intensity is greater than 1" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" @@ -280,15 +294,19 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "The location (township) issues a red signal\n" +msgstr "" +"The location (township) issues a red signal\n" "Weather Warning" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "The location (township) where the above-mentioned exceptions are issued\n" +msgstr "" +"The location (township) where the above-mentioned exceptions are issued\n" "Weather Warning" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 @@ -352,10 +370,23 @@ msgid "正在載入商店物品中" msgstr "Loading store items" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "As an app dedicated to providing real-time earthquake information, DPIP currently has no advertising or other profit models. In order to maintain high-quality services, we need to bear the costs of server operation, seismic data acquisition and transmission, and subsequent function development and maintenance.\n\n" -"Every donation you make below will go directly toward these operating costs, helping DPIP to continue to provide you with services in a sustainable manner. Thank you for your understanding and generosity!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"As an app dedicated to providing real-time earthquake information, DPIP " +"currently has no advertising or other profit models. In order to maintain " +"high-quality services, we need to bear the costs of server operation, " +"seismic data acquisition and transmission, and subsequent function " +"development and maintenance.\n" +"\n" +"Every donation you make below will go directly toward these operating costs, " +"helping DPIP to continue to provide you with services in a sustainable " +"manner. Thank you for your understanding and generosity!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -471,7 +502,9 @@ msgstr "App Logs" #: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "All information should be considered authoritative only if it is consistent with CWA." +msgstr "" +"All information should be considered authoritative only if it is consistent " +"with CWA." #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" @@ -494,31 +527,45 @@ msgid "無法取得權限" msgstr "Unable to obtain permission" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -530,11 +577,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -554,8 +605,15 @@ msgid "定期更新目前的所在地" msgstr "Update your current location periodically" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "The automatic location update feature will use the GPS on your device to update your location based on your geographical position periodically, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions." +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"The automatic location update feature will use the GPS on your device to " +"update your location based on your geographical position periodically, " +"providing real-time weather and earthquake information, so you can stay up-" +"to-date with the latest local conditions." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -577,15 +635,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "Special Municipalities/County" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "Current Location" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -605,7 +663,7 @@ msgstr "Precipitation" msgid "風向/風速" msgstr "Wind/Gust" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "Simple" @@ -635,7 +693,8 @@ msgstr "" #: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "Excessively high the animation frame rate may cause lag or device overheating" +msgstr "" +"Excessively high the animation frame rate may cause lag or device overheating" #: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" @@ -670,14 +729,17 @@ msgid "確定" msgstr "Confirm" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "Severe thunderstorms or heavy rain are occurring near your area. Please take precautions. This will continue until {time}." +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"Severe thunderstorms or heavy rain are occurring near your area. Please take " +"precautions. This will continue until {time}." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "Out of service area. Available only in Taiwan" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "Not Set" @@ -694,11 +756,18 @@ msgid "第 {serial} 報" msgstr "{serial} report" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"At around {time}, a felt earthquake near {location} had an " +"estimated magnitude of M{magnitude} and a max intensity of " +"{intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -746,15 +815,22 @@ msgid "我們是誰?" msgstr "Who are we?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China." +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio is a group of mostly students, with an average age of under " +"20 and a headcount of 15+. Members are students from northern, central and " +"southern Taiwan, Japan, South Korea and China." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Our original intention" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:38 @@ -762,16 +838,26 @@ msgid "注意事項" msgstr "Precautions" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen." +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"Depending on the network status, server status, application status, upstream " +"data source status, etc., there is a possibility that information will not " +"be received. We will try our best to avoid such situations, but we cannot " +"guarantee that they will not happen." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "Strong shaking has a chance of reaching the user's location before the notification." +msgstr "" +"Strong shaking has a chance of reaching the user's location before the " +"notification." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution." +msgstr "" +"Earthquake early warning is the result of rapid calculation and may have " +"large errors. It should be understood and used with caution." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" @@ -782,20 +868,32 @@ msgid "歡迎使用 DPIP" msgstr "Welcome to DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application." +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP is an app designed by a local Taiwanese team that integrates " +"information from TREM-Net (Taiwan Real-time Earthquake Observation Network) " +"and data from the Central Weather Administration to provide an integrated, " +"single and convenient disaster prevention information application." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" -msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur" +msgstr "" +"Delivering real-time disaster prevention information via notifications when " +"major disasters occur" #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information" +msgstr "" +"Use location to automatically update location settings and provide local " +"real-time disaster prevention information" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information." +msgstr "" +"Allow DPIP to run continuously in the background for real-time disaster " +"notification information." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -803,7 +901,9 @@ msgstr "Save" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "Used to store data visualization images provided by the Central Meteorological Administration or ExpTech" +msgstr "" +"Used to store data visualization images provided by the Central " +"Meteorological Administration or ExpTech" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -811,7 +911,8 @@ msgstr "" #: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "Users are required to manually go to settings to enable relevant permissions." +msgstr "" +"Users are required to manually go to settings to enable relevant permissions." #: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" @@ -829,6 +930,15 @@ msgstr "Map Layers" msgid "選擇要顯示的地圖圖層" msgstr "Select the layer you want to display" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +#, fuzzy +msgid "報告" +msgstr "Announcements" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "Weather" @@ -919,7 +1029,8 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "Estimated M{magnitude}, max intensity {intensity}" +msgstr "" +"Estimated M{magnitude}, max intensity {intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" @@ -929,59 +1040,59 @@ msgstr "{countdown} Arrived in seconds" msgid "已抵達" msgstr "Arrived" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "Recent Earthquake Reports" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "More" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "No. {number} Significantly Felt Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "Local Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "Magnitude" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "Depth" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "Web" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "Event Time" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "Location" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "Observed Intensities" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "Earthquake Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "Max PGA Image" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "Max PGV Image" @@ -1043,7 +1154,9 @@ msgstr "Announcement Details" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "Please go to the app settings and allow the \"Photos and Media\" permissions and try again." +msgstr "" +"Please go to the app settings and allow the \"Photos and Media\" permissions " +"and try again." #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1325,19 +1438,18 @@ msgstr "Cloudy with heavy thunderstorm" msgid "陰大雷雹" msgstr "Heavy thunder and hail" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "{town} {townLevel}, {city} {cityLevel}" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "{city} {cityLevel}" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town} {townLevel}" - diff --git a/assets/translations/ja.po b/assets/translations/ja.po index ea84d23bb..4d79065d9 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 13:25\n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Japanese\n" -"Language: ja_JP\n" -"PO-Revision-Date: 2025-08-13 13:25\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "緊急地震速報" msgid "強震監視器" msgstr "強震モニター" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "地震情報" @@ -64,7 +64,7 @@ msgstr "天気警報" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "津波情報" @@ -121,8 +121,12 @@ msgid "發送公告時" msgstr "通知受信時" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイスが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイ" +"スが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -140,7 +144,7 @@ msgstr "地震" msgid "天氣" msgstr "天気" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "津波" @@ -225,9 +229,11 @@ msgid "緊急地震速報(重大)" msgstr "緊急地震速報(非常)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 4 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -235,9 +241,11 @@ msgid "緊急地震速報(一般)" msgstr "緊急地震速報(通常)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 2 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -245,9 +253,11 @@ msgid "緊急地震速報(無聲)" msgstr "緊急地震速報(音無し)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "最大震度 5 弱超え かつ\n" +msgstr "" +"最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 1 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -283,12 +293,14 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にレッドアラートの天気注意報/特報が発令され" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にその以外の天気注意報/特報が発令され" @@ -353,10 +365,22 @@ msgid "正在載入商店物品中" msgstr "ストアーの商品読み込み中" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今までに広告や他の収益方法などはございません。サービスの品質をより高く保たれるため、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発やメンテナンスなどのコストを負担しております。\n\n" -"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理解、ご厚意に感謝しています!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今まで" +"に広告や他の収益方法などはございません。サービスの品質をより高く保たれるた" +"め、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発や" +"メンテナンスなどのコストを負担しております。\n" +"\n" +"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用" +"しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理" +"解、ご厚意に感謝しています!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -372,7 +396,9 @@ msgstr "一回払い" #: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" -msgstr "{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しください。" +msgstr "" +"{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しくださ" +"い。" #: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" @@ -412,7 +438,8 @@ msgstr "DPIPの表示言語を調整する" #: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" -msgstr "DPIP で数値をディスプレイする時の\n" +msgstr "" +"DPIP で数値をディスプレイする時の\n" "が現れる単位を調整する" #: ./lib/app/settings/page.dart:75 @@ -496,31 +523,45 @@ msgid "無法取得權限" msgstr "権限を取得できませんでした" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -532,11 +573,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -556,8 +601,14 @@ msgid "定期更新目前的所在地" msgstr "定期的に現在地を更新する" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。" +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新" +"します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得しま" +"す。" #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -579,15 +630,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "県/市" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "現在地" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -607,7 +658,7 @@ msgstr "降水量" msgid "風向/風速" msgstr "風向・風速" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "線" @@ -672,14 +723,17 @@ msgid "確定" msgstr "確認" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。{time} まで続く見込みです。" +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。" +"{time} まで続く見込みです。" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "台湾以外ではご利用いただけません" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "未設定" @@ -696,12 +750,20 @@ msgid "第 {serial} 報" msgstr "第{serial}報" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" -msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" #: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" @@ -748,24 +810,37 @@ msgid "我們是誰?" msgstr "私たちについて?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体" +"です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "私たちの初心" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めることでした。その後、活動は学外に広がり、現在の形になりました。" +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めるこ" +"とでした。その後、活動は学外に広がり、現在の形になりました。" #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事項" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があります。努力を込めてそのような状況を避けておりながら、発生しませんことには確保かねます。" +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があ" +"ります。努力を込めてそのような状況を避けておりながら、発生しませんことには確" +"保かねます。" #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -773,19 +848,28 @@ msgstr "強い揺れが通知より早く到達する確率があります。" #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上謹慎にお使いください。" +msgstr "" +"地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上" +"謹慎にお使いください。" #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能でおりまして、規範を遵うことをお願いいたします。" +msgstr "" +"あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能" +"でおりまして、規範を遵うことをお願いいたします。" #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIPへようこそ" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報アプリケーションを提供しております。" +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観" +"測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報" +"アプリケーションを提供しております。" #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -797,7 +881,9 @@ msgstr "定位により自動的に現在地を更新し、当地である即時 #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を受けられることになります。" +msgstr "" +"バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を" +"受けられることになります。" #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -805,7 +891,9 @@ msgstr "保存" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用いることになります" +msgstr "" +"台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用" +"いることになります" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -821,7 +909,9 @@ msgstr "権限" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めております。" +msgstr "" +"私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めておりま" +"す。" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -831,6 +921,15 @@ msgstr "地図レイヤー" msgid "選擇要顯示的地圖圖層" msgstr "表示する地図のレイヤーを選択してください" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +#, fuzzy +msgid "報告" +msgstr "お知らせ" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "気象" @@ -931,59 +1030,59 @@ msgstr "到達まであと{countdown}秒" msgid "已抵達" msgstr "到達し" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "最近の地震情報" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "さらに表示" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "ID #{number} の顕著な地震" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "局地的地震" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "マグニチュード" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "震源の深さ" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "Webで見る" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "発震時刻" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "震源地" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "各地の震度" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "地震情報図" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "震度分布図" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "地動最大加速度" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "地動最大速度" @@ -1045,7 +1144,9 @@ msgstr "お知らせの詳細" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことをお願いします。" +msgstr "" +"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" +"お願いします。" #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1327,19 +1428,18 @@ msgstr "曇りのち雨、大雷あり" msgid "陰大雷雹" msgstr "曇りのち大雹、大雷あり" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "{city}{cityLevel} {town}{townLevel}" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "{city} {town}" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "{city}{cityLevel}" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town}{townLevel}" - diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 9cb649ca6..7beea6b2d 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 10:04\n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Korean\n" -"Language: ko_KR\n" -"PO-Revision-Date: 2025-08-13 10:04\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "긴급 지진 속보" msgid "強震監視器" msgstr "강진 모니터" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "지진 보고" @@ -64,7 +64,7 @@ msgstr "기상특보" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "해일 정보" @@ -121,8 +121,13 @@ msgid "發送公告時" msgstr "공지 발송 시" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트는 요청을 서버에 전송하지 않습니다" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 " +"음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트" +"는 요청을 서버에 전송하지 않습니다" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -140,7 +145,7 @@ msgstr "지진" msgid "天氣" msgstr "날씨" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "해일" @@ -225,7 +230,8 @@ msgid "緊急地震速報(重大)" msgstr "긴급 지진 속보(중대)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "​최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 4 이상" @@ -234,7 +240,8 @@ msgid "緊急地震速報(一般)" msgstr "긴급 지진 속보(일반)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 2 이상" @@ -243,7 +250,8 @@ msgid "緊急地震速報(無聲)" msgstr "긴급 지진 속보(무음)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 1 이상" @@ -280,12 +288,14 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 적색 기상 경보 특보를 발령" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 기상 경보를 발령" @@ -350,10 +360,21 @@ msgid "正在載入商店物品中" msgstr "스토어 상품 로드 중" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합니다.\n" -"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수" +"익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이" +"터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합" +"니다.\n" +"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용" +"되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입" +"니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -492,31 +513,45 @@ msgid "無法取得權限" msgstr "권한 획득 불가" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -528,11 +563,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -552,8 +591,15 @@ msgid "定期更新目前的所在地" msgstr "현재 위치 정기적으로 업데이트" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 수 있도록 합니다." +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때" +"도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통" +"해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 " +"수 있도록 합니다." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -575,15 +621,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "현/시" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "현재 위치" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -603,7 +649,7 @@ msgstr "강우" msgid "風向/風速" msgstr "풍향/풍속" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "선" @@ -633,7 +679,9 @@ msgstr "" #: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니다" +msgstr "" +"지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니" +"다" #: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" @@ -668,14 +716,17 @@ msgid "確定" msgstr "확인" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주의." +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주" +"의." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "서비스 지역 외에서는 사용할 수 없으며, 대만에서만 이용 가능합니다" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "설정되지 않음" @@ -692,11 +743,17 @@ msgid "第 {serial} 報" msgstr "제 {serial} 보" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " +"M{magnitude}, 현재 위치 최대 진도 {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -744,24 +801,38 @@ msgid "我們是誰?" msgstr "저희에 관하여?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 이루어져 있습니다." +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 " +"명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 " +"이루어져 있습니다." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "우리의 목표" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이" +"었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "주의 사항" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 " +"정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 " +"다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -769,19 +840,28 @@ msgstr "강한 흔들림이 알림보다 먼저 사용자 위치에 도착할 #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 신중하게 사용해야 합니다." +msgstr "" +"지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 " +"신중하게 사용해야 합니다." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정을 반드시 준수해 주십시오." +msgstr "" +"공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정" +"을 반드시 준수해 주십시오." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIP에 오신 것을 환영합니다" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀이 설계한 앱입니다." +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 " +"통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀" +"이 설계한 앱입니다." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -789,11 +869,15 @@ msgstr "중대 재해 발생 시 알림으로 즉각 재난 대비 정보를 전 #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다" +msgstr "" +"GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보" +"를 제공합니다" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니다." +msgstr "" +"실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니" +"다." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -801,7 +885,8 @@ msgstr "이미지 저장" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" +msgstr "" +"대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -817,7 +902,8 @@ msgstr "권한" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." +msgstr "" +"우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -827,6 +913,15 @@ msgstr "지도 레이어" msgid "選擇要顯示的地圖圖層" msgstr "표시 지도 레이더 선택" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +#, fuzzy +msgid "報告" +msgstr "공지" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "기상" @@ -917,7 +1012,8 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" +msgstr "" +"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" @@ -927,59 +1023,59 @@ msgstr "{countdown}초 후 도착" msgid "已抵達" msgstr "도착" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "최근 지진 현황" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "더 보기" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "번호 {number} 강한 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "소구역 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "지진 규모" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "진원 깊이" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "보고 페이지" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "지진 발생 시간" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "에 위치" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "각 지역 진도" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "지진 보고" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "진도" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "최대 지반 가속도" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "최대 지반 속도" @@ -1041,7 +1137,9 @@ msgstr "공지 내용" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주세요." +msgstr "" +"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" +"세요." #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1323,19 +1421,18 @@ msgstr "흐림・강한 뇌우" msgid "陰大雷雹" msgstr "흐림・강한 천둥/우박" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" - diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 66cc78ed1..61d2f0117 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -1,16 +1,18 @@ msgid "" msgstr "" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 10:04\n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 " +"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 " +"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Russian\n" -"Language: ru_RU\n" -"PO-Revision-Date: 2025-08-13 10:04\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +46,7 @@ msgstr "" msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "" @@ -64,7 +66,7 @@ msgstr "" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "" @@ -121,7 +123,9 @@ msgid "發送公告時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" msgstr "" #: ./lib/app/settings/notify/page.dart:134 @@ -140,7 +144,7 @@ msgstr "" msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "" @@ -225,7 +229,8 @@ msgid "緊急地震速報(重大)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "" @@ -234,7 +239,8 @@ msgid "緊急地震速報(一般)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "" @@ -243,7 +249,8 @@ msgid "緊急地震速報(無聲)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "" @@ -280,12 +287,14 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "" @@ -350,8 +359,13 @@ msgid "正在載入商店物品中" msgstr "" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" msgstr "" #: ./lib/app/settings/donate/page.dart:169 @@ -491,31 +505,45 @@ msgid "無法取得權限" msgstr "" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -527,11 +555,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -551,7 +583,10 @@ msgid "定期更新目前的所在地" msgstr "" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" msgstr "" #: ./lib/app/settings/location/page.dart:301 @@ -574,15 +609,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -602,7 +637,7 @@ msgstr "" msgid "風向/風速" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "" @@ -667,14 +702,15 @@ msgid "確定" msgstr "" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" msgstr "" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "" @@ -691,11 +727,15 @@ msgid "第 {serial} 報" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -743,7 +783,9 @@ msgid "我們是誰?" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:93 @@ -751,7 +793,9 @@ msgid "我們的初衷" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:38 @@ -759,7 +803,9 @@ msgid "注意事項" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:88 @@ -779,7 +825,9 @@ msgid "歡迎使用 DPIP" msgstr "" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" #: ./lib/app/welcome/4-permissions/page.dart:154 @@ -826,6 +874,14 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +msgid "報告" +msgstr "" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" @@ -926,59 +982,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "" @@ -1322,19 +1378,18 @@ msgstr "" msgid "陰大雷雹" msgstr "" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" - diff --git a/assets/translations/vi.po b/assets/translations/vi.po index bc77fc2d0..0aed16d3e 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 10:04\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: vi\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Vietnamese\n" -"Language: vi_VN\n" -"PO-Revision-Date: 2025-08-13 10:04\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "Cảnh báo động đất sớm" msgid "強震監視器" msgstr "giám sát động đất" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "Báo cáo động đất" @@ -64,7 +64,7 @@ msgstr "Cảnh báo thời tiết" msgid "防災資訊" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "Thông tin sóng thần" @@ -121,7 +121,9 @@ msgid "發送公告時" msgstr "Khi gửi thông báo" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" msgstr "" #: ./lib/app/settings/notify/page.dart:134 @@ -140,7 +142,7 @@ msgstr "" msgid "天氣" msgstr "" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "" @@ -225,9 +227,11 @@ msgid "緊急地震速報(重大)" msgstr "Cảnh báo động đất khẩn cấp (Lớn)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 4 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -235,9 +239,11 @@ msgid "緊急地震速報(一般)" msgstr "Cảnh báo động đất (Nhỏ)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 2 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -245,9 +251,11 @@ msgid "緊急地震速報(無聲)" msgstr "Cảnn báo động đất (Im Lặng)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "" +"Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 1 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -283,14 +291,20 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu đỏ" +msgstr "" +"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " +"tín hiệu đỏ" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu" +msgstr "" +"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " +"tín hiệu" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" @@ -353,8 +367,13 @@ msgid "正在載入商店物品中" msgstr "" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" msgstr "" #: ./lib/app/settings/donate/page.dart:169 @@ -439,7 +458,9 @@ msgstr "" #: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" -msgstr "Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ của chúng tôi" +msgstr "" +"Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ " +"của chúng tôi" #: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" @@ -471,7 +492,9 @@ msgstr "Nhật ký ứng dụng" #: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung ương (CWA) công bố." +msgstr "" +"Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung " +"ương (CWA) công bố." #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" @@ -494,31 +517,45 @@ msgid "無法取得權限" msgstr "" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -530,11 +567,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -554,8 +595,15 @@ msgid "定期更新目前的所在地" msgstr "Cập nhật vị trí hiện tại định kỳ" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới nhất tại địa phương." +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động " +"cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết " +"và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới " +"nhất tại địa phương." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -577,15 +625,15 @@ msgstr "" msgid "新增地點" msgstr "" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "Quận" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -605,7 +653,7 @@ msgstr "Lượng mưa" msgid "風向/風速" msgstr "Hướng gió/Tốc độ gió" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "" @@ -670,14 +718,19 @@ msgid "確定" msgstr "Xác nhận" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. Tình trạng này kéo dài đến {time}." +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. " +"Tình trạng này kéo dài đến {time}." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" -msgstr "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài Loan." +msgstr "" +"Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài " +"Loan." -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "Chưa đặt" @@ -694,11 +747,15 @@ msgid "第 {serial} 報" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -746,44 +803,72 @@ msgid "我們是誰?" msgstr "Chúng tôi là ai?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và Nam), Nhật Bản, Hàn Quốc và Trung Quốc." +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có " +"độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và " +"Nam), Nhật Bản, Hàn Quốc và Trung Quốc." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Chúng tôi đã bắt đầu với những gì" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra ngoài phạm vi trường học và trở thành nhóm như hiện nay." +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở " +"thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra " +"ngoài phạm vi trường học và trở thành nhóm như hiện nay." #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Những điều cần lưu ý" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, " +"trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin " +"có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như " +"vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." +msgstr "" +"Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do đó cần phải thận trọng và hiểu rõ." +msgstr "" +"Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do " +"đó cần phải thận trọng và hiểu rõ." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân thủ các quy định có liên quan." +msgstr "" +"Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi " +"phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân " +"thủ các quy định có liên quan." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Chào mừng đến với DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích " +"hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) " +"và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một " +"ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -791,11 +876,15 @@ msgstr "Dịch vụ được sử dụng để gửi thông báo cảnh báo thi #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại khu vực hiện tại" +msgstr "" +"Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại " +"khu vực hiện tại" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm họa ngay lập tức." +msgstr "" +"Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm " +"họa ngay lập tức." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -803,7 +892,9 @@ msgstr "Lưu trữ hình" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) hoặc ExpTech." +msgstr "" +"Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung " +"ương (CWA) hoặc ExpTech." #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -811,7 +902,8 @@ msgstr "Yêu cầu để xin phép" #: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." +msgstr "" +"Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." #: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" @@ -819,7 +911,9 @@ msgstr "Sự cho phép" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của họ." +msgstr "" +"Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của " +"họ." #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -829,6 +923,15 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +#, fuzzy +msgid "報告" +msgstr "Thông báo" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "" @@ -929,59 +1032,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "Thêm" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "Động đất nhẹ, cảm nhận được ở khu vực nhỏ" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "Cường độ" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "Độ sâu chấn tiêu" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "Trang báo cáo" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "Ngày giờ nhận biết động đất" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "nằm ở" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "Cường độ địa chấn tại các khu vực" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "Bản đồ báo cáo động đất" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "Bản đồ cường độ địa chấn" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "Bản đồ gia tốc mặt đất tối đa" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "Bản đồ vận tốc mặt đất tối đa" @@ -1325,19 +1428,18 @@ msgstr "" msgid "陰大雷雹" msgstr "" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" - diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index 29b690620..baa424a60 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -1,16 +1,16 @@ msgid "" msgstr "" +"Project-Id-Version: dpip\n" +"PO-Revision-Date: 2025-08-13 13:25\n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" -"Project-Id-Version: dpip\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Language-Team: Chinese Simplified\n" -"Language: zh_CN\n" -"PO-Revision-Date: 2025-08-13 13:25\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "紧急地震预警" msgid "強震監視器" msgstr "强震监视器" -#: ./lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "地震报告" @@ -64,7 +64,7 @@ msgstr "天气警特报" msgid "防災資訊" msgstr "防灾资讯" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "海啸信息" @@ -121,8 +121,12 @@ msgid "發送公告時" msgstr "发送公告时" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -msgstr "音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音效。此测试不会向服务器发送任何请求" +msgid "" +"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" +"效。此測試不會向伺服器發送任何請求" +msgstr "" +"音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音" +"效。此测试不会向服务器发送任何请求" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -140,7 +144,7 @@ msgstr "地震" msgid "天氣" msgstr "天气" -#: ./lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "海啸" @@ -225,9 +229,11 @@ msgid "緊急地震速報(重大)" msgstr "紧急地震预警(重大)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 4 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -235,9 +241,11 @@ msgid "緊急地震速報(一般)" msgstr "紧急地震预警(一般)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 2 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -245,9 +253,11 @@ msgid "緊急地震速報(無聲)" msgstr "紧急地震预警(无声)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "最大震度 5 弱以上 且\n" +msgid "" +"最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "最大震度 5 弱以上 且\n" +msgstr "" +"最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 1 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -283,15 +293,19 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "所在地(乡镇)发布防灾资讯时" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "所在地(鄉鎮)發布紅色燈號之\n" +msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "所在地(乡镇)发布红灯信号的\n" +msgstr "" +"所在地(乡镇)发布红灯信号的\n" "天气警特报" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "所在地(鄉鎮)發布上述除外燈號之\n" +msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "所在地(乡镇)发布上述除外灯信号的\n" +msgstr "" +"所在地(乡镇)发布上述除外灯信号的\n" "天气警特报" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 @@ -355,10 +369,20 @@ msgid "正在載入商店物品中" msgstr "正在加载商店商品中" #: ./lib/app/settings/donate/page.dart:161 -msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -msgstr "DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与维护的成本!\n\n" -"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定底,为您提供服务。感谢您的理解与慷慨!" +msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" +"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" +"維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" +"為您提供服務。感謝您的理解與慷慨!" +msgstr "" +"DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维" +"持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与" +"维护的成本!\n" +"\n" +"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定" +"底,为您提供服务。感谢您的理解与慷慨!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -497,31 +521,47 @@ msgid "無法取得權限" msgstr "无法取得权限" #: ./lib/app/settings/location/page.dart:85 -msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" +"到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" +"到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "" +"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "" +"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" +"中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" +"定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" -msgstr "为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所在地信息。" +msgid "" +"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" +"在地資訊。" +msgstr "" +"为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所" +"在地信息。" #: ./lib/app/settings/location/page.dart:93 -msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgid "" +"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" +"允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -533,11 +573,15 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" +"常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgid "" +"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" +"收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -557,8 +601,14 @@ msgid "定期更新目前的所在地" msgstr "定期更新当前位置" #: ./lib/app/settings/location/page.dart:242 -msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -msgstr "自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新动态。" +msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" +"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" +"狀況。" +msgstr "" +"自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您" +"的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新" +"动态。" #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -580,15 +630,15 @@ msgstr "" msgid "新增地點" msgstr "新增地点" -#: ./lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "县市" -#: ./lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "当前位置" -#: ./lib/app/settings/map/page.dart:47 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "" @@ -608,7 +658,7 @@ msgstr "降水" msgid "風向/風速" msgstr "风向/风速" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "线条" @@ -673,14 +723,17 @@ msgid "確定" msgstr "确定" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" +msgid "" +"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "" +"您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "服务区域外,仅在台湾各地可用" -#: ./lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "尚未设置" @@ -697,12 +750,20 @@ msgid "第 {serial} 報" msgstr "第 {serial} 报" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" +msgstr "" +"{time} 左右,{location}附近发生有感地震,预计规模 " +"M{magnitude}、所在地最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" -msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、深度{depth}公里。" +msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" +msgstr "" +"{time} 左右,{location}附近发生有感地震,预计规模 " +"M{magnitude}、深度{depth}公里。" #: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" @@ -749,24 +810,36 @@ msgid "我們是誰?" msgstr "我们是谁?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的团体。成员来自台湾北中南、日本、韩国、中国的学生。" +msgid "" +"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" +"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "" +"ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的" +"团体。成员来自台湾北中南、日本、韩国、中国的学生。" #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "我们的初衷" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -msgstr "成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形成现在的样子。" +msgid "" +"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" +"現在的樣子。" +msgstr "" +"成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形" +"成现在的样子。" #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事项" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可能性,我们会尽力避免此类情况,但不保证一定不会发生。" +msgid "" +"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" +"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "" +"根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可" +"能性,我们会尽力避免此类情况,但不保证一定不会发生。" #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -785,8 +858,12 @@ msgid "歡迎使用 DPIP" msgstr "欢迎使用 DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" +msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" +"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "" +"DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信" +"息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -832,6 +909,15 @@ msgstr "地图图层" msgid "選擇要顯示的地圖圖層" msgstr "选择要显示的地图图层" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +#, fuzzy +msgid "報告" +msgstr "公告" + #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "气象" @@ -932,59 +1018,59 @@ msgstr "{countdown}秒后抵达" msgid "已抵達" msgstr "已抵达" -#: ./lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "近期地震报告" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "更多" -#: ./lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "序号 {number} 显著有感地震" -#: ./lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "小区域有感地震" -#: ./lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "地震震级" -#: ./lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "震源深度" -#: ./lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "报告详情" -#: ./lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "发震时刻" -#: ./lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "位于" -#: ./lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "各地震度" -#: ./lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "地震报告图" -#: ./lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "震度图" -#: ./lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "峰值地震动加速度图" -#: ./lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "峰值最大地震动速度图" @@ -1328,19 +1414,18 @@ msgstr "阴天有强雷阵雨" msgid "陰大雷雹" msgstr "阴天有强雷冰雹" -#: ./lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "{city}{cityLevel} {town}{townLevel}" -#: ./lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "{city} {town}" -#: ./lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "{city}{cityLevel}" -#: ./lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town}{townLevel}" - diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index 15d3e8b55..2290a04f7 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -1,1479 +1,1362 @@ msgid "" msgstr "" - -#: lib/app/settings/location/page.dart:372 +"Project-Id-Version: dpip\n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: dpip\n" +"X-Crowdin-Project-ID: 696803\n" +"X-Crowdin-Language: zh-TW\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 20\n" + +#: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "所在地" -#: lib/app/settings/page.dart:52 +#: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "主題" -#: lib/app/settings/page.dart:60 +#: ./lib/app/settings/page.dart:60 msgid "語言" msgstr "語言" -#: lib/app/settings/page.dart:68 +#: ./lib/app/settings/page.dart:68 msgid "單位" msgstr "單位" -#: lib/app/settings/map/page.dart:65 +#: ./lib/app/settings/map/page.dart:65 msgid "地圖" msgstr "地圖" -#: lib/app/welcome/4-permissions/page.dart:153 +#: ./lib/app/welcome/4-permissions/page.dart:153 msgid "通知" msgstr "通知" -#: lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/map/_lib/managers/monitor.dart:1076 msgid "緊急地震速報" msgstr "緊急地震速報" -#: lib/app/map/_lib/managers/monitor.dart:784 +#: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" msgstr "強震監視器" -#: lib/app/map/_lib/managers/report.dart:800 +#: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" msgstr "地震報告" -#: lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" msgstr "震度速報" -#: lib/app/home/_widgets/thunderstorm_card.dart:59 +#: ./lib/app/home/_widgets/thunderstorm_card.dart:59 msgid "雷雨即時訊息" msgstr "雷雨即時訊息" -#: lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:222 msgid "天氣警特報" msgstr "天氣警特報" -#: lib/app/settings/notify/page.dart:235 -#, fuzzy +#: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" msgstr "防災資訊" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:144 +#: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" msgstr "海嘯資訊" -#: lib/route/announcement/announcement.dart:82 +#: ./lib/route/announcement/announcement.dart:82 msgid "公告" msgstr "公告" -#: lib/app/settings/page.dart:112 +#: ./lib/app/settings/page.dart:112 msgid "贊助我們" msgstr "贊助我們" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "設定" msgstr "設定" -#: lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:60 msgid "接收全部" msgstr "接收全部" -#: lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:59 msgid "關閉" msgstr "關閉" -#: lib/app/settings/notify/_widgets/eew_notify_section.dart:37 +#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:37 msgid "接收類別" msgstr "接收類別" -#: lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:44 msgid "所在地震度1以上" msgstr "所在地震度1以上" -#: lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:55 msgid "海嘯消息、海嘯警報" msgstr "海嘯消息、海嘯警報" -#: lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:54 msgid "只接收海嘯警報" msgstr "只接收海嘯警報" -#: lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:50 msgid "接收所在地" msgstr "接收所在地" -#: lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:37 msgid "所在地震度4以上" msgstr "所在地震度4以上" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31 msgid "音效測試" msgstr "音效測試" -#: lib/app/settings/notify/(5.basic)/announcement/page.dart:32 +#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32 msgid "發送公告時" msgstr "發送公告時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -#: lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" msgstr "請先設定所在地來使用通知功能" -#: lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:141 msgid "地震速報" msgstr "地震速報" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:128 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:128 msgid "地震" msgstr "地震" -#: lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:203 msgid "天氣" msgstr "天氣" -#: lib/app/settings/notify/page.dart:247 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:144 msgid "海嘯" msgstr "海嘯" -#: lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:265 msgid "其他" msgstr "其他" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:34 msgid "重大" msgstr "重大" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" msgstr "海嘯警報發布時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" msgstr "一般" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" msgstr "海嘯消息發布時" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" msgstr "太平洋海嘯消息(無聲通知)" -#: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 +#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息發布時" msgstr "太平洋海嘯消息發布時" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" msgstr "強震監視器(一般)" -#: lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 +#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" msgstr "偵測到晃動" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "震度速報(一般)" msgstr "震度速報(一般)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:33 msgid "所在地(鄉鎮)實測震度 3 以上" msgstr "所在地(鄉鎮)實測震度 3 以上" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:35 msgid "震度速報(無聲通知)" msgstr "震度速報(無聲通知)" -#: lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 +#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36 msgid "所在地(鄉鎮)實測震度 1 以上" msgstr "所在地(鄉鎮)實測震度 1 以上" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "地震報告(一般)" msgstr "地震報告(一般)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:33 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:33 msgid "所在地(縣市)實測震度 3 以上" msgstr "所在地(縣市)實測震度 3 以上" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "地震報告(無聲通知)" msgstr "地震報告(無聲通知)" -#: lib/app/settings/notify/(2.earthquake)/report/page.dart:34 +#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:34 msgid "所在地(縣市)實測震度 1 以上" msgstr "所在地(縣市)實測震度 1 以上" -#: lib/app/settings/notify/_lib/utils.dart:13 +#: ./lib/app/settings/notify/_lib/utils.dart:13 msgid "已更新通知設定" msgstr "已更新通知設定" -#: lib/app/settings/notify/_lib/utils.dart:17 +#: ./lib/app/settings/notify/_lib/utils.dart:17 msgid "更新通知設定失敗" msgstr "更新通知設定失敗" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:34 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:34 msgid "緊急地震速報(重大)" msgstr "緊急地震速報(重大)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:35 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 msgid "" -"最大震度 5 弱以上 且\n" -"所在地(鄉鎮)預估震度 4 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:39 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "緊急地震速報(一般)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:40 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 msgid "" -"最大震度 5 弱以上 且\n" -"所在地(鄉鎮)預估震度 2 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:44 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "緊急地震速報(無聲)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:45 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 msgid "" -"最大震度 5 弱以上 且\n" -"所在地(鄉鎮)預估震度 1 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" msgstr "地震速報(重大)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:48 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "所在地(鄉鎮)預估震度 4 以上" msgstr "所在地(鄉鎮)預估震度 4 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "地震速報(一般)" msgstr "地震速報(一般)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:49 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:49 msgid "所在地(鄉鎮)預估震度 2 以上" msgstr "所在地(鄉鎮)預估震度 2 以上" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "地震速報(無聲)" msgstr "地震速報(無聲)" -#: lib/app/settings/notify/(1.eew)/eew/page.dart:50 +#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:50 msgid "所在地(鄉鎮)預估震度 1 以上" msgstr "所在地(鄉鎮)預估震度 1 以上" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:33 msgid "所在地(鄉鎮)發布防災警訊時" msgstr "所在地(鄉鎮)發布防災警訊時" -#: lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:34 msgid "所在地(鄉鎮)發布防災資訊時" msgstr "所在地(鄉鎮)發布防災資訊時" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:35 +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" -"天氣警特報" msgstr "" "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -#: lib/app/settings/notify/(3.weather)/advisory/page.dart:40 +#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" -"天氣警特報" msgstr "" "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" msgstr "所在地(鄉鎮)發布山區暴雨時" -#: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 -#, fuzzy +#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" msgstr "所在地(鄉鎮)發布雷雨即時訊息時" -#: lib/app/settings/unit/page.dart:28 +#: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" msgstr "使用華氏度" -#: lib/app/settings/unit/page.dart:29 +#: ./lib/app/settings/unit/page.dart:29 msgid "切換溫度顯示單位為華氏度 (℉)" msgstr "切換溫度顯示單位為華氏度 (℉)" -#: lib/app/settings/locale/page.dart:31 +#: ./lib/app/settings/locale/page.dart:31 msgid "顯示語言" msgstr "顯示語言" -#: lib/app/settings/locale/page.dart:32 +#: ./lib/app/settings/locale/page.dart:32 msgid "系統語言" msgstr "系統語言" -#: lib/app/settings/locale/page.dart:40 +#: ./lib/app/settings/locale/page.dart:40 msgid "協助翻譯" msgstr "協助翻譯" -#: lib/app/settings/locale/page.dart:41 +#: ./lib/app/settings/locale/page.dart:41 msgid "點擊這裡來幫助我們改進 DPIP 的翻譯" msgstr "點擊這裡來幫助我們改進 DPIP 的翻譯" -#: lib/app/settings/locale/select/page.dart:46 +#: ./lib/app/settings/locale/select/page.dart:46 msgid "選擇語言" msgstr "選擇語言" -#: lib/app/settings/locale/select/page.dart:67 +#: ./lib/app/settings/locale/select/page.dart:67 msgid "已翻譯 {translated}・已校對 {approved}" msgstr "已翻譯 {translated}・已校對 {approved}" -#: lib/app/settings/locale/select/page.dart:95 +#: ./lib/app/settings/locale/select/page.dart:95 msgid "來源語言" msgstr "來源語言" -#: lib/app/settings/donate/page.dart:46 +#: ./lib/app/settings/donate/page.dart:46 msgid "無法連線至商店,請稍後再試" msgstr "無法連線至商店,請稍後再試" -#: lib/app/settings/donate/page.dart:52 +#: ./lib/app/settings/donate/page.dart:52 msgid "找不到商品,請稍候再試" msgstr "找不到商品,請稍候再試" -#: lib/app/settings/donate/page.dart:134 +#: ./lib/app/settings/donate/page.dart:134 msgid "重新載入" msgstr "重新載入" -#: lib/app/settings/donate/page.dart:144 +#: ./lib/app/settings/donate/page.dart:144 msgid "正在載入商店物品中" msgstr "正在載入商店物品中" -#: lib/app/settings/donate/page.dart:161 +#: ./lib/app/settings/donate/page.dart:161 msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" msgstr "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" +"DPIP 作為一款致力於提供即時地震資訊的 " +"App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n" "\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" -#: lib/app/settings/donate/page.dart:169 +#: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" msgstr "訂閱制" -#: lib/app/settings/donate/page.dart:196 +#: ./lib/app/settings/donate/page.dart:196 msgid "{price}/月" msgstr "{price}/月" -#: lib/app/settings/donate/page.dart:220 +#: ./lib/app/settings/donate/page.dart:220 msgid "單次支援" msgstr "單次支援" -#: lib/app/settings/donate/page.dart:284 -#, fuzzy +#: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" msgstr "無法連線至 {store},請稍後再試。" -#: lib/app/settings/donate/page.dart:290 +#: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" msgstr "正在恢復您購買的訂閱" -#: lib/app/settings/donate/page.dart:292 +#: ./lib/app/settings/donate/page.dart:292 msgid "恢復購買" msgstr "恢復購買" -#: lib/app/settings/donate/page.dart:299 +#: ./lib/app/settings/donate/page.dart:299 msgid "使用條款" msgstr "使用條款" -#: lib/app/settings/donate/page.dart:306 +#: ./lib/app/settings/donate/page.dart:306 msgid "隱私權政策" msgstr "隱私權政策" -#: lib/app/welcome/4-permissions/page.dart:161 +#: ./lib/app/welcome/4-permissions/page.dart:161 msgid "位置" msgstr "位置" -#: lib/app/settings/page.dart:39 +#: ./lib/app/settings/page.dart:39 msgid "設定你的所在地來接收當地的即時資訊" msgstr "設定你的所在地來接收當地的即時資訊" -#: lib/app/settings/page.dart:48 +#: ./lib/app/settings/page.dart:48 msgid "介面" msgstr "介面" -#: lib/app/settings/page.dart:53 +#: ./lib/app/settings/page.dart:53 msgid "調整 DPIP 整體的外觀與顏色" msgstr "調整 DPIP 整體的外觀與顏色" -#: lib/app/settings/page.dart:61 +#: ./lib/app/settings/page.dart:61 msgid "調整 DPIP 的顯示語言" msgstr "調整 DPIP 的顯示語言" -#: lib/app/settings/page.dart:69 +#: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" msgstr "調整 DPIP 顯示數值時使用的單位" -#: lib/app/settings/page.dart:75 +#: ./lib/app/settings/page.dart:75 msgid "調整 DPIP 地圖的設定" msgstr "調整 DPIP 地圖的設定" -#: lib/app/settings/page.dart:87 +#: ./lib/app/settings/page.dart:87 msgid "推播通知設定與通知音效測試" msgstr "推播通知設定與通知音效測試" -#: lib/app/settings/page.dart:94 +#: ./lib/app/settings/page.dart:94 msgid "資訊" msgstr "資訊" -#: lib/app/settings/page.dart:99 +#: ./lib/app/settings/page.dart:99 msgid "掌握 ExpTech Studio 的最新公告與資訊" msgstr "掌握 ExpTech Studio 的最新公告與資訊" -#: lib/app/changelog/page.dart:54 +#: ./lib/app/changelog/page.dart:54 msgid "更新日誌" msgstr "更新日誌" -#: lib/app/settings/page.dart:106 +#: ./lib/app/settings/page.dart:106 msgid "瀏覽 DPIP 的歷次更新紀錄" msgstr "瀏覽 DPIP 的歷次更新紀錄" -#: lib/app/settings/page.dart:113 +#: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" msgstr "幫助我們維護伺服器的穩定和長久發展" -#: lib/app/settings/page.dart:119 +#: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" msgstr "第三方套件授權" -#: lib/app/settings/page.dart:120 +#: ./lib/app/settings/page.dart:120 msgid "DPIP 的實現歸功於開放源始碼" msgstr "DPIP 的實現歸功於開放源始碼" -#: lib/app/settings/page.dart:162 +#: ./lib/app/settings/page.dart:162 msgid "除錯" msgstr "除錯" -#: lib/app/settings/page.dart:166 +#: ./lib/app/settings/page.dart:166 msgid "應用程式版本" msgstr "應用程式版本" -#: lib/app/settings/page.dart:172 +#: ./lib/app/settings/page.dart:172 msgid "裝置資訊" msgstr "裝置資訊" -#: lib/app/settings/page.dart:178 +#: ./lib/app/settings/page.dart:178 msgid "複製通知 Token" msgstr "複製通知 Token" -#: lib/app/debug/logs/page.dart:16 +#: ./lib/app/debug/logs/page.dart:16 msgid "App 日誌" msgstr "App 日誌" -#: lib/app/welcome/3-notice/page.dart:58 +#: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" msgstr "任何資訊應以中央氣象署發布之內容為準。" -#: lib/app/settings/location/page.dart:76 -#, fuzzy +#: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" msgstr "無法取得通知權限" -#: lib/app/settings/location/page.dart:78 -#, fuzzy +#: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" msgstr "無法取得位置權限" -#: lib/app/settings/location/page.dart:79 -#, fuzzy +#: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" msgstr "無法取得自啟動權限" -#: lib/app/welcome/4-permissions/page.dart:167 +#: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" msgstr "省電策略" -#: lib/route/image_viewer/image_viewer.dart:57 +#: ./lib/route/image_viewer/image_viewer.dart:57 msgid "無法取得權限" msgstr "無法取得權限" -#: lib/app/settings/location/page.dart:85 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" -msgstr "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:85 +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgstr "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" -#: lib/app/settings/location/page.dart:86 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" -msgstr "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +#: ./lib/app/settings/location/page.dart:86 +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" +msgstr "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" -#: lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" -msgstr "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +#: ./lib/app/settings/location/page.dart:89 +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" +msgstr "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" -#: lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" -msgstr "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +#: ./lib/app/settings/location/page.dart:90 +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" +msgstr "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" -#: lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" -msgstr "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +#: ./lib/app/settings/location/page.dart:91 +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" -#: lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" -msgstr "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +#: ./lib/app/settings/location/page.dart:92 +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" -#: lib/app/settings/location/page.dart:93 -#, fuzzy -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" -msgstr "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +#: ./lib/app/settings/location/page.dart:93 +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" +msgstr "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" -#: lib/route/image_viewer/image_viewer.dart:64 +#: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" msgstr "取消" -#: lib/app/settings/location/page.dart:163 +#: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" msgstr "自動啟動" -#: lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" -msgstr "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:164 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgstr "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" -#: lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" -msgstr "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +#: ./lib/app/settings/location/page.dart:186 +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" +msgstr "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "一律允許" msgstr "一律允許" -#: lib/app/settings/location/page.dart:220 +#: ./lib/app/settings/location/page.dart:220 msgid "永遠" msgstr "永遠" -#: lib/app/settings/location/page.dart:231 +#: ./lib/app/settings/location/page.dart:231 msgid "自動更新" msgstr "自動更新" -#: lib/app/settings/location/page.dart:232 +#: ./lib/app/settings/location/page.dart:232 msgid "定期更新目前的所在地" msgstr "定期更新目前的所在地" -#: lib/app/settings/location/page.dart:242 +#: ./lib/app/settings/location/page.dart:242 msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" msgstr "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP " +"關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" -#: lib/app/settings/location/page.dart:301 +#: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" msgstr "通知功能已被拒絕,請移至設定允許權限。" -#: lib/app/settings/location/page.dart:326 +#: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" msgstr "自啟動權限已被拒絕,請移至設定允許權限。" -#: lib/app/settings/location/page.dart:352 +#: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" msgstr "省電策略已被拒絕,請移至設定允許權限。" -#: lib/app/settings/location/page.dart:413 +#: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "設定所在地時發生錯誤,請稍候再試一次。" -#: lib/app/settings/location/page.dart:421 +#: ./lib/app/settings/location/page.dart:421 msgid "新增地點" msgstr "新增地點" -#: lib/app/settings/location/select/page.dart:26 +#: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "縣市" -#: lib/app/settings/location/select/page.dart:38 +#: ./lib/app/settings/location/select/page.dart:49 msgid "目前所在地" msgstr "目前所在地" -#: lib/app/settings/map/page.dart:47 -#, fuzzy +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" msgstr "監視器" -#: lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" msgstr "雷達回波" -#: lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:371 msgid "氣溫" msgstr "氣溫" -#: lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:457 msgid "降水" msgstr "降水" -#: lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:264 msgid "風向/風速" msgstr "風向/風速" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:112 +#: ./lib/app/settings/map/page.dart:56 msgid "線條" msgstr "線條" -#: lib/app/settings/map/page.dart:57 +#: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" msgstr "OpenStreetMap" -#: lib/app/settings/map/page.dart:58 +#: ./lib/app/settings/map/page.dart:58 msgid "Google" msgstr "Google" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:106 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" msgstr "底圖" -#: lib/app/settings/map/page.dart:84 +#: ./lib/app/settings/map/page.dart:84 msgid "初始圖層" msgstr "初始圖層" -#: lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:106 msgid "動畫幀率" msgstr "動畫幀率" -#: lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "影響強震監視器的震波模擬動畫流暢度" -#: lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "過高的動畫幀率可能會造成卡頓或設備發熱" -#: lib/app/settings/theme/page.dart:30 +#: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" msgstr "主題模式" -#: lib/app/settings/theme/select/page.dart:57 +#: ./lib/app/settings/theme/select/page.dart:57 msgid "淺色" msgstr "淺色" -#: lib/app/settings/theme/select/page.dart:58 +#: ./lib/app/settings/theme/select/page.dart:58 msgid "深色" msgstr "深色" -#: lib/app/settings/theme/select/page.dart:55 +#: ./lib/app/settings/theme/select/page.dart:55 msgid "跟隨系統主題" msgstr "跟隨系統主題" -#: lib/app/settings/theme/select/page.dart:22 +#: ./lib/app/settings/theme/select/page.dart:22 msgid "主題色" msgstr "主題色" -#: lib/app/settings/theme/page.dart:46 +#: ./lib/app/settings/theme/page.dart:46 msgid "系統色彩" msgstr "系統色彩" -#: lib/app/settings/theme/page.dart:88 +#: ./lib/app/settings/theme/page.dart:88 msgid "使用系統顏色" msgstr "使用系統顏色" -#: lib/route/image_viewer/image_viewer.dart:130 +#: ./lib/route/image_viewer/image_viewer.dart:130 msgid "確定" msgstr "確定" -#: lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +#: ./lib/app/home/_widgets/thunderstorm_card.dart:76 +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -#: lib/app/home/_widgets/location_out_of_service.dart:24 +#: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" msgstr "服務區域外,僅在臺灣各地可用" -#: lib/app/home/_widgets/location_button.dart:23 +#: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" msgstr "尚未設定" -#: lib/app/home/_widgets/weather_header.dart:127 +#: ./lib/app/home/_widgets/weather_header.dart:127 msgid "體感約 {apparent}°" msgstr "體感約 {apparent}°" -#: lib/app/home/_widgets/location_not_set_card.dart:30 +#: ./lib/app/home/_widgets/location_not_set_card.dart:30 msgid "尚未設定所在地" msgstr "尚未設定所在地" -#: lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" msgstr "第 {serial} 報" -#: lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1100 msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" -#: lib/app/map/_lib/managers/monitor.dart:926 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:926 msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、深度{depth}公里。" -#: lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" msgstr "所在地預估" -#: lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" msgstr "震波" -#: lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" msgstr " 秒" -#: lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1204 msgid "抵達" msgstr "抵達" -#: lib/app/home/page.dart:56 +#: ./lib/app/home/page.dart:56 msgid "已更新至 {version}" msgstr "已更新至 {version}" -#: lib/utils/weather_icon.dart:282 +#: ./lib/utils/weather_icon.dart:282 msgid "取得天氣異常" msgstr "取得天氣異常" -#: lib/app/changelog/page.dart:109 +#: ./lib/app/changelog/page.dart:109 msgid "無法載入更新日誌,請稍後再試。" msgstr "無法載入更新日誌,請稍後再試。" -#: lib/app/changelog/page.dart:113 +#: ./lib/app/changelog/page.dart:113 msgid "重試" msgstr "重試" -#: lib/app/welcome/4-permissions/page.dart:364 +#: ./lib/app/welcome/4-permissions/page.dart:364 msgid "下一步" msgstr "下一步" -#: lib/app/welcome/1-about/page.dart:60 +#: ./lib/app/welcome/1-about/page.dart:60 msgid "防災資訊平台" msgstr "防災資訊平台" -#: lib/app/welcome/2-exptech/page.dart:83 +#: ./lib/app/welcome/2-exptech/page.dart:83 msgid "我們是誰?" msgstr "我們是誰?" -#: lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +#: ./lib/app/welcome/2-exptech/page.dart:88 +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" -#: lib/app/welcome/2-exptech/page.dart:93 +#: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "我們的初衷" -#: lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" +#: ./lib/app/welcome/2-exptech/page.dart:98 +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" -#: lib/app/welcome/3-notice/page.dart:38 +#: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事項" -#: lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +#: ./lib/app/welcome/3-notice/page.dart:75 +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" -#: lib/app/welcome/3-notice/page.dart:88 +#: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" msgstr "強烈搖晃有機率比通知早抵達使用者所在地。" -#: lib/app/welcome/3-notice/page.dart:99 +#: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" msgstr "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -#: lib/app/welcome/3-notice/page.dart:110 +#: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" msgstr "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -#: lib/app/welcome/1-about/page.dart:40 +#: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "歡迎使用 DPIP" -#: lib/app/welcome/1-about/page.dart:81 +#: ./lib/app/welcome/1-about/page.dart:81 msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) " +"之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -#: lib/app/welcome/4-permissions/page.dart:154 +#: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" msgstr "在重大災害發生時以通知來傳遞即時防災資訊" -#: lib/app/welcome/4-permissions/page.dart:162 +#: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" msgstr "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -#: lib/app/welcome/4-permissions/page.dart:168 +#: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" msgstr "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -#: lib/route/image_viewer/image_viewer.dart:228 +#: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" msgstr "儲存" -#: lib/app/welcome/4-permissions/page.dart:175 +#: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" msgstr "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -#: lib/app/welcome/4-permissions/page.dart:342 +#: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" msgstr "權限請求" -#: lib/app/welcome/4-permissions/page.dart:343 +#: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" msgstr "需要使用者手動到設定開啟相關權限。" -#: lib/app/welcome/4-permissions/page.dart:383 +#: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" msgstr "權限" -#: lib/app/welcome/4-permissions/page.dart:396 +#: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" msgstr "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:99 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" msgstr "地圖圖層" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:100 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:100 msgid "選擇要顯示的地圖圖層" msgstr "選擇要顯示的地圖圖層" -#: lib/app/map/_widgets/layer_toggle_sheet.dart:150 +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "簡單" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 +msgid "報告" +msgstr "報告" + +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" msgstr "氣象" -#: lib/app/map/_widgets/map_legend.dart:181 +#: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" msgstr "單位:{unit}" -#: lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:609 msgid "長按設定播放起點" msgstr "長按設定播放起點" -#: lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:623 msgid "目前時間" msgstr "目前時間" -#: lib/app/map/_lib/managers/radar.dart:628 -#, fuzzy +#: ./lib/app/map/_lib/managers/radar.dart:628 msgid "播放起點" msgstr "播放起點" -#: lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:935 msgid "播放進度" msgstr "播放進度" -#: lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:315 msgid "今日" msgstr "今日" -#: lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:316 msgid "10 分鐘" msgstr "10 分鐘" -#: lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:317 msgid "1 小時" msgstr "1 小時" -#: lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:318 msgid "3 小時" msgstr "3 小時" -#: lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:319 msgid "6 小時" msgstr "6 小時" -#: lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:320 msgid "12 小時" msgstr "12 小時" -#: lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:321 msgid "24 小時" msgstr "24 小時" -#: lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:322 msgid "2 天" msgstr "2 天" -#: lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:323 msgid "3 天" msgstr "3 天" -#: lib/app/map/_lib/managers/monitor.dart:239 +#: ./lib/app/map/_lib/managers/monitor.dart:239 msgid "海外測站" msgstr "海外測站" -#: lib/app/map/_lib/managers/monitor.dart:261 +#: ./lib/app/map/_lib/managers/monitor.dart:261 msgid "即時震度:" msgstr "即時震度:" -#: lib/app/map/_lib/managers/monitor.dart:267 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:267 msgid "地動加速度:" msgstr "地動加速度:" -#: lib/app/map/_lib/managers/monitor.dart:274 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:274 msgid "地動速度:" msgstr "地動速度:" -#: lib/app/map/_lib/managers/monitor.dart:279 +#: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" msgstr "無資料" -#: lib/app/map/_lib/managers/monitor.dart:792 +#: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" msgstr "目前沒有生效中的地震速報" -#: lib/app/map/_lib/managers/monitor.dart:865 -#, fuzzy +#: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" msgstr "規模 M{magnitude},深度{depth}公里" -#: lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "規模 M{magnitude},所在地預估{intensity}" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" msgstr "{countdown}秒後抵達" -#: lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "已抵達" msgstr "已抵達" -#: lib/app/map/_lib/managers/report.dart:357 +#: ./lib/app/map/_lib/managers/report.dart:362 msgid "近期的地震報告" msgstr "近期的地震報告" -#: lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:367 msgid "更多" msgstr "更多" -#: lib/app/map/_lib/managers/report.dart:578 +#: ./lib/app/map/_lib/managers/report.dart:592 msgid "編號 {number} 顯著有感地震" msgstr "編號 {number} 顯著有感地震" -#: lib/app/map/_lib/managers/report.dart:579 +#: ./lib/app/map/_lib/managers/report.dart:593 msgid "小區域有感地震" msgstr "小區域有感地震" -#: lib/app/map/_lib/managers/report.dart:638 +#: ./lib/app/map/_lib/managers/report.dart:649 msgid "地震規模" msgstr "地震規模" -#: lib/app/map/_lib/managers/report.dart:660 +#: ./lib/app/map/_lib/managers/report.dart:671 msgid "震源深度" msgstr "震源深度" -#: lib/app/map/_lib/managers/report.dart:597 +#: ./lib/app/map/_lib/managers/report.dart:608 msgid "報告頁面" msgstr "報告頁面" -#: lib/app/map/_lib/managers/report.dart:621 +#: ./lib/app/map/_lib/managers/report.dart:632 msgid "發震時間" msgstr "發震時間" -#: lib/app/map/_lib/managers/report.dart:628 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "位於" msgstr "位於" -#: lib/app/map/_lib/managers/report.dart:684 +#: ./lib/app/map/_lib/managers/report.dart:695 msgid "各地震度" msgstr "各地震度" -#: lib/app/map/_lib/managers/report.dart:755 +#: ./lib/app/map/_lib/managers/report.dart:766 msgid "地震報告圖" msgstr "地震報告圖" -#: lib/app/map/_lib/managers/report.dart:765 +#: ./lib/app/map/_lib/managers/report.dart:776 msgid "震度圖" msgstr "震度圖" -#: lib/app/map/_lib/managers/report.dart:775 +#: ./lib/app/map/_lib/managers/report.dart:786 msgid "最大地動加速度圖" msgstr "最大地動加速度圖" -#: lib/app/map/_lib/managers/report.dart:785 +#: ./lib/app/map/_lib/managers/report.dart:796 msgid "最大地動速度圖" msgstr "最大地動速度圖" -#: lib/route/announcement/announcement.dart:12 +#: ./lib/route/announcement/announcement.dart:12 msgid "錯誤" msgstr "錯誤" -#: lib/route/announcement/announcement.dart:13 +#: ./lib/route/announcement/announcement.dart:13 msgid "已解決" msgstr "已解決" -#: lib/route/announcement/announcement.dart:14 +#: ./lib/route/announcement/announcement.dart:14 msgid "影響:小" msgstr "影響:小" -#: lib/route/announcement/announcement.dart:15 +#: ./lib/route/announcement/announcement.dart:15 msgid "影響:中" msgstr "影響:中" -#: lib/route/announcement/announcement.dart:16 +#: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" msgstr "影響:大" -#: lib/route/announcement/announcement.dart:18 +#: ./lib/route/announcement/announcement.dart:18 msgid "維修" msgstr "維修" -#: lib/route/announcement/announcement.dart:19 -#, fuzzy +#: ./lib/route/announcement/announcement.dart:19 msgid "測試" msgstr "測試" -#: lib/route/announcement/announcement.dart:20 +#: ./lib/route/announcement/announcement.dart:20 msgid "變更" msgstr "變更" -#: lib/route/announcement/announcement.dart:21 +#: ./lib/route/announcement/announcement.dart:21 msgid "完成" msgstr "完成" -#: lib/route/announcement/announcement.dart:22 +#: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" msgstr "地震相關" -#: lib/route/announcement/announcement.dart:23 +#: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" msgstr "氣象相關" -#: lib/route/announcement/announcement.dart:29 +#: ./lib/route/announcement/announcement.dart:29 msgid "未知" msgstr "未知" -#: lib/route/announcement/announcement.dart:103 +#: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" msgstr "目前沒有公告" -#: lib/route/announcement/announcement.dart:223 +#: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" msgstr "公告詳情" -#: lib/route/image_viewer/image_viewer.dart:59 +#: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" msgstr "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -#: lib/route/image_viewer/image_viewer.dart:70 +#: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" msgstr "再試一次" -#: lib/route/image_viewer/image_viewer.dart:110 +#: ./lib/route/image_viewer/image_viewer.dart:110 msgid "已儲存圖片" msgstr "已儲存圖片" -#: lib/route/image_viewer/image_viewer.dart:126 +#: ./lib/route/image_viewer/image_viewer.dart:126 msgid "儲存圖片時發生錯誤" msgstr "儲存圖片時發生錯誤" -#: lib/utils/extensions/int.dart:13 +#: ./lib/utils/extensions/int.dart:13 msgid "0級" msgstr "0級" -#: lib/utils/extensions/int.dart:14 +#: ./lib/utils/extensions/int.dart:14 msgid "1級" msgstr "1級" -#: lib/utils/extensions/int.dart:15 +#: ./lib/utils/extensions/int.dart:15 msgid "2級" msgstr "2級" -#: lib/utils/extensions/int.dart:16 +#: ./lib/utils/extensions/int.dart:16 msgid "3級" msgstr "3級" -#: lib/utils/extensions/int.dart:17 +#: ./lib/utils/extensions/int.dart:17 msgid "4級" msgstr "4級" -#: lib/utils/extensions/int.dart:18 +#: ./lib/utils/extensions/int.dart:18 msgid "5弱" msgstr "5弱" -#: lib/utils/extensions/int.dart:19 +#: ./lib/utils/extensions/int.dart:19 msgid "5強" msgstr "5強" -#: lib/utils/extensions/int.dart:20 +#: ./lib/utils/extensions/int.dart:20 msgid "6弱" msgstr "6弱" -#: lib/utils/extensions/int.dart:21 +#: ./lib/utils/extensions/int.dart:21 msgid "6強" msgstr "6強" -#: lib/utils/extensions/int.dart:22 +#: ./lib/utils/extensions/int.dart:22 msgid "7級" msgstr "7級" -#: lib/utils/weather_icon.dart:283 +#: ./lib/utils/weather_icon.dart:283 msgid "晴" msgstr "晴" -#: lib/utils/weather_icon.dart:284 +#: ./lib/utils/weather_icon.dart:284 msgid "晴有霾" msgstr "晴有霾" -#: lib/utils/weather_icon.dart:285 +#: ./lib/utils/weather_icon.dart:285 msgid "晴有靄" msgstr "晴有靄" -#: lib/utils/weather_icon.dart:286 +#: ./lib/utils/weather_icon.dart:286 msgid "晴有閃電" msgstr "晴有閃電" -#: lib/utils/weather_icon.dart:302 +#: ./lib/utils/weather_icon.dart:302 msgid "晴天伴有雷" msgstr "晴天伴有雷" -#: lib/utils/weather_icon.dart:288 +#: ./lib/utils/weather_icon.dart:288 msgid "晴有霧" msgstr "晴有霧" -#: lib/utils/weather_icon.dart:289 +#: ./lib/utils/weather_icon.dart:289 msgid "晴有雨" msgstr "晴有雨" -#: lib/utils/weather_icon.dart:290 +#: ./lib/utils/weather_icon.dart:290 msgid "晴有雨雪" msgstr "晴有雨雪" -#: lib/utils/weather_icon.dart:291 +#: ./lib/utils/weather_icon.dart:291 msgid "晴有大雪" msgstr "晴有大雪" -#: lib/utils/weather_icon.dart:292 +#: ./lib/utils/weather_icon.dart:292 msgid "晴有雪珠" msgstr "晴有雪珠" -#: lib/utils/weather_icon.dart:293 +#: ./lib/utils/weather_icon.dart:293 msgid "晴有冰珠" msgstr "晴有冰珠" -#: lib/utils/weather_icon.dart:294 +#: ./lib/utils/weather_icon.dart:294 msgid "晴有陣雪" msgstr "晴有陣雪" -#: lib/utils/weather_icon.dart:295 +#: ./lib/utils/weather_icon.dart:295 msgid "晴陣雨雪" msgstr "晴陣雨雪" -#: lib/utils/weather_icon.dart:296 +#: ./lib/utils/weather_icon.dart:296 msgid "晴有雹" msgstr "晴有雹" -#: lib/utils/weather_icon.dart:297 +#: ./lib/utils/weather_icon.dart:297 msgid "晴有雷雨" msgstr "晴有雷雨" -#: lib/utils/weather_icon.dart:298 +#: ./lib/utils/weather_icon.dart:298 msgid "晴有雷雪" msgstr "晴有雷雪" -#: lib/utils/weather_icon.dart:299 +#: ./lib/utils/weather_icon.dart:299 msgid "晴有雷雹" msgstr "晴有雷雹" -#: lib/utils/weather_icon.dart:300 +#: ./lib/utils/weather_icon.dart:300 msgid "晴大雷雨" msgstr "晴大雷雨" -#: lib/utils/weather_icon.dart:301 +#: ./lib/utils/weather_icon.dart:301 msgid "晴大雷雹" msgstr "晴大雷雹" -#: lib/utils/weather_icon.dart:303 +#: ./lib/utils/weather_icon.dart:303 msgid "多雲" msgstr "多雲" -#: lib/utils/weather_icon.dart:304 +#: ./lib/utils/weather_icon.dart:304 msgid "多雲有霾" msgstr "多雲有霾" -#: lib/utils/weather_icon.dart:305 +#: ./lib/utils/weather_icon.dart:305 msgid "多雲有靄" msgstr "多雲有靄" -#: lib/utils/weather_icon.dart:306 +#: ./lib/utils/weather_icon.dart:306 msgid "多雲有閃電" msgstr "多雲有閃電" -#: lib/utils/weather_icon.dart:322 +#: ./lib/utils/weather_icon.dart:322 msgid "多雲伴有雷" msgstr "多雲伴有雷" -#: lib/utils/weather_icon.dart:308 +#: ./lib/utils/weather_icon.dart:308 msgid "多雲有霧" msgstr "多雲有霧" -#: lib/utils/weather_icon.dart:309 +#: ./lib/utils/weather_icon.dart:309 msgid "多雲有雨" msgstr "多雲有雨" -#: lib/utils/weather_icon.dart:310 +#: ./lib/utils/weather_icon.dart:310 msgid "多雲有雨雪" msgstr "多雲有雨雪" -#: lib/utils/weather_icon.dart:311 +#: ./lib/utils/weather_icon.dart:311 msgid "多雲有大雪" msgstr "多雲有大雪" -#: lib/utils/weather_icon.dart:312 +#: ./lib/utils/weather_icon.dart:312 msgid "多雲有雪珠" msgstr "多雲有雪珠" -#: lib/utils/weather_icon.dart:313 +#: ./lib/utils/weather_icon.dart:313 msgid "多雲有冰珠" msgstr "多雲有冰珠" -#: lib/utils/weather_icon.dart:314 +#: ./lib/utils/weather_icon.dart:314 msgid "多雲有陣雪" msgstr "多雲有陣雪" -#: lib/utils/weather_icon.dart:315 +#: ./lib/utils/weather_icon.dart:315 msgid "多雲陣雨雪" msgstr "多雲陣雨雪" -#: lib/utils/weather_icon.dart:316 +#: ./lib/utils/weather_icon.dart:316 msgid "多雲有雹" msgstr "多雲有雹" -#: lib/utils/weather_icon.dart:317 +#: ./lib/utils/weather_icon.dart:317 msgid "多雲有雷雨" msgstr "多雲有雷雨" -#: lib/utils/weather_icon.dart:318 +#: ./lib/utils/weather_icon.dart:318 msgid "多雲有雷雪" msgstr "多雲有雷雪" -#: lib/utils/weather_icon.dart:319 +#: ./lib/utils/weather_icon.dart:319 msgid "多雲有雷雹" msgstr "多雲有雷雹" -#: lib/utils/weather_icon.dart:320 +#: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" msgstr "多雲大雷雨" -#: lib/utils/weather_icon.dart:321 +#: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" msgstr "多雲大雷雹" -#: lib/utils/weather_icon.dart:323 +#: ./lib/utils/weather_icon.dart:323 msgid "陰" msgstr "陰" -#: lib/utils/weather_icon.dart:324 +#: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" msgstr "陰有霾" -#: lib/utils/weather_icon.dart:325 +#: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" msgstr "陰有靄" -#: lib/utils/weather_icon.dart:326 +#: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" msgstr "陰有閃電" -#: lib/utils/weather_icon.dart:342 +#: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" msgstr "陰天伴有雷" -#: lib/utils/weather_icon.dart:328 +#: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" msgstr "陰有霧" -#: lib/utils/weather_icon.dart:329 +#: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" msgstr "陰有雨" -#: lib/utils/weather_icon.dart:330 +#: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" msgstr "陰有雨雪" -#: lib/utils/weather_icon.dart:331 +#: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" msgstr "陰有大雪" -#: lib/utils/weather_icon.dart:332 +#: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" msgstr "陰有雪珠" -#: lib/utils/weather_icon.dart:333 +#: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" msgstr "陰有冰珠" -#: lib/utils/weather_icon.dart:334 +#: ./lib/utils/weather_icon.dart:334 msgid "陰有陣雪" msgstr "陰有陣雪" -#: lib/utils/weather_icon.dart:335 +#: ./lib/utils/weather_icon.dart:335 msgid "陰陣雨雪" msgstr "陰陣雨雪" -#: lib/utils/weather_icon.dart:336 +#: ./lib/utils/weather_icon.dart:336 msgid "陰有雹" msgstr "陰有雹" -#: lib/utils/weather_icon.dart:337 +#: ./lib/utils/weather_icon.dart:337 msgid "陰有雷雨" msgstr "陰有雷雨" -#: lib/utils/weather_icon.dart:338 +#: ./lib/utils/weather_icon.dart:338 msgid "陰有雷雪" msgstr "陰有雷雪" -#: lib/utils/weather_icon.dart:339 +#: ./lib/utils/weather_icon.dart:339 msgid "陰有雷雹" msgstr "陰有雷雹" -#: lib/utils/weather_icon.dart:340 +#: ./lib/utils/weather_icon.dart:340 msgid "陰大雷雨" msgstr "陰大雷雨" -#: lib/utils/weather_icon.dart:341 +#: ./lib/utils/weather_icon.dart:341 msgid "陰大雷雹" msgstr "陰大雷雹" -#: lib/api/model/location/location.dart:80 +#: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" msgstr "{city}{cityLevel} {town}{townLevel}" -#: lib/api/model/location/location.dart:93 +#: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" msgstr "{city} {town}" -#: lib/api/model/location/location.dart:102 +#: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" msgstr "{city}{cityLevel}" -#: lib/api/model/location/location.dart:111 +#: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town}{townLevel}" - -#~ msgid "避難資訊" -#~ msgstr "避難資訊" - -#~ msgid "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" -#~ msgstr "" -#~ "海嘯警報發布時\n" -#~ "上述除外地區" - -#~ msgid "直轄市/縣市" -#~ msgstr "直轄市/縣市" - -#~ msgid "鄉鎮市區" -#~ msgstr "鄉鎮市區" - -#, fuzzy -#~ msgid "同步通知設定" -#~ msgstr "同步通知設定" - -#~ msgid "" -#~ "感謝您的支持!❤️\n" -#~ "您所支付的款項將用於伺服器維護用途。若您有任何問題,歡迎於付款前與我們聯" -#~ "繫。" -#~ msgstr "" -#~ "感謝您的支持!❤️\n" -#~ "您所支付的款項將用於伺服器維護用途。若您有任何問題,歡迎於付款前與我們聯" -#~ "繫。" - -#~ msgid "地震類與氣象類圖層互斥" -#~ msgstr "地震類與氣象類圖層互斥" diff --git a/lib/app/map/_widgets/layer_toggle_sheet.dart b/lib/app/map/_widgets/layer_toggle_sheet.dart index eb6fae021..f659a4afd 100644 --- a/lib/app/map/_widgets/layer_toggle_sheet.dart +++ b/lib/app/map/_widgets/layer_toggle_sheet.dart @@ -109,7 +109,7 @@ class _LayerToggleSheetState extends State { runSpacing: 8, children: [ LayerToggle( - label: '線條'.i18n, + label: '簡單'.i18n, checked: _currentBaseMap == BaseMapType.exptech, onChanged: (_) => _setBaseMap(BaseMapType.exptech), ), @@ -131,17 +131,17 @@ class _LayerToggleSheetState extends State { runSpacing: 8, children: [ LayerToggle( - label: '強震監視器'.i18n, + label: '監視器'.i18n, checked: _activeLayers.contains(MapLayer.monitor), onChanged: (checked) => _toggleLayer(MapLayer.monitor, checked), ), LayerToggle( - label: '地震報告'.i18n, + label: '報告'.i18n, checked: _activeLayers.contains(MapLayer.report), onChanged: (checked) => _toggleLayer(MapLayer.report, checked), ), LayerToggle( - label: '海嘯資訊'.i18n, + label: '海嘯'.i18n, checked: _activeLayers.contains(MapLayer.tsunami), onChanged: null, // (checked) => _toggleLayer(MapLayer.tsunami, checked), ), diff --git a/tools/update_translations.sh b/tools/update_translations.sh index 943fd6162..4412f02d7 100755 --- a/tools/update_translations.sh +++ b/tools/update_translations.sh @@ -40,92 +40,69 @@ PO_DIR="./assets/translations" POT_FILE="./.crowdin/strings.pot" # 執行 i18n 擴充功能匯入器 -echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot${RESET}" -dart run i18n_extension_importer:getstrings --output-file ./assets/translations/strings.pot +echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./.crowdin/strings.pot${RESET}" +dart run i18n_extension_importer:getstrings --output-file ./.crowdin/strings.pot echo -# 更新每個 .po 檔案 +# 更新每個 .po 檔案(跳過 zh-Hant.po) for po_file in "$PO_DIR"/*.po; do - if [ -f "$po_file" ]; then + if [ -f "$po_file" ] && [ "$(basename "$po_file")" != "zh-Hant.po" ]; then echo -e -n "${BLUE}更新 $(basename "$po_file") ${RESET}" - msgmerge --update --backup=off "$po_file" "$POT_FILE" + LC_ALL=C msgmerge --update --backup=off "$po_file" "$POT_FILE" fi done -# 更新 zh-Hant.po +# 確保所有 .po 檔案中的路徑都有 ./ 前綴 +echo -e "${BLUE}統一路徑格式...${RESET}" +for po_file in "$PO_DIR"/*.po; do + if [ -f "$po_file" ] && [ "$(basename "$po_file")" != "zh-Hant.po" ]; then + # 為路徑添加 ./ 前綴(如果還沒有的話) + LC_ALL=C sed -i '' 's|^#: \([^.]\)|#: ./\1|g' "$po_file" + fi +done + +# 重新產生 zh-Hant.po(使用固定標頭並直接從 .pot 檔案複製內容) ZH_HANT_PO="$PO_DIR/zh-Hant.po" -if [ -f "$ZH_HANT_PO" ]; then - echo -e "${BLUE}自動填入 zh-Hant.po 的 msgstr...${RESET}" - awk ' - BEGIN { - in_msgid = 0 - in_msgstr = 0 - msgid_content = "" - msgstr_buffer = "" - collecting_msgid = 0 - collecting_msgstr = 0 - } - - # 開始新的 msgid - /^msgid / { - # 處理前一個完整的 msgid/msgstr 對 - if (in_msgid && in_msgstr) { - print "msgid " msgid_content - print "msgstr " msgid_content - } - - # 開始新的 msgid - in_msgid = 1 - in_msgstr = 0 - msgid_content = substr($0, 7) # 提取 msgid 後面的內容 - msgstr_buffer = "" - collecting_msgid = 1 - collecting_msgstr = 0 - next - } - - # 開始 msgstr - /^msgstr / { - collecting_msgid = 0 - collecting_msgstr = 1 - in_msgstr = 1 - msgstr_buffer = $0 - next - } - - # 收集 msgid 或 msgstr 的內容行 - /^"/ { - if (collecting_msgid) { - msgid_content = msgid_content "\n" $0 - } else if (collecting_msgstr) { - msgstr_buffer = msgstr_buffer "\n" $0 - } - next - } - - # 其他行(註解、空行等) - { - if (in_msgid && in_msgstr) { - print "msgid " msgid_content - print "msgstr " msgid_content - } - - # 重置狀態 - in_msgid = 0 - in_msgstr = 0 - msgid_content = "" - msgstr_buffer = "" - collecting_msgid = 0 - collecting_msgstr = 0 - print - } - - END { - # 處理最後一個 msgid/msgstr 對 - if (in_msgid && in_msgstr) { - print "msgid " msgid_content - print "msgstr " msgid_content - } - } - ' "$ZH_HANT_PO" > "$ZH_HANT_PO.tmp" && mv "$ZH_HANT_PO.tmp" "$ZH_HANT_PO" -fi +echo -e "${BLUE}重新產生 zh-Hant.po...${RESET}" + +# 創建帶有固定標頭的新檔案 +cat > "$ZH_HANT_PO" << 'EOF' +msgid "" +msgstr "" +"Project-Id-Version: dpip\n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: dpip\n" +"X-Crowdin-Project-ID: 696803\n" +"X-Crowdin-Language: zh-TW\n" +"X-Crowdin-File: /main/.crowdin/strings.pot\n" +"X-Crowdin-File-ID: 20\n" + +EOF + +# 直接從 .pot 檔案複製內容並將 msgstr 設為 msgid 的內容 +LC_ALL=C sed 's/^msgstr ""/msgstr/' "$POT_FILE" | LC_ALL=C awk ' +/^#/ { print; next } +/^msgid / { + msgid_line = $0 + msgid_content = substr($0, 7) + print msgid_line + # 輸出對應的 msgstr(複製 msgid 的內容) + print "msgstr " msgid_content + next +} +/^msgstr/ { next } # 跳過原有的空 msgstr 行 +/^$/ { print; next } # 保留空行 +{ print } # 輸出其他所有行 +' >> "$ZH_HANT_PO" + +# 最後確保所有 .po 檔案(包括 zh-Hant.po)的路徑格式一致 +echo -e "${BLUE}統一所有檔案的路徑格式...${RESET}" +for po_file in "$PO_DIR"/*.po; do + if [ -f "$po_file" ]; then + # 為路徑添加 ./ 前綴(如果還沒有的話) + LC_ALL=C sed -i '' 's|^#: \([^.]\)|#: ./\1|g' "$po_file" + fi +done From 5fb682255c292ff9c7badc5388e0fd320ae747b9 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 14 Aug 2025 09:10:42 +0800 Subject: [PATCH 34/59] New Crowdin updates (#383) * New translations strings.pot (Japanese) * New translations strings.pot (Korean) * New translations strings.pot (Russian) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (English) * New translations strings.pot (Vietnamese) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) --- assets/translations/en.po | 232 +++++------------- assets/translations/ja.po | 204 +++++---------- assets/translations/ko.po | 195 ++++----------- assets/translations/location_names.csv | 84 +++---- assets/translations/ru.po | 111 +++------ assets/translations/vi.po | 202 ++++----------- assets/translations/weather_station_names.csv | 78 +++--- assets/translations/zh-Hans.po | 181 ++++---------- 8 files changed, 392 insertions(+), 895 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index 174fd68b2..e6b80dc8f 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 10:04\n" -"Language-Team: English\n" -"Language: en_US\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: en\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: English\n" +"Language: en_US\n" +"PO-Revision-Date: 2025-08-14 01:07\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -42,11 +42,11 @@ msgstr "Earthquake Early Warning" #: ./lib/app/map/_lib/managers/monitor.dart:784 msgid "強震監視器" -msgstr "Strong Earthquake Monitor" +msgstr "Earthquake Monitor" #: ./lib/app/map/_lib/managers/report.dart:811 msgid "地震報告" -msgstr "Earthquake Reports" +msgstr "Reports" #: ./lib/app/settings/notify/page.dart:191 msgid "震度速報" @@ -121,13 +121,8 @@ msgid "發送公告時" msgstr "When sending an announcement" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"The sound test is a local notification performed on the device, used only to " -"confirm whether sound can be played properly when receiving alerts. This " -"test does not send any requests to any server" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -179,7 +174,7 @@ msgstr "When the Pacific information is issued" #: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "強震監視器(一般)" -msgstr "Strong Earthquake Monitor(General)" +msgstr "Earthquake Monitor (General)" #: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:32 msgid "偵測到晃動" @@ -230,36 +225,27 @@ msgid "緊急地震速報(重大)" msgstr "Earthquake Early Warning (Critical)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 4" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 msgid "緊急地震速報(一般)" msgstr "Emergency Earthquake Early Warning (General)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 2" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 msgid "緊急地震速報(無聲)" msgstr "Emergency Earthquake Early Warning (Silent)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"Maximum intensity is greater than 5- and local (City/Town/District) " -"estimated intensity is greater than 1" +msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 msgid "地震速報(重大)" @@ -294,19 +280,15 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"The location (township) issues a red signal\n" +msgstr "The location (township) issues a red signal\n" "Weather Warning" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"The location (township) where the above-mentioned exceptions are issued\n" +msgstr "The location (township) where the above-mentioned exceptions are issued\n" "Weather Warning" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 @@ -370,23 +352,10 @@ msgid "正在載入商店物品中" msgstr "Loading store items" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"As an app dedicated to providing real-time earthquake information, DPIP " -"currently has no advertising or other profit models. In order to maintain " -"high-quality services, we need to bear the costs of server operation, " -"seismic data acquisition and transmission, and subsequent function " -"development and maintenance.\n" -"\n" -"Every donation you make below will go directly toward these operating costs, " -"helping DPIP to continue to provide you with services in a sustainable " -"manner. Thank you for your understanding and generosity!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "As an app dedicated to providing real-time earthquake information, DPIP currently has no advertising or other profit models. In order to maintain high-quality services, we need to bear the costs of server operation, seismic data acquisition and transmission, and subsequent function development and maintenance.\n\n" +"Every donation you make below will go directly toward these operating costs, helping DPIP to continue to provide you with services in a sustainable manner. Thank you for your understanding and generosity!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -502,9 +471,7 @@ msgstr "App Logs" #: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "" -"All information should be considered authoritative only if it is consistent " -"with CWA." +msgstr "All information should be considered authoritative only if it is consistent with CWA." #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" @@ -527,45 +494,31 @@ msgid "無法取得權限" msgstr "Unable to obtain permission" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -577,15 +530,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -605,15 +554,8 @@ msgid "定期更新目前的所在地" msgstr "Update your current location periodically" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"The automatic location update feature will use the GPS on your device to " -"update your location based on your geographical position periodically, " -"providing real-time weather and earthquake information, so you can stay up-" -"to-date with the latest local conditions." +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "The automatic location update feature will use the GPS on your device to update your location based on your geographical position periodically, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -633,7 +575,7 @@ msgstr "" #: ./lib/app/settings/location/page.dart:421 msgid "新增地點" -msgstr "" +msgstr "Add a new location" #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" @@ -645,7 +587,7 @@ msgstr "Current Location" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" -msgstr "" +msgstr "Monitor" #: ./lib/app/map/_lib/managers/radar.dart:495 msgid "雷達回波" @@ -689,12 +631,11 @@ msgstr "Animation frame rate" #: ./lib/app/settings/map/page.dart:110 msgid "影響強震監視器的震波模擬動畫流暢度" -msgstr "" +msgstr "Affects the smoothness of the seismic wave simulation in the Earthquake Monitor." #: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "" -"Excessively high the animation frame rate may cause lag or device overheating" +msgstr "Excessively high the animation frame rate may cause lag or device overheating" #: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" @@ -729,11 +670,8 @@ msgid "確定" msgstr "Confirm" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"Severe thunderstorms or heavy rain are occurring near your area. Please take " -"precautions. This will continue until {time}." +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "Severe thunderstorms or heavy rain are occurring near your area. Please take precautions. This will continue until {time}." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" @@ -756,18 +694,11 @@ msgid "第 {serial} 報" msgstr "{serial} report" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"At around {time}, a felt earthquake near {location} had an " -"estimated magnitude of M{magnitude} and a max intensity of " -"{intensity}." +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -815,22 +746,15 @@ msgid "我們是誰?" msgstr "Who are we?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio is a group of mostly students, with an average age of under " -"20 and a headcount of 15+. Members are students from northern, central and " -"southern Taiwan, Japan, South Korea and China." +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Our original intention" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:38 @@ -838,26 +762,16 @@ msgid "注意事項" msgstr "Precautions" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"Depending on the network status, server status, application status, upstream " -"data source status, etc., there is a possibility that information will not " -"be received. We will try our best to avoid such situations, but we cannot " -"guarantee that they will not happen." +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "" -"Strong shaking has a chance of reaching the user's location before the " -"notification." +msgstr "Strong shaking has a chance of reaching the user's location before the notification." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"Earthquake early warning is the result of rapid calculation and may have " -"large errors. It should be understood and used with caution." +msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" @@ -868,32 +782,20 @@ msgid "歡迎使用 DPIP" msgstr "Welcome to DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP is an app designed by a local Taiwanese team that integrates " -"information from TREM-Net (Taiwan Real-time Earthquake Observation Network) " -"and data from the Central Weather Administration to provide an integrated, " -"single and convenient disaster prevention information application." +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" -msgstr "" -"Delivering real-time disaster prevention information via notifications when " -"major disasters occur" +msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur" #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"Use location to automatically update location settings and provide local " -"real-time disaster prevention information" +msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"Allow DPIP to run continuously in the background for real-time disaster " -"notification information." +msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -901,9 +803,7 @@ msgstr "Save" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"Used to store data visualization images provided by the Central " -"Meteorological Administration or ExpTech" +msgstr "Used to store data visualization images provided by the Central Meteorological Administration or ExpTech" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -911,8 +811,7 @@ msgstr "" #: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "" -"Users are required to manually go to settings to enable relevant permissions." +msgstr "Users are required to manually go to settings to enable relevant permissions." #: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" @@ -935,9 +834,8 @@ msgid "簡單" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 -#, fuzzy msgid "報告" -msgstr "Announcements" +msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -1021,7 +919,7 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" -msgstr "There are currently no earthquake warnings in effect" +msgstr "There are currently no active earthquake early warnings" #: ./lib/app/map/_lib/managers/monitor.dart:865 msgid "規模 M{magnitude},深度{depth}公里" @@ -1029,8 +927,7 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" -"Estimated M{magnitude}, max intensity {intensity}" +msgstr "Estimated M{magnitude}, max intensity {intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" @@ -1154,9 +1051,7 @@ msgstr "Announcement Details" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"Please go to the app settings and allow the \"Photos and Media\" permissions " -"and try again." +msgstr "Please go to the app settings and allow the \"Photos and Media\" permissions and try again." #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1453,3 +1348,4 @@ msgstr "{city} {cityLevel}" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town} {townLevel}" + diff --git a/assets/translations/ja.po b/assets/translations/ja.po index 4d79065d9..f011ae7f1 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 13:25\n" -"Language-Team: Japanese\n" -"Language: ja_JP\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" +"PO-Revision-Date: 2025-08-14 00:59\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -62,7 +62,7 @@ msgstr "天気警報" #: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "" +msgstr "防災インフォメーション" #: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" @@ -121,12 +121,8 @@ msgid "發送公告時" msgstr "通知受信時" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイ" -"スが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイスが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -158,7 +154,7 @@ msgstr "重大" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "" +msgstr "津波警報発令中" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" @@ -229,11 +225,9 @@ msgid "緊急地震速報(重大)" msgstr "緊急地震速報(非常)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 4 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -241,11 +235,9 @@ msgid "緊急地震速報(一般)" msgstr "緊急地震速報(通常)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 2 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -253,11 +245,9 @@ msgid "緊急地震速報(無聲)" msgstr "緊急地震速報(音無し)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"最大震度 5 弱超え かつ\n" +msgstr "最大震度 5 弱超え かつ\n" "現在地(郷/鎮)測りにより震度 1 超え" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -293,14 +283,12 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にレッドアラートの天気注意報/特報が発令され" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "現在地(郷/鎮)にその以外の天気注意報/特報が発令され" @@ -365,22 +353,10 @@ msgid "正在載入商店物品中" msgstr "ストアーの商品読み込み中" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今まで" -"に広告や他の収益方法などはございません。サービスの品質をより高く保たれるた" -"め、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発や" -"メンテナンスなどのコストを負担しております。\n" -"\n" -"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用" -"しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理" -"解、ご厚意に感謝しています!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP はリアルタイムで地震情報の提供に努めているアプリケーションとして、今までに広告や他の収益方法などはございません。サービスの品質をより高く保たれるため、サーバーの運行、地震データの取り込みや伝送、またはより豊富な機能の開発やメンテナンスなどのコストを負担しております。\n\n" +"貴台がお選びになるサポートプランは全て以上の運営コストの一部のお支払いに活用しておりまして、DPIP をより穏やかなサービスができることを支えております。ご理解、ご厚意に感謝しています!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -396,9 +372,7 @@ msgstr "一回払い" #: ./lib/app/settings/donate/page.dart:284 msgid "無法連線至 {store},請稍後再試。" -msgstr "" -"{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しくださ" -"い。" +msgstr "{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しください。" #: ./lib/app/settings/donate/page.dart:290 msgid "正在恢復您購買的訂閱" @@ -438,8 +412,7 @@ msgstr "DPIPの表示言語を調整する" #: ./lib/app/settings/page.dart:69 msgid "調整 DPIP 顯示數值時使用的單位" -msgstr "" -"DPIP で数値をディスプレイする時の\n" +msgstr "DPIP で数値をディスプレイする時の\n" "が現れる単位を調整する" #: ./lib/app/settings/page.dart:75 @@ -523,45 +496,31 @@ msgid "無法取得權限" msgstr "権限を取得できませんでした" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -573,15 +532,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -601,14 +556,8 @@ msgid "定期更新目前的所在地" msgstr "定期的に現在地を更新する" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新" -"します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得しま" -"す。" +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。" #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -723,11 +672,8 @@ msgid "確定" msgstr "確認" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。" -"{time} まで続く見込みです。" +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "お住まいの地域付近で激しい雷雨または降雨が発生しています。ご注意ください。{time} まで続く見込みです。" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" @@ -750,20 +696,12 @@ msgid "第 {serial} 報" msgstr "第{serial}報" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" -msgstr "" -"{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" #: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" @@ -810,37 +748,24 @@ msgid "我們是誰?" msgstr "私たちについて?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体" -"です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio は殆ど学生で構成され、平均年齢 20 歳未満で人数 15 人超えた団体です。台湾北中南部、日本、韓国と中国の学生たちの組み合いです。" #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "私たちの初心" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めるこ" -"とでした。その後、活動は学外に広がり、現在の形になりました。" +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "設立のきっかけは、コンピュータやテクノロジーに興味と能力を持つ仲間を集めることでした。その後、活動は学外に広がり、現在の形になりました。" #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事項" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があ" -"ります。努力を込めてそのような状況を避けておりながら、発生しませんことには確" -"保かねます。" +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "回線、サーバー、アプリや上游データ来源の都合により情報を受けかねる可能性があります。努力を込めてそのような状況を避けておりながら、発生しませんことには確保かねます。" #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -848,28 +773,19 @@ msgstr "強い揺れが通知より早く到達する確率があります。" #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上" -"謹慎にお使いください。" +msgstr "地震速報の情報は速算で得たことで、巨大な誤差も可能です。その前提が理解する上謹慎にお使いください。" #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能" -"でおりまして、規範を遵うことをお願いいたします。" +msgstr "あらゆる公式により認可されておりません挙動は法律的な責任を持たれることが可能でおりまして、規範を遵うことをお願いいたします。" #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIPへようこそ" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観" -"測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報" -"アプリケーションを提供しております。" +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP は台湾本土のグループが作ったアプリケーションで、TREM-Net(台湾即時地震観測ネット)と台湾中央気象局のデータを整合して、より整合、単一で便利な防災情報アプリケーションを提供しております。" #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -881,9 +797,7 @@ msgstr "定位により自動的に現在地を更新し、当地である即時 #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を" -"受けられることになります。" +msgstr "バックグラウンドでも DPIP の運行ができることを同意し、より即時な通知や情報を受けられることになります。" #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -891,9 +805,7 @@ msgstr "保存" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用" -"いることになります" +msgstr "台湾中央気象署またはExpTechから提供されたデータ可視化画像をセーブすることに用いることになります" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -909,9 +821,7 @@ msgstr "権限" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めておりま" -"す。" +msgstr "私たちはユーザーの側に立ち、休むことなくユーザーのプライバシーに努めております。" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -926,9 +836,8 @@ msgid "簡單" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 -#, fuzzy msgid "報告" -msgstr "お知らせ" +msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -1144,9 +1053,7 @@ msgstr "お知らせの詳細" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことを" -"お願いします。" +msgstr "アプリケーション設定に「画像や映像」の権限をお開けてから、もう一度試すことをお願いします。" #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1443,3 +1350,4 @@ msgstr "{city}{cityLevel}" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town}{townLevel}" + diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 7beea6b2d..873a41823 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 10:04\n" -"Language-Team: Korean\n" -"Language: ko_KR\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"PO-Revision-Date: 2025-08-14 01:07\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -121,13 +121,8 @@ msgid "發送公告時" msgstr "공지 발송 시" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 " -"음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트" -"는 요청을 서버에 전송하지 않습니다" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트는 요청을 서버에 전송하지 않습니다" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -159,7 +154,7 @@ msgstr "중대" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "" +msgstr "해일 경보 발령 시" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" @@ -230,8 +225,7 @@ msgid "緊急地震速報(重大)" msgstr "긴급 지진 속보(중대)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "​최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 4 이상" @@ -240,8 +234,7 @@ msgid "緊急地震速報(一般)" msgstr "긴급 지진 속보(일반)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 2 이상" @@ -250,8 +243,7 @@ msgid "緊急地震速報(無聲)" msgstr "긴급 지진 속보(무음)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "최대 진도 5 약 이상, 현재 위치(향, 진) 예상 진도 1 이상" @@ -288,14 +280,12 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 적색 기상 경보 특보를 발령" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "현재 위치(향, 진)에 기상 경보를 발령" @@ -305,7 +295,7 @@ msgstr "" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "" +msgstr "소재지(향ㆍ진)으로 뇌우 실시간 정보" #: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" @@ -360,21 +350,10 @@ msgid "正在載入商店物品中" msgstr "스토어 상품 로드 중" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수" -"익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이" -"터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합" -"니다.\n" -"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용" -"되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입" -"니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP는 실시간 지진 정보를 제공하는 데 전념하는 앱으로서, 현재 광고나 다른 수익 모델이 없습니다. 고품질 서비스를 유지하기 위해 우리는 서버 운영, 지진 데이터 확보 및 전송, 그리고 후속 기능 개발 및 유지 보수에 드는 비용을 부담해야 합니다.\n" +"​아래에서 선택해 주시는 모든 후원금은 이러한 운영 비용을 지불하는 데 직접 사용되어, DPIP가 여러분께 지속적으로 안정적인 서비스를 제공하는 데 도움이 될 것입니다. 여러분의 이해와 너그러운 마음에 감사드립니다!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -513,45 +492,31 @@ msgid "無法取得權限" msgstr "권한 획득 불가" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -563,15 +528,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -591,15 +552,8 @@ msgid "定期更新目前的所在地" msgstr "현재 위치 정기적으로 업데이트" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때" -"도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통" -"해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 " -"수 있도록 합니다." +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "자동 위치 기능은 기기의 GPS를 사용하며, DPIP가 꺼져 있거나 사용 중이 아닐 때도 사용자의 위치 정보를 기반으로 현재 위치를 자동으로 업데이트합니다. 이를 통해 실시간 날씨와 지진 정보를 제공하여 사용자가 항상 현지 최신 상황을 파악할 수 있도록 합니다." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -679,9 +633,7 @@ msgstr "" #: ./lib/app/settings/map/page.dart:140 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" -msgstr "" -"지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니" -"다" +msgstr "지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니다" #: ./lib/app/settings/theme/page.dart:30 msgid "主題模式" @@ -716,11 +668,8 @@ msgid "確定" msgstr "확인" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주" -"의." +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "현재 위치 부근 강한 뇌우 또는 비. {time}까지 계속될 수 있으니 주의." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" @@ -743,17 +692,11 @@ msgid "第 {serial} 報" msgstr "제 {serial} 보" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time}경, {location} 부근 체감 지진 발생. 예상 규모 " -"M{magnitude}, 현재 위치 최대 진도 {intensity}." +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -801,38 +744,24 @@ msgid "我們是誰?" msgstr "저희에 관하여?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 " -"명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 " -"이루어져 있습니다." +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio는 대부분 학생들로 구성되어 있으며, 평균 연령 20 세 미만, 15 명 이상의 단체입니다. 구성원은 대만 북·중·남부, 일본, 한국, 중국의 학생들로 이루어져 있습니다." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "우리의 목표" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이" -"었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "설립 초기의 목적은 컴퓨터와 기술에 관심과 능력이 있는 학생들을 모집하는 것이었으며, 이후에는 학교 밖으로 발전하여 현재의 모습으로 발전하였습니다." #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "주의 사항" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 " -"정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 " -"다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "네트워크 상태, 서버 상태, 애플리케이션 상태, 상위 데이터 소스 상태 등에 따라 정보를 받지 못할 가능성이 있습니다. 저희는 이러한 상황을 피하기 위해 최선을 다하지만, 반드시 발생하지 않는다고 보장할 수는 없습니다." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -840,28 +769,19 @@ msgstr "강한 흔들림이 알림보다 먼저 사용자 위치에 도착할 #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 " -"신중하게 사용해야 합니다." +msgstr "지진 속보는 신속한 계산 결과이므로, 오차가 클 수 있습니다. 이 점을 이해하고 신중하게 사용해야 합니다." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정" -"을 반드시 준수해 주십시오." +msgstr "공식적으로 인정되지 않는 모든 행위는 법적 위험을 초래할 수 있으니, 관련 규정을 반드시 준수해 주십시오." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "DPIP에 오신 것을 환영합니다" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 " -"통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀" -"이 설계한 앱입니다." +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP는 TREM-Net(대만의 실시간 지진 관측 네트워크) 정보 및 중앙 기상청 자료를 통합하여 통합, 단일 및 편리한 방재 정보 응용 프로그램을 제공하는 대만 현지 팀이 설계한 앱입니다." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -869,15 +789,11 @@ msgstr "중대 재해 발생 시 알림으로 즉각 재난 대비 정보를 전 #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보" -"를 제공합니다" +msgstr "GPS를 이용하여 소재지 위치를 자동으로 업데이트하고, 현지의 즉각적인 방재 정보를 제공합니다" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니" -"다." +msgstr "실시간 재난 알림 정보를 위해 DPIP가 백그라운드에서 계속 실행되도록 허용합니다." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -885,8 +801,7 @@ msgstr "이미지 저장" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" +msgstr "대만 기상청 또는 ExpTech에서 제공하는 데이터 시각화 이미지를 저장하는 데 사용" #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -902,8 +817,7 @@ msgstr "권한" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." +msgstr "우리는 항상 사용자와 함께하며 사용자의 프라이버시를 위해 끊임없이 노력합니다." #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -918,9 +832,8 @@ msgid "簡單" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 -#, fuzzy msgid "報告" -msgstr "공지" +msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -1012,8 +925,7 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1027 msgid "規模 M{magnitude},所在地預估{intensity}" -msgstr "" -"규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" +msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" #: ./lib/app/map/_lib/managers/monitor.dart:1036 msgid "{countdown}秒後抵達" @@ -1137,9 +1049,7 @@ msgstr "공지 내용" #: ./lib/route/image_viewer/image_viewer.dart:59 msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。" -msgstr "" -"응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주" -"세요." +msgstr "응용 프로그램 설정에서 '사진 및 미디어' 권한을 찾아 허용 후에 다시 시도해 주세요." #: ./lib/route/image_viewer/image_viewer.dart:70 msgid "再試一次" @@ -1436,3 +1346,4 @@ msgstr "" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" + diff --git a/assets/translations/location_names.csv b/assets/translations/location_names.csv index c082f72aa..f5125e196 100644 --- a/assets/translations/location_names.csv +++ b/assets/translations/location_names.csv @@ -1,41 +1,41 @@ "key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" -"連江","連江","Lienchiang","連江","連江","連江","連江","連江" -"宜蘭","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜蘭" +"連江","連江","Lienchiang","連江","連江","連江","連江","连江" +"宜蘭","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜兰" "彰化","彰化","Changhua","彰化","彰化","彰化","彰化","彰化" "南投","南投","Nantou","南投","南投","南投","南投","南投" -"雲林","雲林","Yunlin","雲林","雲林","雲林","雲林","雲林" -"屏東","屏東","Pingdong","屏東","屏東","屏東","屏東","屏東" +"雲林","雲林","Yunlin","雲林","雲林","雲林","雲林","云林" +"屏東","屏東","Pingdong","屏東","屏東","屏東","屏東","屏东" "基隆","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" -"臺北","臺北","Taipei","台北","臺北","臺北","臺北","臺北" +"臺北","臺北","Taipei","台北","臺北","臺北","臺北","台北" "新北","新北","New Taipei","新北","新北","新北","新北","新北" -"臺南","臺南","Tainan","台南","臺南","臺南","臺南","臺南" -"桃園","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃園" -"嘉義","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉義" -"金門","金門","Kinmen","金門","金門","金門","金門","金門" +"臺南","臺南","Tainan","台南","臺南","臺南","臺南","台南" +"桃園","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃园" +"嘉義","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉义" +"金門","金門","Kinmen","金門","金門","金門","金門","金门" "高雄","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" -"臺東","臺東","Taitung","台東","臺東","臺東","臺東","臺東" -"花蓮","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花蓮" +"臺東","臺東","Taitung","台東","臺東","臺東","臺東","台东" +"花蓮","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花莲" "澎湖","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" "新竹","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" -"臺中","臺中","Taichung","台中","臺中","臺中","臺中","臺中" +"臺中","臺中","Taichung","台中","臺中","臺中","臺中","台中" "苗栗","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" "成功","成功","Chenggong","成功","成功","成功","成功","成功" "佳冬","佳冬","Jiadong","佳冬","佳冬","佳冬","佳冬","佳冬" -"麥寮","麥寮","Mailiao","麦寮","麥寮","麥寮","麥寮","麥寮" -"綠島","綠島","Ludao","緑島","綠島","綠島","綠島","綠島" -"蘭嶼","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","蘭嶼" +"麥寮","麥寮","Mailiao","麦寮","麥寮","麥寮","麥寮","麦寮" +"綠島","綠島","Ludao","緑島","綠島","綠島","綠島","绿岛" +"蘭嶼","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","兰屿" "田中","田中","Tianzhong","田中","田中","田中","田中","田中" -"社頭","社頭","Shetou","社頭","社頭","社頭","社頭","社頭" +"社頭","社頭","Shetou","社頭","社頭","社頭","社頭","社头" "竹田","竹田","Zhutian","竹田","竹田","竹田","竹田","竹田" -"萬丹","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","萬丹" -"三灣","三灣","Sanwan","三湾","三灣","三灣","三灣","三灣" +"萬丹","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","万丹" +"三灣","三灣","Sanwan","三湾","三灣","三灣","三灣","三湾" "峨眉","峨眉","Emei","峨眉","峨眉","峨眉","峨眉","峨眉" "南庄","南庄","Nanzhuang","南庄","南庄","南庄","南庄","南庄" "太保","太保","Taibao","太保","太保","太保","太保","太保" "中埔","中埔","Zhongpu","中埔","中埔","中埔","中埔","中埔" "番路","番路","Fanlu","番路","番路","番路","番路","番路" "水上","水上","Shuishang","水上","水上","水上","水上","水上" -"員林","員林","Yuanlin","員林","員林","員林","員林","員林" +"員林","員林","Yuanlin","員林","員林","員林","員林","员林" "小港","小港","Xiaogang","小港","小港","小港","小港","小港" "蘇澳","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","蘇澳" "五結","五結","Wujie","五結","五結","五結","五結","五結" @@ -73,51 +73,51 @@ "造橋","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" "獅潭","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" "和美","和美","Hemei","和美","和美","和美","和美","和美" -"線西","線西","Xianxi","線西","線西","線西","線西","線西" +"線西","線西","Xianxi","線西","線西","線西","線西","线西" "伸港","伸港","Shenggang","伸港","伸港","伸港","伸港","伸港" "秀水","秀水","Xiushui","秀水","秀水","秀水","秀水","秀水" -"花壇","花壇","Huatan","花壇","花壇","花壇","花壇","花壇" -"芬園","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬園" +"花壇","花壇","Huatan","花壇","花壇","花壇","花壇","花坛" +"芬園","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬园" "溪湖","溪湖","Xihu","渓湖","溪湖","溪湖","溪湖","溪湖" -"東石","東石","Dongshi","東石","東石","東石","東石","東石" +"東石","東石","Dongshi","東石","東石","東石","東石","东石" "大村","大村","Dacun","大村","大村","大村","大村","大村" -"埔鹽","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔鹽" +"埔鹽","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔盐" "埔心","埔心","Puxin","埔心","埔心","埔心","埔心","埔心" "永靖","永靖","Yongjing ","永靖","永靖","永靖","永靖","永靖" "二水","二水","Ershui","二水","二水","二水","二水","二水" "二林","二林","Erlin","二林","二林","二林","二林","二林" -"埤頭","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤頭" +"埤頭","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤头" "芳苑","芳苑","Fangyuan","芳苑","芳苑","芳苑","芳苑","芳苑" "大城","大城","Dacheng","大城","大城","大城","大城","大城" "竹塘","竹塘","Zhutang","竹塘","竹塘","竹塘","竹塘","竹塘" -"溪州","溪州","Xizhou","渓州","溪州","溪州","溪州","溪州" +"溪州","溪州","Xizhou","渓州","溪州","溪州","溪州","溪洲" "埔里","埔里","Puli","埔里","埔里","埔里","埔里","埔里" "草屯","草屯","Caotun","草屯","草屯","草屯","草屯","草屯" "竹山","竹山","Zhushan","竹山","竹山","竹山","竹山","竹山" "集集","集集","Jiji","集集","集集","集集","集集","集集" -"名間","名間","Mingjian","名間","名間","名間","名間","名間" +"名間","名間","Mingjian","名間","名間","名間","名間","名间" "鹿谷","鹿谷","Lugu","鹿谷","鹿谷","鹿谷","鹿谷","鹿谷" "中寮","中寮","Zhongliao","中寮","中寮","中寮","中寮","中寮" -"魚池","魚池","Yuchi","魚池","魚池","魚池","魚池","魚池" -"國姓","國姓","Guoxing","国姓","國姓","國姓","國姓","國姓" +"魚池","魚池","Yuchi","魚池","魚池","魚池","魚池","鱼池" +"國姓","國姓","Guoxing","国姓","國姓","國姓","國姓","国姓" "水里","水里","Shuili","水里","水里","水里","水里","水里" -"信義","信義","Xinyi","信義","信義","信義","信義","信義" -"仁愛","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁愛" +"信義","信義","Xinyi","信義","信義","信義","信義","信义" +"仁愛","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁爱" "斗六","斗六","Douliu","斗六","斗六","斗六","斗六","斗六" -"斗南","斗南","Dounan","斗南","斗南","斗南","斗南","斗南" +"斗南","斗南","Dounan","斗南","斗南","斗南","斗南","鬥南" "虎尾","虎尾","Huwei","虎尾","虎尾","虎尾","虎尾","虎尾" "西螺","西螺","Xiluo","西螺","西螺","西螺","西螺","西螺" -"土庫","土庫","Tuku","土庫","土庫","土庫","土庫","土庫" +"土庫","土庫","Tuku","土庫","土庫","土庫","土庫","土库" "北港","北港","Beigang","北港","北港","北港","北港","北港" "古坑","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" "大埤","大埤","Dapi","大埤","大埤","大埤","大埤","大埤" "莿桐","莿桐","Citong","莿桐","莿桐","莿桐","莿桐","莿桐" "林內","林內","Linnei","林内","林內","林內","林內","林內" -"二崙","二崙","Erlun","二崙","二崙","二崙","二崙","二崙" -"崙背","崙背","Lunbei","崙背","崙背","崙背","崙背","崙背" -"東勢","東勢","Dongshi","東勢","東勢","東勢","東勢","東勢" +"二崙","二崙","Erlun","二崙","二崙","二崙","二崙","二仑" +"崙背","崙背","Lunbei","崙背","崙背","崙背","崙背","仑背" +"東勢","東勢","Dongshi","東勢","東勢","東勢","東勢","东势" "褒忠","褒忠","Baozhong","褒忠","褒忠","褒忠","褒忠","褒忠" -"元長","元長","Yuanchang","元長","元長","元長","元長","元長" +"元長","元長","Yuanchang","元長","元長","元長","元長","元长" "水林","水林","Shuilin","水林","水林","水林","水林","水林" "朴子","朴子","Puzi","朴子","朴子","朴子","朴子","朴子" "大林","大林","Dalin","大林","大林","大林","大林","大林" @@ -172,13 +172,13 @@ "頭城","頭城","Toucheng","頭城","頭城","頭城","頭城","頭城" "南澳","南澳","Nanao","南澳","南澳","南澳","南澳","南澳" "竹北","竹北","Zhubei","竹北","竹北","竹北","竹北","竹北" -"新豐","新豐","Sinfong","新豊","新豐","新豐","新豐","新豐" -"苑裡","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑裡" -"通霄","通霄","Tongxiao","通霄","通霄","通霄","通霄","通霄" +"新豐","新豐","Sinfong","新豊","新豐","新豐","新豐","新丰" +"苑裡","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑里" +"通霄","通霄","Tongxiao","通霄","通霄","通霄","通霄","通宵" "竹南","竹南","Jhunan","竹南","竹南","竹南","竹南","竹南" -"後龍","後龍","Houlong","後龍","後龍","後龍","後龍","後龍" +"後龍","後龍","Houlong","後龍","後龍","後龍","後龍","后龙" "鹿港","鹿港","Lukang","鹿港","鹿港","鹿港","鹿港","鹿港" -"福興","福興","Fuxing","福興","福興","福興","福興","福興" +"福興","福興","Fuxing","福興","福興","福興","福興","福兴" "臺西","臺西","Taixi","台西","臺西","臺西","臺西","臺西" "四湖","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" "口湖","口湖","Kouhu","口湖","口湖","口湖","口湖","口湖" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 61d2f0117..4694bcb4b 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -1,18 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 10:04\n" -"Language-Team: Russian\n" -"Language: ru_RU\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 " -"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 " -"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"PO-Revision-Date: 2025-08-14 00:59\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -123,9 +121,7 @@ msgid "發送公告時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" #: ./lib/app/settings/notify/page.dart:134 @@ -229,8 +225,7 @@ msgid "緊急地震速報(重大)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" msgstr "" @@ -239,8 +234,7 @@ msgid "緊急地震速報(一般)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" msgstr "" @@ -249,8 +243,7 @@ msgid "緊急地震速報(無聲)" msgstr "" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" msgstr "" @@ -287,14 +280,12 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" msgstr "" @@ -359,13 +350,8 @@ msgid "正在載入商店物品中" msgstr "" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" #: ./lib/app/settings/donate/page.dart:169 @@ -505,45 +491,31 @@ msgid "無法取得權限" msgstr "" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -555,15 +527,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -583,10 +551,7 @@ msgid "定期更新目前的所在地" msgstr "" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" msgstr "" #: ./lib/app/settings/location/page.dart:301 @@ -702,8 +667,7 @@ msgid "確定" msgstr "" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" msgstr "" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 @@ -727,15 +691,11 @@ msgid "第 {serial} 報" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -783,9 +743,7 @@ msgid "我們是誰?" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:93 @@ -793,9 +751,7 @@ msgid "我們的初衷" msgstr "" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:38 @@ -803,9 +759,7 @@ msgid "注意事項" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" msgstr "" #: ./lib/app/welcome/3-notice/page.dart:88 @@ -825,9 +779,7 @@ msgid "歡迎使用 DPIP" msgstr "" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" #: ./lib/app/welcome/4-permissions/page.dart:154 @@ -1393,3 +1345,4 @@ msgstr "" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" + diff --git a/assets/translations/vi.po b/assets/translations/vi.po index 0aed16d3e..c18d072cd 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 10:04\n" -"Language-Team: Vietnamese\n" -"Language: vi_VN\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: vi\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"PO-Revision-Date: 2025-08-14 00:59\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -121,9 +121,7 @@ msgid "發送公告時" msgstr "Khi gửi thông báo" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" #: ./lib/app/settings/notify/page.dart:134 @@ -227,11 +225,9 @@ msgid "緊急地震速報(重大)" msgstr "Cảnh báo động đất khẩn cấp (Lớn)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 4 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -239,11 +235,9 @@ msgid "緊急地震速報(一般)" msgstr "Cảnh báo động đất (Nhỏ)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 2 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -251,11 +245,9 @@ msgid "緊急地震速報(無聲)" msgstr "Cảnn báo động đất (Im Lặng)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"Cường độ tối đa từ 5 yếu trở lên\n" +msgstr "Cường độ tối đa từ 5 yếu trở lên\n" "và dự đoán tại địa phương (thị trấn) từ 1 trở lên" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -291,20 +283,14 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " -"tín hiệu đỏ" +msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu đỏ" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết " -"tín hiệu" +msgstr "Khu vực địa phương (thị trấn) ban hành báo cáo đặc biệt cảnh báo thời tiết tín hiệu" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" @@ -367,13 +353,8 @@ msgid "正在載入商店物品中" msgstr "" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" #: ./lib/app/settings/donate/page.dart:169 @@ -458,9 +439,7 @@ msgstr "" #: ./lib/app/settings/page.dart:113 msgid "幫助我們維護伺服器的穩定和長久發展" -msgstr "" -"Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ " -"của chúng tôi" +msgstr "Hỗ trợ chúng tôi duy trì sự ổn định và phát triển lâu dài của các máy chủ của chúng tôi" #: ./lib/app/settings/page.dart:119 msgid "第三方套件授權" @@ -492,9 +471,7 @@ msgstr "Nhật ký ứng dụng" #: ./lib/app/welcome/3-notice/page.dart:58 msgid "任何資訊應以中央氣象署發布之內容為準。" -msgstr "" -"Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung " -"ương (CWA) công bố." +msgstr "Tất cả thông tin phải tuân theo nội dung do Đài Loan Cơ quan Thời tiết Trung ương (CWA) công bố." #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" @@ -517,45 +494,31 @@ msgid "無法取得權限" msgstr "" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -567,15 +530,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -595,15 +554,8 @@ msgid "定期更新目前的所在地" msgstr "Cập nhật vị trí hiện tại định kỳ" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động " -"cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết " -"và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới " -"nhất tại địa phương." +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "Tính năng định vị tự động sẽ sử dụng GPS trên thiết bị của bạn để tự động cập nhật vị trí của bạn dựa trên vị trí địa lý, cung cấp thông tin thời tiết và động đất theo thời gian thực, giúp bạn luôn nắm bắt được tình hình mới nhất tại địa phương." #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -718,17 +670,12 @@ msgid "確定" msgstr "Xác nhận" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. " -"Tình trạng này kéo dài đến {time}." +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "Khu vực gần bạn đang có mưa giông hoặc mưa lớn. Vui lòng chú ý đề phòng. Tình trạng này kéo dài đến {time}." #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" -msgstr "" -"Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài " -"Loan." +msgstr "Ngoài khu vực dịch vụ, chỉ có sẵn ở các địa điểm khác nhau trên khắp Đài Loan." #: ./lib/app/home/_widgets/location_button.dart:25 msgid "尚未設定" @@ -747,15 +694,11 @@ msgid "第 {serial} 報" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 @@ -803,72 +746,44 @@ msgid "我們是誰?" msgstr "Chúng tôi là ai?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có " -"độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và " -"Nam), Nhật Bản, Hàn Quốc và Trung Quốc." +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio là một nhóm gồm hơn 15 Học sinh, phần lớn là những người có độ tuổi trung bình dưới 20. Các thành viên đến từ Đài Loan (Bắc, Trung và Nam), Nhật Bản, Hàn Quốc và Trung Quốc." #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "Chúng tôi đã bắt đầu với những gì" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở " -"thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra " -"ngoài phạm vi trường học và trở thành nhóm như hiện nay." +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "Nhóm ban đầu được thành lập bằng cách tuyển dụng một nhóm học sinh có sở thích và năng khiếu về máy tính và công nghệ, sau đó đã phát triển vượt ra ngoài phạm vi trường học và trở thành nhóm như hiện nay." #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "Những điều cần lưu ý" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, " -"trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin " -"có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như " -"vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "Tùy thuộc vào trạng thái mạng, trạng thái máy chủ, trạng thái ứng dụng, trạng thái nguồn dữ liệu ngược dòng, v.v., sự cố không nhận được thông tin có thể xảy ra và chúng tôi sẽ cố gắng hết sức để tránh những tình huống như vậy, nhưng chúng tôi không đảm bảo rằng chúng sẽ không xảy ra." #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" -msgstr "" -"Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." +msgstr "Rung lắc mạnh có xu hướng xảy ra ở vị trí của người dùng sớm hơn thông báo." #: ./lib/app/welcome/3-notice/page.dart:99 msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。" -msgstr "" -"Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do " -"đó cần phải thận trọng và hiểu rõ." +msgstr "Báo cáo động đất nhanh là những tính toán nhanh và có thể chứa nhiều lỗi, do đó cần phải thận trọng và hiểu rõ." #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" -"Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi " -"phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân " -"thủ các quy định có liên quan." +msgstr "Bất kỳ hành vi nào không được chính thức cho phép đều có thể bị coi là vi phạm pháp luật của Trung Hoa Dân Quốc (Đài Loan), vì vậy hãy đảm bảo tuân thủ các quy định có liên quan." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" msgstr "Chào mừng đến với DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích " -"hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) " -"và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một " -"ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP là ứng dụng được thiết kế bởi một nhóm địa phương tại Đài Loan, tích hợp thông tin từ TREM-Net (Mạng quan sát động đất thời gian thực Đài Loan) và dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) để cung cấp một ứng dụng thông tin phòng chống thiên tai tích hợp, duy nhất và tiện lợi." #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -876,15 +791,11 @@ msgstr "Dịch vụ được sử dụng để gửi thông báo cảnh báo thi #: ./lib/app/welcome/4-permissions/page.dart:162 msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊" -msgstr "" -"Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại " -"khu vực hiện tại" +msgstr "Dịch vụ được sử dụng để cập nhật vị trí và cung cấp thông tin cảnh báo tại khu vực hiện tại" #: ./lib/app/welcome/4-permissions/page.dart:168 msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。" -msgstr "" -"Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm " -"họa ngay lập tức." +msgstr "Cho phép DPIP tiếp tục hoạt động ở chế độ nền để thông báo phòng ngừa thảm họa ngay lập tức." #: ./lib/route/image_viewer/image_viewer.dart:228 msgid "儲存" @@ -892,9 +803,7 @@ msgstr "Lưu trữ hình" #: ./lib/app/welcome/4-permissions/page.dart:175 msgid "用於儲存中央氣象署或 ExpTech 提供之數據可視化圖片" -msgstr "" -"Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung " -"ương (CWA) hoặc ExpTech." +msgstr "Để lưu trữ hình ảnh trực quan dữ liệu từ Đài Loan Cơ quan thời tiết trung ương (CWA) hoặc ExpTech." #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" @@ -902,8 +811,7 @@ msgstr "Yêu cầu để xin phép" #: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" -msgstr "" -"Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." +msgstr "Người dùng cần phải tự tay vào trang cài đặt để mở các quyền có liên quan." #: ./lib/app/welcome/4-permissions/page.dart:383 msgid "權限" @@ -911,9 +819,7 @@ msgstr "Sự cho phép" #: ./lib/app/welcome/4-permissions/page.dart:396 msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。" -msgstr "" -"Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của " -"họ." +msgstr "Chúng tôi luôn ủng hộ người dùng và nỗ lực không ngừng vì quyền riêng tư của họ." #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:99 msgid "地圖圖層" @@ -928,9 +834,8 @@ msgid "簡單" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 -#, fuzzy msgid "報告" -msgstr "Thông báo" +msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -1443,3 +1348,4 @@ msgstr "" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "" + diff --git a/assets/translations/weather_station_names.csv b/assets/translations/weather_station_names.csv index 51624ec03..e05811e6e 100644 --- a/assets/translations/weather_station_names.csv +++ b/assets/translations/weather_station_names.csv @@ -3,33 +3,33 @@ "466881","新北","New Taipei","新北","新北","新北","新北","新北" "466900","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" "466910","鞍部","Anbu","鞍部","鞍部","鞍部","鞍部","鞍部" -"466920","臺北","Taipei","台北","臺北","臺北","臺北","臺北" +"466920","臺北","Taipei","台北","臺北","臺北","臺北","台北" "466930","竹子湖","Zhuzihu","竹子湖","竹子湖","竹子湖","竹子湖","竹子湖" "466940","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" "466950","彭佳嶼","Pengjiayu","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼" -"466990","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花蓮" +"466990","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花莲" "467050","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" -"467080","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜蘭" -"467110","金門","Kinmen","金門","金門","金門","金門","金門" +"467080","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜兰" +"467110","金門","Kinmen","金門","金門","金門","金門","金门" "467270","田中","Tianzhong","田中","田中","田中","田中","田中" -"467280","後龍","Houlong","後龍","後龍","後龍","後龍","後龍" +"467280","後龍","Houlong","後龍","後龍","後龍","後龍","后龙" "467290","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" "467300","東吉島","Dongjidao","東吉島","東吉島","東吉島","東吉島","東吉島" "467350","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" -"467410","臺南","Tainan","台南","臺南","臺南","臺南","臺南" +"467410","臺南","Tainan","台南","臺南","臺南","臺南","台南" "467420","永康","Yongkang","永康","永康","永康","永康","永康" "467441","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" -"467480","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉義" -"467490","臺中","Taichung","台中","臺中","臺中","臺中","臺中" +"467480","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉义" +"467490","臺中","Taichung","台中","臺中","臺中","臺中","台中" "467530","阿里山","Alishan","阿里山","阿里山","阿里山","阿里山","阿里山" "467540","大武","Dawu","大武","大武","大武","大武","大武" "467550","玉山","Yushan","玉山","玉山","玉山","玉山","玉山" "467571","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" "467590","恆春","Hengchun","恒春","恆春","恆春","恆春","恆春" "467610","成功","Chenggong","成功","成功","成功","成功","成功" -"467620","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","蘭嶼" +"467620","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","兰屿" "467650","日月潭","Sun Moon Lake","日月潭","日月潭","日月潭","日月潭","日月潭" -"467660","臺東","Taitung","台東","臺東","臺東","臺東","臺東" +"467660","臺東","Taitung","台東","臺東","臺東","臺東","台东" "467790","墾丁雷達站","Kenting","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站" "467990","馬祖","Matsu","馬祖","馬祖","馬祖","馬祖","馬祖" "12J990","口湖工作站","Kouhu Branch Station","口湖工作站","口湖工作站","口湖工作站","口湖工作站","口湖工作站" @@ -128,7 +128,7 @@ "C2O810","曾文","Cengwen","曾文","曾文","曾文","曾文","曾文" "C2O930","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" "C2O950","安南","Annan","安南","安南","安南","安南","安南" -"C2R170","屏東","Pingdong","屏東","屏東","屏東","屏東","屏東" +"C2R170","屏東","Pingdong","屏東","屏東","屏東","屏東","屏东" "C2R970","屏科大","National Pingtung University","屏科大","屏科大","屏科大","屏科大","屏科大" "C2V250","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" "C2V260","月眉","Yuemei","月眉","月眉","月眉","月眉","月眉" @@ -183,7 +183,7 @@ "C0A9F0","內湖","Neihu","内湖","內湖","內湖","內湖","內湖" "C0AC40","大屯山","Datunshan","大屯山","大屯山","大屯山","大屯山","大屯山" "C0AC60","三峽","Sanshia","三峡","三峽","三峽","三峽","三峽" -"C0AC70","信義","Xinyi","信義","信義","信義","信義","信義" +"C0AC70","信義","Xinyi","信義","信義","信義","信義","信义" "C0AC80","文山","Wenshan","文山","文山","文山","文山","文山" "C0ACA0","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新莊" "C0AD10","八里","Bali","八里","八里","八里","八里","八里" @@ -220,7 +220,7 @@ "C0B050","八斗子","Badouzi","八斗子","八斗子","八斗子","八斗子","八斗子" "C0B060","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" "C0C460","復興","Fuxing","復興","復興","復興","復興","復興" -"C0C480","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃園" +"C0C480","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃园" "C0C490","八德","Bade","八徳","八德","八德","八德","八德" "C0C590","觀音","Guanyin","観音","觀音","觀音","觀音","觀音" "C0C620","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","蘆竹" @@ -244,7 +244,7 @@ "C0D550","雪霸","Xueba","雪霸","雪霸","雪霸","雪霸","雪霸" "C0D560","竹東","Zhudong","竹東","竹東","竹東","竹東","竹東" "C0D580","寶山","Baoshan","宝山","寶山","寶山","寶山","寶山" -"C0D590","新豐","Sinfong","新豊","新豐","新豐","新豐","新豐" +"C0D590","新豐","Sinfong","新豊","新豐","新豐","新豐","新丰" "C0D650","湖口","Hukou","湖口","湖口","湖口","湖口","湖口" "C0D660","新竹市東區","Dongqu Hsinshu City","新竹市東區","新竹市東區","新竹市東區","新竹市東區","新竹市東區" "C0D670","海天一線","Haitianyisian","海天一線","海天一線","海天一線","海天一線","海天一線" @@ -257,7 +257,7 @@ "C0E430","南庄","Nanzhuang","南庄","南庄","南庄","南庄","南庄" "C0E550","明德","Mingde","明德","明德","明德","明德","明德" "C0E570","白沙屯","Baishatun","白沙屯","白沙屯","白沙屯","白沙屯","白沙屯" -"C0E590","通霄","Tongxiao","通霄","通霄","通霄","通霄","通霄" +"C0E590","通霄","Tongxiao","通霄","通霄","通霄","通霄","通宵" "C0E610","馬都安","Madu-An","馬都安","馬都安","馬都安","馬都安","馬都安" "C0E730","頭份","Toufen","頭份","頭份","頭份","頭份","頭份" "C0E740","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" @@ -266,7 +266,7 @@ "C0E791","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓蘭" "C0E810","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" "C0E820","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" -"C0E830","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑裡" +"C0E830","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑里" "C0E850","大河","Dahe","大河","大河","大河","大河","大河" "C0E870","高鐵苗栗","THSR Miaoli","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗" "C0E910","海埔","Haipu","海埔","海埔","海埔","海埔","海埔" @@ -280,7 +280,7 @@ "C0F0C0","中坑","Zhongkeng","中坑","中坑","中坑","中坑","中坑" "C0F0D0","審馬陣","Shenmazhen","審馬陣","審馬陣","審馬陣","審馬陣","審馬陣" "C0F0E0","南湖圈谷","Nanhuquangu","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷" -"C0F850","東勢","Dongshi","東勢","東勢","東勢","東勢","東勢" +"C0F850","東勢","Dongshi","東勢","東勢","東勢","東勢","东势" "C0F970","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" "C0F9I0","神岡","Shengang","神岡","神岡","神岡","神岡","神岡" "C0F9K0","大安","Da-An","大安","大安","大安","大安","大安" @@ -313,23 +313,23 @@ "C0FB30","八仙山苗圃","Bashianshan","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃" "C0FB40","中橫21.6k","Chungheng 21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k" "C0FB70","大甲溪埔","Dajia, Xipu","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔" -"C0G620","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬園" -"C0G650","員林","Yuanlin","員林","員林","員林","員林","員林" +"C0G620","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬园" +"C0G650","員林","Yuanlin","員林","員林","員林","員林","员林" "C0G660","溪湖","Xihu","渓湖","溪湖","溪湖","溪湖","溪湖" -"C0G720","溪州","Xizhou","渓州","溪州","溪州","溪州","溪州" +"C0G720","溪州","Xizhou","渓州","溪州","溪州","溪州","溪洲" "C0G730","二林","Erlin","二林","二林","二林","二林","二林" "C0G740","大城","Dacheng","大城","大城","大城","大城","大城" -"C0G770","福興","Fuxing","福興","福興","福興","福興","福興" +"C0G770","福興","Fuxing","福興","福興","福興","福興","福兴" "C0G780","秀水","Xiushui","秀水","秀水","秀水","秀水","秀水" -"C0G800","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔鹽" +"C0G800","埔鹽","Puyan","埔塩","埔鹽","埔鹽","埔鹽","埔盐" "C0G810","埔心","Puxin","埔心","埔心","埔心","埔心","埔心" "C0G820","田尾","Tianwei","田尾","田尾","田尾","田尾","田尾" -"C0G830","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤頭" -"C0G860","社頭","Shetou","社頭","社頭","社頭","社頭","社頭" +"C0G830","埤頭","Pitou","埤頭","埤頭","埤頭","埤頭","埤头" +"C0G860","社頭","Shetou","社頭","社頭","社頭","社頭","社头" "C0G880","二水","Ershui","二水","二水","二水","二水","二水" "C0G890","伸港","Shenggang","伸港","伸港","伸港","伸港","伸港" -"C0G900","線西","Xianxi","線西","線西","線西","線西","線西" -"C0G910","花壇","Huatan","花壇","花壇","花壇","花壇","花壇" +"C0G900","線西","Xianxi","線西","線西","線西","線西","线西" +"C0G910","花壇","Huatan","花壇","花壇","花壇","花壇","花坛" "C0G920","永靖","Yongjing ","永靖","永靖","永靖","永靖","永靖" "C0G940","竹塘","Zhutang","竹塘","竹塘","竹塘","竹塘","竹塘" "C0G950","防潮門","Fangchaomen","防潮門","防潮門","防潮門","防潮門","防潮門" @@ -342,35 +342,35 @@ "C0H9A0","神木村","Shenmu Village","神木村","神木村","神木村","神木村","神木村" "C0H9C0","合歡山","Hehuan Mountain","合歡山","合歡山","合歡山","合歡山","合歡山" "C0I010","廬山","Lushan","廬山","廬山","廬山","廬山","廬山" -"C0I080","信義","Xinyi","信義","信義","信義","信義","信義" +"C0I080","信義","Xinyi","信義","信義","信義","信義","信义" "C0I110","竹山","Zhushan","竹山","竹山","竹山","竹山","竹山" "C0I360","水里","Shuili","水里","水里","水里","水里","水里" -"C0I370","魚池","Yuchi","魚池","魚池","魚池","魚池","魚池" +"C0I370","魚池","Yuchi","魚池","魚池","魚池","魚池","鱼池" "C0I380","集集","Jiji","集集","集集","集集","集集","集集" -"C0I390","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁愛" -"C0I410","名間","Mingjian","名間","名間","名間","名間","名間" -"C0I420","國姓","Guoxing","国姓","國姓","國姓","國姓","國姓" +"C0I390","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁爱" +"C0I410","名間","Mingjian","名間","名間","名間","名間","名间" +"C0I420","國姓","Guoxing","国姓","國姓","國姓","國姓","国姓" "C0I460","南投","Nantou","南投","南投","南投","南投","南投" "C0I480","梅峰","Meifeng","梅峰","梅峰","梅峰","梅峰","梅峰" "C0I490","萬大林道","Wandalindao","萬大林道","萬大林道","萬大林道","萬大林道","萬大林道" "C0I520","玉山風口","Yushanfengkou","玉山風口","玉山風口","玉山風口","玉山風口","玉山風口" "C0I530","小奇萊","Xiaoqilai","小奇萊","小奇萊","小奇萊","小奇萊","小奇萊" "C0I540","奇萊稜線","Qilailengxian","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線" -"C0K250","崙背","Lunbei","崙背","崙背","崙背","崙背","崙背" +"C0K250","崙背","Lunbei","崙背","崙背","崙背","崙背","仑背" "C0K280","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" "C0K291","宜梧","Yiwu","宜梧","宜梧","宜梧","宜梧","宜梧" "C0K330","虎尾","Huwei","虎尾","虎尾","虎尾","虎尾","虎尾" -"C0K390","土庫","Tuku","土庫","土庫","土庫","土庫","土庫" +"C0K390","土庫","Tuku","土庫","土庫","土庫","土庫","土库" "C0K400","斗六","Douliu","斗六","斗六","斗六","斗六","斗六" "C0K410","北港","Beigang","北港","北港","北港","北港","北港" "C0K420","西螺","Xiluo","西螺","西螺","西螺","西螺","西螺" "C0K430","褒忠","Baozhong","褒忠","褒忠","褒忠","褒忠","褒忠" -"C0K440","二崙","Erlun","二崙","二崙","二崙","二崙","二崙" +"C0K440","二崙","Erlun","二崙","二崙","二崙","二崙","二仑" "C0K450","大埤","Dapi","大埤","大埤","大埤","大埤","大埤" -"C0K460","斗南","Dounan","斗南","斗南","斗南","斗南","斗南" +"C0K460","斗南","Dounan","斗南","斗南","斗南","斗南","鬥南" "C0K470","林內","Linnei","林内","林內","林內","林內","林內" "C0K480","莿桐","Citong","莿桐","莿桐","莿桐","莿桐","莿桐" -"C0K500","元長","Yuanchang","元長","元長","元長","元長","元長" +"C0K500","元長","Yuanchang","元長","元長","元長","元長","元长" "C0K510","水林","Shuilin","水林","水林","水林","水林","水林" "C0K530","臺西","Taixi","台西","臺西","臺西","臺西","臺西" "C0K550","蔦松","Niaosong","蔦松","蔦松","蔦松","蔦松","蔦松" @@ -387,7 +387,7 @@ "C0M680","太保","Taibao","太保","太保","太保","太保","太保" "C0M690","水上","Shuishang","水上","水上","水上","水上","水上" "C0M700","竹崎","Zhuqi","竹崎","竹崎","竹崎","竹崎","竹崎" -"C0M710","東石","Dongshi","東石","東石","東石","東石","東石" +"C0M710","東石","Dongshi","東石","東石","東石","東石","东石" "C0M720","番路","Fanlu","番路","番路","番路","番路","番路" "C0M730","嘉義市東區","Dongqu Chiayi City","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區" "C0M740","六腳","Liujiao","六脚","六腳","六腳","六腳","六腳" @@ -471,7 +471,7 @@ "C0R900","竹坑","Jhukeng","竹坑","竹坑","竹坑","竹坑","竹坑" "C0R910","下寮","Sialiao","下寮","下寮","下寮","下寮","下寮" "C0R920","塭仔","Wunzai","塭仔","塭仔","塭仔","塭仔","塭仔" -"C0R930","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","萬丹" +"C0R930","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","万丹" "C0R940","加祿堂","Jialutang","加祿堂","加祿堂","加祿堂","加祿堂","加祿堂" "C0R950","萬隆國小","Wanlongguoxiao","萬隆國小","萬隆國小","萬隆國小","萬隆國小","萬隆國小" "C0R960","內埔","Neipu","内埔","內埔","內埔","內埔","內埔" @@ -479,7 +479,7 @@ "C0S690","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" "C0S700","知本","Jhihben","知本","知本","知本","知本","知本" "C0S710","鹿野","Luye","鹿野","鹿野","鹿野","鹿野","鹿野" -"C0S730","綠島","Ludao","緑島","綠島","綠島","綠島","綠島" +"C0S730","綠島","Ludao","緑島","綠島","綠島","綠島","绿岛" "C0S740","池上","Chihshang","池上","池上","池上","池上","池上" "C0S750","向陽","Siangyang","向陽","向陽","向陽","向陽","向陽" "C0S760","紅石","Hongshih","紅石","紅石","紅石","紅石","紅石" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index baa424a60..8bfdd8c1b 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"PO-Revision-Date: 2025-08-13 13:25\n" -"Language-Team: Chinese Simplified\n" -"Language: zh_CN\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 26\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"PO-Revision-Date: 2025-08-14 00:59\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -121,12 +121,8 @@ msgid "發送公告時" msgstr "发送公告时" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:47 -msgid "" -"音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音" -"效。此測試不會向伺服器發送任何請求" -msgstr "" -"音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音" -"效。此测试不会向服务器发送任何请求" +msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" +msgstr "音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音效。此测试不会向服务器发送任何请求" #: ./lib/app/settings/notify/page.dart:134 msgid "請先設定所在地來使用通知功能" @@ -229,11 +225,9 @@ msgid "緊急地震速報(重大)" msgstr "紧急地震预警(重大)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 4 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:39 @@ -241,11 +235,9 @@ msgid "緊急地震速報(一般)" msgstr "紧急地震预警(一般)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 2 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:44 @@ -253,11 +245,9 @@ msgid "緊急地震速報(無聲)" msgstr "紧急地震预警(无声)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 -msgid "" -"最大震度 5 弱以上 且\n" +msgid "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" -msgstr "" -"最大震度 5 弱以上 且\n" +msgstr "最大震度 5 弱以上 且\n" "所在地(乡镇)预估震度 1 以上" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:48 @@ -293,19 +283,15 @@ msgid "所在地(鄉鎮)發布防災資訊時" msgstr "所在地(乡镇)发布防灾资讯时" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 -msgid "" -"所在地(鄉鎮)發布紅色燈號之\n" +msgid "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" -msgstr "" -"所在地(乡镇)发布红灯信号的\n" +msgstr "所在地(乡镇)发布红灯信号的\n" "天气警特报" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 -msgid "" -"所在地(鄉鎮)發布上述除外燈號之\n" +msgid "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" -msgstr "" -"所在地(乡镇)发布上述除外灯信号的\n" +msgstr "所在地(乡镇)发布上述除外灯信号的\n" "天气警特报" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 @@ -369,20 +355,10 @@ msgid "正在載入商店物品中" msgstr "正在加载商店商品中" #: ./lib/app/settings/donate/page.dart:161 -msgid "" -"DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維" -"持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與" -"維護的成本。\n" -"\n" -"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地" -"為您提供服務。感謝您的理解與慷慨!" -msgstr "" -"DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维" -"持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与" -"维护的成本!\n" -"\n" -"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定" -"底,为您提供服务。感谢您的理解与慷慨!" +msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" +msgstr "DPIP 作为一款致力于提供及时地震信息的app,目前并无广告或其他盈利模式。为了维持高质量服务,我们需要承担服务器运行,地震信息获取与传输、以及后续功能开发与维护的成本!\n\n" +"您在下方所选择的每一份支持,都将直接用于支付这些营运费用,帮助 DPIP 持续稳定底,为您提供服务。感谢您的理解与慷慨!" #: ./lib/app/settings/donate/page.dart:169 msgid "訂閱制" @@ -502,11 +478,11 @@ msgstr "任何信息应以中央气象署发布内容为准。" #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "" +msgstr "无法取得通知权限" #: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "" +msgstr "无法取得位置权限" #: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" @@ -521,47 +497,31 @@ msgid "無法取得權限" msgstr "无法取得权限" #: ./lib/app/settings/location/page.dart:85 -msgid "" -"自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找" -"到並允許「通知」權限後再試一次。" -msgstr "" +msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" +msgstr "自动定位功能需要您允许 DPIP 使用通知权限才能正常运作。请您到应用程式设定中找到并允许「通知」权限后再试一次。" #: ./lib/app/settings/location/page.dart:86 -msgid "" -"自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找" -"到並允許「位置」權限後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:89 -msgid "" -"自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「永遠」後再試一次。" +msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:90 -msgid "" -"自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定" -"中找到位置權限設定並選擇「一律允許」後再試一次。" +msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" msgstr "" #: ./lib/app/settings/location/page.dart:91 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設" -"定所在地資訊。" +msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" msgstr "" #: ./lib/app/settings/location/page.dart:92 -msgid "" -"為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所" -"在地資訊。" -msgstr "" -"为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所" -"在地信息。" +msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" +msgstr "为了获得更好的自动定位体验,您需要授予「无限制」以便让 DPIP 在后台自动设置所在地信息。" #: ./lib/app/settings/location/page.dart:93 -msgid "" -"自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並" -"允許「權限」後再試一次。" +msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" msgstr "" #: ./lib/route/image_viewer/image_viewer.dart:64 @@ -573,15 +533,11 @@ msgid "自動啟動" msgstr "" #: ./lib/app/settings/location/page.dart:164 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正" -"常接收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:186 -msgid "" -"為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接" -"收資訊以及更新所在地。" +msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" msgstr "" #: ./lib/app/settings/location/page.dart:220 @@ -601,14 +557,8 @@ msgid "定期更新目前的所在地" msgstr "定期更新当前位置" #: ./lib/app/settings/location/page.dart:242 -msgid "" -"自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的" -"地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新" -"狀況。" -msgstr "" -"自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您" -"的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新" -"动态。" +msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" +msgstr "自动定位功能会使用您设备上的 GPS,即使 DPIP 处于关闭或未使用状态,也会根据您的地理位置自动更新当前所在位置,提供实时天气与地震信息,助您随时掌握本地最新动态。" #: ./lib/app/settings/location/page.dart:301 msgid "通知功能已被拒絕,請移至設定允許權限。" @@ -723,11 +673,8 @@ msgid "確定" msgstr "确定" #: ./lib/app/home/_widgets/thunderstorm_card.dart:76 -msgid "" -"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" -msgstr "" -"您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" +msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 {time} 。" +msgstr "您所在区域附近正发生强雷雨或降雨,请注意防范,预计持续至 {time} 。" #: ./lib/app/home/_widgets/location_out_of_service.dart:24 msgid "服務區域外,僅在臺灣各地可用" @@ -750,20 +697,12 @@ msgid "第 {serial} 報" msgstr "第 {serial} 报" #: ./lib/app/map/_lib/managers/monitor.dart:1100 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、所在地最大震度{intensity}。" -msgstr "" -"{time} 左右,{location}附近发生有感地震,预计规模 " -"M{magnitude}、所在地最大震度{intensity}。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" +msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:926 -msgid "" -"{time} 左右,{location}附近發生有感地震,預估規模 " -"M{magnitude}、深度{depth}公里。" -msgstr "" -"{time} 左右,{location}附近发生有感地震,预计规模 " -"M{magnitude}、深度{depth}公里。" +msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" +msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、深度{depth}公里。" #: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" @@ -810,36 +749,24 @@ msgid "我們是誰?" msgstr "我们是谁?" #: ./lib/app/welcome/2-exptech/page.dart:88 -msgid "" -"ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團" -"體。成員來自臺灣北中南、日本、韓國、中國的學生。" -msgstr "" -"ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的" -"团体。成员来自台湾北中南、日本、韩国、中国的学生。" +msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。" +msgstr "ExpTech Studio 是一群大部分由学生组成,平均年龄未满 20 岁、人数超过 15 人 的团体。成员来自台湾北中南、日本、韩国、中国的学生。" #: ./lib/app/welcome/2-exptech/page.dart:93 msgid "我們的初衷" msgstr "我们的初衷" #: ./lib/app/welcome/2-exptech/page.dart:98 -msgid "" -"成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成" -"現在的樣子。" -msgstr "" -"成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形" -"成现在的样子。" +msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。" +msgstr "成立初衷是招募一群对计算机及科技有兴趣及能力的同学,后来发展至校外,并逐渐形成现在的样子。" #: ./lib/app/welcome/3-notice/page.dart:38 msgid "注意事項" msgstr "注意事项" #: ./lib/app/welcome/3-notice/page.dart:75 -msgid "" -"根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可" -"能性,我們會盡力避免此類情況,但不保證一定不會發生。" -msgstr "" -"根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可" -"能性,我们会尽力避免此类情况,但不保证一定不会发生。" +msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。" +msgstr "根据网络状态、服务器状态、应用程序状态、上游数据来源状态等,有收不到信息的可能性,我们会尽力避免此类情况,但不保证一定不会发生。" #: ./lib/app/welcome/3-notice/page.dart:88 msgid "強烈搖晃有機率比通知早抵達使用者所在地。" @@ -858,12 +785,8 @@ msgid "歡迎使用 DPIP" msgstr "欢迎使用 DPIP" #: ./lib/app/welcome/1-about/page.dart:81 -msgid "" -"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資" -"訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" -msgstr "" -"DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信" -"息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" +msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" +msgstr "DPIP 是一款由台湾本土团队设计的 App,集成 TREM-Net (台湾即时地震观测网) 的信息及中央气象署数据,提供一个集成、单一且便利的防灾信息应用。" #: ./lib/app/welcome/4-permissions/page.dart:154 msgid "在重大災害發生時以通知來傳遞即時防災資訊" @@ -914,9 +837,8 @@ msgid "簡單" msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 -#, fuzzy msgid "報告" -msgstr "公告" +msgstr "" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -1429,3 +1351,4 @@ msgstr "{city}{cityLevel}" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" msgstr "{town}{townLevel}" + From 311752ff6493d6a74740667f08fb454140188632 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 14 Aug 2025 09:20:13 +0800 Subject: [PATCH 35/59] fix: text overflow --- lib/app/settings/map/page.dart | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/app/settings/map/page.dart b/lib/app/settings/map/page.dart index bdc49a90c..6901c5c3c 100644 --- a/lib/app/settings/map/page.dart +++ b/lib/app/settings/map/page.dart @@ -100,17 +100,19 @@ class SettingsMapPage extends StatelessWidget { Layout.row.left[16]( children: [ Icon(Symbols.animation_rounded, weight: 600, color: context.colors.secondary), - Layout.col.left( - children: [ - Text( - '動畫幀率'.i18n, - style: context.textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold), - ), - Text( - '影響強震監視器的震波模擬動畫流暢度'.i18n, - style: context.textTheme.bodyMedium?.copyWith(color: context.colors.onSurfaceVariant), - ), - ], + Expanded( + child: Layout.col.left.min( + children: [ + Text( + '動畫幀率'.i18n, + style: context.textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold), + ), + Text( + '影響強震監視器的震波模擬動畫流暢度'.i18n, + style: context.textTheme.bodyMedium?.copyWith(color: context.colors.onSurfaceVariant), + ), + ], + ), ), ], ), From 38062e32eadd62b0629dede160807e0e2a12cbb6 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Thu, 14 Aug 2025 15:08:05 +0800 Subject: [PATCH 36/59] fix: manager refresh data when shown (#385) --- lib/app/map/_lib/managers/precipitation.dart | 23 +++++++++++++---- lib/app/map/_lib/managers/radar.dart | 26 ++++++++++++++------ lib/app/map/_lib/managers/report.dart | 19 +++++++++----- lib/app/map/_lib/managers/temperature.dart | 25 +++++++++++++------ lib/app/map/_lib/managers/wind.dart | 21 ++++++++++------ 5 files changed, 81 insertions(+), 33 deletions(-) diff --git a/lib/app/map/_lib/managers/precipitation.dart b/lib/app/map/_lib/managers/precipitation.dart index cbf3af2b4..b4eaaeaa8 100644 --- a/lib/app/map/_lib/managers/precipitation.dart +++ b/lib/app/map/_lib/managers/precipitation.dart @@ -53,6 +53,8 @@ class PrecipitationMapLayerManager extends MapLayerManager { final currentPrecipitationInterval = ValueNotifier('now'); final isLoading = ValueNotifier(false); + DateTime? _lastFetchTime; + Function(String)? onTimeChanged; Future setPrecipitationTime(String time) async { @@ -108,6 +110,19 @@ class PrecipitationMapLayerManager extends MapLayerManager { } } + Future _fetchData() async { + try { + final precipitationList = (await ExpTech().getRainList()).reversed.toList(); + if (!context.mounted) return; + + GlobalProviders.data.setPrecipitation(precipitationList); + currentPrecipitationTime.value ??= precipitationList.first; + _lastFetchTime = DateTime.now(); + } catch (e, s) { + TalkerManager.instance.error('PrecipitationMapLayerManager._fetchData', e, s); + } + } + @override Future setup() async { if (didSetup) return; @@ -116,11 +131,7 @@ class PrecipitationMapLayerManager extends MapLayerManager { try { if (GlobalProviders.data.precipitation.isEmpty) { - final precipitationList = (await ExpTech().getRainList()).reversed.toList(); - if (!context.mounted) return; - - GlobalProviders.data.setPrecipitation(precipitationList); - currentPrecipitationTime.value = precipitationList.first; + await _fetchData(); } final time = currentPrecipitationTime.value; @@ -276,6 +287,8 @@ class PrecipitationMapLayerManager extends MapLayerManager { await _focus(); visible = true; + + if (_lastFetchTime == null || DateTime.now().difference(_lastFetchTime!).inMinutes > 5) await _fetchData(); } catch (e, s) { TalkerManager.instance.error('PrecipitationMapLayerManager.show', e, s); } diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index f82ab2712..51c25a517 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -33,6 +33,8 @@ class RadarMapLayerManager extends MapLayerManager { final playStartTime = ValueNotifier(null); final playEndTime = ValueNotifier(null); + DateTime? _lastFetchTime; + Timer? _playTimer; final Set _preloadedLayers = {}; final int Function()? getActiveLayerCount; @@ -324,21 +326,27 @@ class RadarMapLayerManager extends MapLayerManager { } } + Future _fetchData() async { + final radarList = (await ExpTech().getRadarList()).reversed.toList(); + if (!context.mounted) return; + + GlobalProviders.data.setRadar(radarList); + currentRadarTime.value ??= radarList.first; + _lastFetchTime = DateTime.now(); + } + @override Future setup() async { if (didSetup) return; try { - if (GlobalProviders.data.radar.isEmpty) { - final radarList = (await ExpTech().getRadarList()).reversed.toList(); - if (!context.mounted) return; + if (GlobalProviders.data.radar.isEmpty) await _fetchData(); - GlobalProviders.data.setRadar(radarList); - currentRadarTime.value = radarList.first; - } + final time = currentRadarTime.value; + if (time == null) throw Exception('Time is null'); - await _setupAndShowLayer(currentRadarTime.value!); - await _preloadAdjacentLayers(currentRadarTime.value!); + await _setupAndShowLayer(time); + await _preloadAdjacentLayers(time); didSetup = true; } catch (e, s) { @@ -376,6 +384,8 @@ class RadarMapLayerManager extends MapLayerManager { await _focus(); visible = true; + + if (_lastFetchTime == null || DateTime.now().difference(_lastFetchTime!).inMinutes > 5) await _fetchData(); } catch (e, s) { TalkerManager.instance.error('RadarMapLayerManager.show', e, s); } diff --git a/lib/app/map/_lib/managers/report.dart b/lib/app/map/_lib/managers/report.dart index 682cdd45d..e906e46c9 100644 --- a/lib/app/map/_lib/managers/report.dart +++ b/lib/app/map/_lib/managers/report.dart @@ -45,6 +45,8 @@ class ReportMapLayerManager extends MapLayerManager { final currentReport = ValueNotifier(null); final isLoading = ValueNotifier(false); + DateTime? _lastFetchTime; + Future setReport(String? reportId, {bool focus = true}) async { if (isLoading.value) return; @@ -96,17 +98,20 @@ class ReportMapLayerManager extends MapLayerManager { ); } + Future _fetchData() async { + final reportList = await ExpTech().getReportList(); + if (!context.mounted) return; + + GlobalProviders.data.setPartialReport(reportList); + _lastFetchTime = DateTime.now(); + } + @override Future setup() async { if (didSetup) return; try { - if (GlobalProviders.data.partialReport.isEmpty) { - final reportList = await ExpTech().getReportList(); - if (!context.mounted) return; - - GlobalProviders.data.setPartialReport(reportList); - } + if (GlobalProviders.data.partialReport.isEmpty) await _fetchData(); final sourceId = MapSourceIds.report(); final layerId = MapLayerIds.report(); @@ -201,6 +206,8 @@ class ReportMapLayerManager extends MapLayerManager { } visible = true; + + if (_lastFetchTime == null || DateTime.now().difference(_lastFetchTime!).inMinutes > 5) await _fetchData(); } catch (e, s) { TalkerManager.instance.error('ReportMapLayerManager.show', e, s); } diff --git a/lib/app/map/_lib/managers/temperature.dart b/lib/app/map/_lib/managers/temperature.dart index 423dbe952..5dbfd2428 100644 --- a/lib/app/map/_lib/managers/temperature.dart +++ b/lib/app/map/_lib/managers/temperature.dart @@ -52,6 +52,8 @@ class TemperatureMapLayerManager extends MapLayerManager { final currentTemperatureTime = ValueNotifier(GlobalProviders.data.temperature.firstOrNull); final isLoading = ValueNotifier(false); + DateTime? _lastFetchTime; + Function(String)? onTimeChanged; Future setTemperatureTime(String time) async { @@ -86,6 +88,19 @@ class TemperatureMapLayerManager extends MapLayerManager { } } + Future _fetchData() async { + try { + final temperatureList = (await ExpTech().getWeatherList()).reversed.toList(); + if (!context.mounted) return; + + GlobalProviders.data.setTemperature(temperatureList); + currentTemperatureTime.value ??= temperatureList.first; + _lastFetchTime = DateTime.now(); + } catch (e, s) { + TalkerManager.instance.error('TemperatureMapLayerManager._fetchData', e, s); + } + } + @override Future setup() async { if (didSetup) return; @@ -93,13 +108,7 @@ class TemperatureMapLayerManager extends MapLayerManager { final colors = context.colors; try { - if (GlobalProviders.data.temperature.isEmpty) { - final temperatureList = (await ExpTech().getWeatherList()).reversed.toList(); - if (!context.mounted) return; - - GlobalProviders.data.setTemperature(temperatureList); - currentTemperatureTime.value = temperatureList.first; - } + if (GlobalProviders.data.temperature.isEmpty) await _fetchData(); final time = currentTemperatureTime.value; @@ -248,6 +257,8 @@ class TemperatureMapLayerManager extends MapLayerManager { await _focus(); visible = true; + + if (_lastFetchTime == null || DateTime.now().difference(_lastFetchTime!).inMinutes > 5) await _fetchData(); } catch (e, s) { TalkerManager.instance.error('TemperatureMapLayerManager.show', e, s); } diff --git a/lib/app/map/_lib/managers/wind.dart b/lib/app/map/_lib/managers/wind.dart index eb11ddc9d..9c0c2e969 100644 --- a/lib/app/map/_lib/managers/wind.dart +++ b/lib/app/map/_lib/managers/wind.dart @@ -44,6 +44,8 @@ class WindMapLayerManager extends MapLayerManager { final currentWindTime = ValueNotifier(GlobalProviders.data.wind.firstOrNull); final isLoading = ValueNotifier(false); + DateTime? _lastFetchTime; + Function(String)? onTimeChanged; Future setWindTime(String time) async { @@ -64,6 +66,15 @@ class WindMapLayerManager extends MapLayerManager { } } + Future _fetchData() async { + final windList = (await ExpTech().getWeatherList()).reversed.toList(); + if (!context.mounted) return; + + GlobalProviders.data.setWind(windList); + currentWindTime.value ??= windList.first; + _lastFetchTime = DateTime.now(); + } + @override Future setup() async { if (didSetup) return; @@ -71,13 +82,7 @@ class WindMapLayerManager extends MapLayerManager { final colors = context.colors; try { - if (GlobalProviders.data.wind.isEmpty) { - final windList = (await ExpTech().getWeatherList()).reversed.toList(); - if (!context.mounted) return; - - GlobalProviders.data.setWind(windList); - currentWindTime.value = windList.first; - } + if (GlobalProviders.data.wind.isEmpty) await _fetchData(); final time = currentWindTime.value; @@ -201,6 +206,8 @@ class WindMapLayerManager extends MapLayerManager { await controller.setLayerVisibility('$layerId-label', true); visible = true; + + if (_lastFetchTime == null || DateTime.now().difference(_lastFetchTime!).inMinutes > 5) await _fetchData(); } catch (e, s) { TalkerManager.instance.error('WindMapLayerManager.show', e, s); } From 2bf12ec1f809418a1813cf19cc79472a54f72771 Mon Sep 17 00:00:00 2001 From: lowrt Date: Thu, 14 Aug 2025 15:57:23 +0800 Subject: [PATCH 37/59] Build: 300050001 --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index faf685a97..ce8d491b0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 35 - versionCode 300050000 + versionCode 300050001 versionName flutterVersionName multiDexEnabled true } From 2a928e7a51e0f26bef7b46b6bc3e1aa1f98e93cc Mon Sep 17 00:00:00 2001 From: lowrt Date: Thu, 14 Aug 2025 16:27:33 +0800 Subject: [PATCH 38/59] Build: 3.1.0 --- android/app/build.gradle | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index ce8d491b0..4408838fd 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 35 - versionCode 300050001 + versionCode 300100000 versionName flutterVersionName multiDexEnabled true } diff --git a/pubspec.yaml b/pubspec.yaml index 9867229d8..2f1fc03a4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: dpip description: "Disaster Prevention Information Platform" publish_to: 'none' -version: 3.0.5 +version: 3.1.0 environment: sdk: '>=3.7.0 <4.0.0' From 2ab683d5db3cc43bbbae0f0d7516166e2a17992e Mon Sep 17 00:00:00 2001 From: Lingling Date: Fri, 15 Aug 2025 07:37:47 +0800 Subject: [PATCH 39/59] ci: Xcode (#387) --- .github/workflows/ios.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 74cd3e5ab..613ba3a1f 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -31,8 +31,8 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Switch Xcode to 16.2 - run: sudo xcode-select -s /Applications/Xcode_16.2.app + - name: Switch Xcode + run: sudo xcode-select -s /Applications/Xcode_16.4.app - name: Cache Flutter SDK uses: actions/cache@v3 From 1ed7e58372aee71a15d911bb3027e60f9fb455d7 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Fri, 15 Aug 2025 09:18:26 +0800 Subject: [PATCH 40/59] fix(update_translation): update .pot only --- .crowdin/strings.pot | 70 +++++++-------- assets/translations/zh-Hant.po | 100 +++++++++++++-------- tools/update_translations.sh | 157 +++++++++++++++++++-------------- 3 files changed, 187 insertions(+), 140 deletions(-) diff --git a/.crowdin/strings.pot b/.crowdin/strings.pot index 420434c55..3d66edba2 100644 --- a/.crowdin/strings.pot +++ b/.crowdin/strings.pot @@ -30,7 +30,7 @@ msgstr "" msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "" @@ -582,19 +582,19 @@ msgstr "" msgid "監視器" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "" @@ -618,15 +618,15 @@ msgstr "" msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" @@ -844,55 +844,55 @@ msgstr "" msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "" @@ -936,59 +936,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "" diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index 2290a04f7..0b900a8d1 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -1,15 +1,15 @@ msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"Language-Team: Chinese Traditional\n" -"Language: zh_TW\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 20\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -43,7 +43,7 @@ msgstr "緊急地震速報" msgid "強震監視器" msgstr "強震監視器" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "地震報告" @@ -225,6 +225,8 @@ msgstr "緊急地震速報(重大)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:35 msgid "" +"最大震度 5 弱以上 且\n" +"所在地(鄉鎮)預估震度 4 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 4 以上" @@ -235,6 +237,8 @@ msgstr "緊急地震速報(一般)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:40 msgid "" +"最大震度 5 弱以上 且\n" +"所在地(鄉鎮)預估震度 2 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 2 以上" @@ -245,6 +249,8 @@ msgstr "緊急地震速報(無聲)" #: ./lib/app/settings/notify/(1.eew)/eew/page.dart:45 msgid "" +"最大震度 5 弱以上 且\n" +"所在地(鄉鎮)預估震度 1 以上" msgstr "" "最大震度 5 弱以上 且\n" "所在地(鄉鎮)預估震度 1 以上" @@ -283,12 +289,16 @@ msgstr "所在地(鄉鎮)發布防災資訊時" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:35 msgid "" +"所在地(鄉鎮)發布紅色燈號之\n" +"天氣警特報" msgstr "" "所在地(鄉鎮)發布紅色燈號之\n" "天氣警特報" #: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:40 msgid "" +"所在地(鄉鎮)發布上述除外燈號之\n" +"天氣警特報" msgstr "" "所在地(鄉鎮)發布上述除外燈號之\n" "天氣警特報" @@ -355,6 +365,10 @@ msgstr "正在載入商店物品中" #: ./lib/app/settings/donate/page.dart:161 msgid "" +"DPIP 作為一款致力於提供即時地震資訊的 " +"App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n" +"\n" +"您在下方所選的每一份支持,都將直接用於支付這些營運費用,幫助 DPIP 持續穩定地為您提供服務。感謝您的理解與慷慨!" msgstr "" "DPIP 作為一款致力於提供即時地震資訊的 " "App,目前並無廣告或其他盈利模式。為了維持高品質服務,我們需要承擔伺服器運行、地震數據獲取與傳輸、以及後續功能開發與維護的成本。\n" @@ -559,6 +573,8 @@ msgstr "定期更新目前的所在地" #: ./lib/app/settings/location/page.dart:242 msgid "" +"自動定位功能將使用您的裝置上的 GPS,即使 DPIP " +"關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" msgstr "" "自動定位功能將使用您的裝置上的 GPS,即使 DPIP " "關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。" @@ -595,19 +611,19 @@ msgstr "目前所在地" msgid "監視器" msgstr "監視器" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "雷達回波" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "氣溫" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "降水" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "風向/風速" @@ -631,15 +647,15 @@ msgstr "底圖" msgid "初始圖層" msgstr "初始圖層" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "動畫幀率" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "影響強震監視器的震波模擬動畫流暢度" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "過高的動畫幀率可能會造成卡頓或設備發熱" @@ -701,12 +717,16 @@ msgstr "第 {serial} 報" #: ./lib/app/map/_lib/managers/monitor.dart:1100 msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、所在地最大震度{intensity}。" msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" #: ./lib/app/map/_lib/managers/monitor.dart:926 msgid "" +"{time} 左右,{location}附近發生有感地震,預估規模 " +"M{magnitude}、深度{depth}公里。" msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、深度{depth}公里。" @@ -793,6 +813,8 @@ msgstr "歡迎使用 DPIP" #: ./lib/app/welcome/1-about/page.dart:81 msgid "" +"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) " +"之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" msgstr "" "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) " "之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。" @@ -857,55 +879,55 @@ msgstr "氣象" msgid "單位:{unit}" msgstr "單位:{unit}" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "長按設定播放起點" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "目前時間" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "播放起點" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "播放進度" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "今日" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10 分鐘" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1 小時" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3 小時" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6 小時" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12 小時" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24 小時" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2 天" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3 天" @@ -949,59 +971,59 @@ msgstr "{countdown}秒後抵達" msgid "已抵達" msgstr "已抵達" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "近期的地震報告" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "更多" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "編號 {number} 顯著有感地震" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "小區域有感地震" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "地震規模" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "震源深度" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "報告頁面" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "發震時間" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "位於" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "各地震度" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "地震報告圖" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "震度圖" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "最大地動加速度圖" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "最大地動速度圖" diff --git a/tools/update_translations.sh b/tools/update_translations.sh index 4412f02d7..4340f226c 100755 --- a/tools/update_translations.sh +++ b/tools/update_translations.sh @@ -1,7 +1,11 @@ #!/bin/bash -# 用於更新 .po 檔案與 .pot 檔案中最新翻譯的腳本 +# 用於更新 .pot 檔案與生成 zh-Hant.po 的腳本 # 此腳本應從專案根目錄執行 +# 其他語言的 .po 檔案由 Crowdin 自動同步管理 + +# 設定語言環境為繁體中文 +export LC_ALL=zh_TW.UTF-8 # 檢查終端機是否支援顏色 if [ -t 1 ] && [ -n "$TERM" ] && command -v tput >/dev/null 2>&1; then @@ -16,93 +20,114 @@ else RESET='' fi -# 檢查是否已安裝 msgmerge -if ! command -v msgmerge &> /dev/null; then - echo -e "${RED}msgmerge: command not found${RESET}" - echo - echo -e "${YELLOW}你需要安裝 gettext 套件來更新翻譯檔案。${RESET}" - echo - echo -e "${BLUE}如果你是 macOS 使用者:${RESET}" - echo " brew install gettext" - echo - echo -e "${BLUE}如果你是 Ubuntu/Debian 使用者:${RESET}" - echo " sudo apt-get update && sudo apt-get install gettext" - echo - echo -e "${BLUE}如果你是 Windows 使用者:${RESET}" - echo " choco install gettext # 使用 Chocolatey" - echo " pacman -S gettext # 使用 MSYS2" - echo - exit 1 -fi - # .po 檔案所在目錄 PO_DIR="./assets/translations" POT_FILE="./.crowdin/strings.pot" -# 執行 i18n 擴充功能匯入器 -echo -e "${BLUE}$ dart run i18n_extension_importer:getstrings --output-file ./.crowdin/strings.pot${RESET}" +# 執行 i18n 擴充功能匯入器來更新 .pot 檔案 +echo -e "${BLUE}> (1/3) 更新 .pot 檔案...${RESET}" dart run i18n_extension_importer:getstrings --output-file ./.crowdin/strings.pot echo -# 更新每個 .po 檔案(跳過 zh-Hant.po) -for po_file in "$PO_DIR"/*.po; do - if [ -f "$po_file" ] && [ "$(basename "$po_file")" != "zh-Hant.po" ]; then - echo -e -n "${BLUE}更新 $(basename "$po_file") ${RESET}" - LC_ALL=C msgmerge --update --backup=off "$po_file" "$POT_FILE" - fi -done - -# 確保所有 .po 檔案中的路徑都有 ./ 前綴 -echo -e "${BLUE}統一路徑格式...${RESET}" -for po_file in "$PO_DIR"/*.po; do - if [ -f "$po_file" ] && [ "$(basename "$po_file")" != "zh-Hant.po" ]; then - # 為路徑添加 ./ 前綴(如果還沒有的話) - LC_ALL=C sed -i '' 's|^#: \([^.]\)|#: ./\1|g' "$po_file" - fi -done - # 重新產生 zh-Hant.po(使用固定標頭並直接從 .pot 檔案複製內容) ZH_HANT_PO="$PO_DIR/zh-Hant.po" -echo -e "${BLUE}重新產生 zh-Hant.po...${RESET}" +echo -e "${BLUE}> (2/3) 重新產生 zh-Hant.po...${RESET}" # 創建帶有固定標頭的新檔案 cat > "$ZH_HANT_PO" << 'EOF' msgid "" msgstr "" -"Project-Id-Version: dpip\n" -"Language-Team: Chinese Traditional\n" -"Language: zh_TW\n" -"Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: dpip\n" "X-Crowdin-Project-ID: 696803\n" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /main/.crowdin/strings.pot\n" "X-Crowdin-File-ID: 20\n" +"Project-Id-Version: dpip\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" EOF -# 直接從 .pot 檔案複製內容並將 msgstr 設為 msgid 的內容 -LC_ALL=C sed 's/^msgstr ""/msgstr/' "$POT_FILE" | LC_ALL=C awk ' -/^#/ { print; next } -/^msgid / { - msgid_line = $0 - msgid_content = substr($0, 7) - print msgid_line - # 輸出對應的 msgstr(複製 msgid 的內容) +# 從 .pot 檔案複製內容並將 msgstr 設為 msgid 的內容 +gawk ' +BEGIN { + collecting_msgid = 0 + msgid_lines = "" + msgid_content = "" +} + +# 註解行直接印出 +/^#/ { print $0; next } + +# 空行直接印出,並重置狀態 +/^$/ { + collecting_msgid = 0 + msgid_lines = "" + msgid_content = "" + print "" + next +} + +# msgid 開始 +/^msgid/ { + collecting_msgid = 1 + msgid_lines = "" + msgid_content = "" + print $0 + + # 單行 msgid + if ($0 ~ /^msgid ".+"$/) { + msgid_content = substr($0, 7) # 去掉 "msgid " 保留引號 + collecting_msgid = 0 + } + next +} + +# 多行 msgid 的續行 +collecting_msgid && /^"/ { + print $0 + if (msgid_lines == "") { + msgid_lines = $0 + } else { + msgid_lines = msgid_lines "\n" $0 + } + next +} + +# msgstr 行 +/^msgstr/ { + collecting_msgid = 0 + + # 單行情況 + if (msgid_content != "") { print "msgstr " msgid_content - next + } + # 多行情況 + else if (msgid_lines != "") { + print "msgstr \"\"" + print msgid_lines + } + # 空的情況 + else { + print $0 + } + + msgid_content = "" + msgid_lines = "" + next } -/^msgstr/ { next } # 跳過原有的空 msgstr 行 -/^$/ { print; next } # 保留空行 -{ print } # 輸出其他所有行 -' >> "$ZH_HANT_PO" - -# 最後確保所有 .po 檔案(包括 zh-Hant.po)的路徑格式一致 -echo -e "${BLUE}統一所有檔案的路徑格式...${RESET}" -for po_file in "$PO_DIR"/*.po; do - if [ -f "$po_file" ]; then - # 為路徑添加 ./ 前綴(如果還沒有的話) - LC_ALL=C sed -i '' 's|^#: \([^.]\)|#: ./\1|g' "$po_file" - fi -done + +# 跳過原本的 msgstr 續行 +/^"/ && !collecting_msgid { next } + +# 其他行直接印出 +{ print $0 } +' "$POT_FILE" >> "$ZH_HANT_PO" + +# 統一路徑格式 +echo -e "${BLUE}> (3/3) 統一路徑格式...${RESET}" +sed -i '' 's|^#: \([^.]\)|#: ./\1|g' "$ZH_HANT_PO" + +echo -e "${BLUE}> 完成!${RESET}" From 6873edf651f582d8c92aaeb36e995a33811bcc5c Mon Sep 17 00:00:00 2001 From: Lingling Date: Fri, 15 Aug 2025 09:38:26 +0800 Subject: [PATCH 41/59] fix: i18n (#386) --- lib/app/settings/map/page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/app/settings/map/page.dart b/lib/app/settings/map/page.dart index 6901c5c3c..d5757790a 100644 --- a/lib/app/settings/map/page.dart +++ b/lib/app/settings/map/page.dart @@ -53,7 +53,7 @@ class SettingsMapPage extends StatelessWidget { MapLayer.wind: '風向/風速'.i18n, }; final baseMapLabels = { - BaseMapType.exptech: '線條'.i18n, + BaseMapType.exptech: '簡單'.i18n, BaseMapType.osm: 'OpenStreetMap'.i18n, BaseMapType.google: 'Google'.i18n, }; From ebb7adc7d0203389cdef8ddb70a39834eff93674 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Fri, 15 Aug 2025 09:39:51 +0800 Subject: [PATCH 42/59] New Crowdin updates (#384) * New translations strings.pot (Japanese) * New translations strings.pot (Korean) * New translations strings.pot (English) * New translations strings.pot (Vietnamese) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Japanese) * New translations strings.pot (Korean) * New translations strings.pot (Russian) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (English) * New translations strings.pot (Vietnamese) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) * New translations strings.pot (English) --- assets/translations/en.po | 86 +-- assets/translations/ja.po | 80 +- assets/translations/ko.po | 84 +-- assets/translations/location_names.csv | 238 +++--- assets/translations/ru.po | 72 +- assets/translations/vi.po | 80 +- assets/translations/weather_station_names.csv | 698 +++++++++--------- assets/translations/zh-Hans.po | 88 +-- 8 files changed, 713 insertions(+), 713 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index e6b80dc8f..fb2de564d 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: English\n" "Language: en_US\n" -"PO-Revision-Date: 2025-08-14 01:07\n" +"PO-Revision-Date: 2025-08-15 01:39\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "Earthquake Early Warning" msgid "強震監視器" msgstr "Earthquake Monitor" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "Reports" @@ -589,19 +589,19 @@ msgstr "Current Location" msgid "監視器" msgstr "Monitor" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "Radar" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "Temperature" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "Precipitation" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "Wind/Gust" @@ -611,7 +611,7 @@ msgstr "Simple" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" -msgstr "" +msgstr "OpenStreetMap" #: ./lib/app/settings/map/page.dart:58 msgid "Google" @@ -625,15 +625,15 @@ msgstr "Base Map" msgid "初始圖層" msgstr "Initial Layer" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "Animation frame rate" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "Affects the smoothness of the seismic wave simulation in the Earthquake Monitor." -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "Excessively high the animation frame rate may cause lag or device overheating" @@ -807,7 +807,7 @@ msgstr "Used to store data visualization images provided by the Central Meteorol #: ./lib/app/welcome/4-permissions/page.dart:342 msgid "權限請求" -msgstr "" +msgstr "Permission request" #: ./lib/app/welcome/4-permissions/page.dart:343 msgid "需要使用者手動到設定開啟相關權限。" @@ -831,11 +831,11 @@ msgstr "Select the layer you want to display" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "簡單" -msgstr "" +msgstr "Simple" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" -msgstr "" +msgstr "Reports" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -845,55 +845,55 @@ msgstr "Weather" msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "Long press to set the start point of playback" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "Current time" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "Play start" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "Today" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10 min" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24 hr" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2 d" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3 d" @@ -915,7 +915,7 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:279 msgid "無資料" -msgstr "" +msgstr "No data" #: ./lib/app/map/_lib/managers/monitor.dart:792 msgid "目前沒有生效中的地震速報" @@ -937,59 +937,59 @@ msgstr "{countdown} Arrived in seconds" msgid "已抵達" msgstr "Arrived" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "Recent Earthquake Reports" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "More" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "No. {number} Significantly Felt Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "Local Earthquake" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "Magnitude" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "Depth" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "Web" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "Event Time" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "Location" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "Observed Intensities" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "Earthquake Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "Intensity Map Image" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "Max PGA Image" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "Max PGV Image" @@ -1031,7 +1031,7 @@ msgstr "Done" #: ./lib/route/announcement/announcement.dart:22 msgid "地震相關" -msgstr "" +msgstr "Seismic" #: ./lib/route/announcement/announcement.dart:23 msgid "氣象相關" @@ -1043,7 +1043,7 @@ msgstr "Unknown" #: ./lib/route/announcement/announcement.dart:103 msgid "目前沒有公告" -msgstr "" +msgstr "There is no announcement." #: ./lib/route/announcement/announcement.dart:223 msgid "公告詳情" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index f011ae7f1..67e067ee5 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Japanese\n" "Language: ja_JP\n" -"PO-Revision-Date: 2025-08-14 00:59\n" +"PO-Revision-Date: 2025-08-15 01:20\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "緊急地震速報" msgid "強震監視器" msgstr "強震モニター" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "地震情報" @@ -589,21 +589,21 @@ msgstr "現在地" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" -msgstr "" +msgstr "強震モニター" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "レーダー" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "気温" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "降水量" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "風向・風速" @@ -627,15 +627,15 @@ msgstr "ベースマップ" msgid "初始圖層" msgstr "初期レイヤー" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "動画のフレームレート" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" -msgstr "" +msgstr "強震モニターの地震波アニメーションの滑らかさを調整します" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "速すぎたフレームレートはラッグや設備発熱に至る可能性があります" @@ -833,11 +833,11 @@ msgstr "表示する地図のレイヤーを選択してください" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "簡單" -msgstr "" +msgstr "シンプル" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" -msgstr "" +msgstr "地震情報" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -847,55 +847,55 @@ msgstr "気象" msgid "單位:{unit}" msgstr "単位:{unit}" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "長タッチして再生の起点を設定する" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "表示中の時刻" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "再生の起点" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "再生中" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "今日" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10分間" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24時間" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2日間" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3日間" @@ -939,59 +939,59 @@ msgstr "到達まであと{countdown}秒" msgid "已抵達" msgstr "到達し" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "最近の地震情報" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "さらに表示" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "ID #{number} の顕著な地震" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "局地的地震" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "マグニチュード" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "震源の深さ" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "Webで見る" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "発震時刻" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "震源地" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "各地の震度" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "地震情報図" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "震度分布図" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "地動最大加速度" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "地動最大速度" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index 873a41823..e168c63c5 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Korean\n" "Language: ko_KR\n" -"PO-Revision-Date: 2025-08-14 01:07\n" +"PO-Revision-Date: 2025-08-15 01:20\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "긴급 지진 속보" msgid "強震監視器" msgstr "강진 모니터" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "지진 보고" @@ -587,19 +587,19 @@ msgstr "현재 위치" msgid "監視器" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "레이더" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "기온" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "강우" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "풍향/풍속" @@ -609,11 +609,11 @@ msgstr "선" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" -msgstr "" +msgstr "OpenStreetMap" #: ./lib/app/settings/map/page.dart:58 msgid "Google" -msgstr "" +msgstr "Google" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:106 msgid "底圖" @@ -623,15 +623,15 @@ msgstr "배경 레이어" msgid "初始圖層" msgstr "기본 지도" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "애니메이션 주사율" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "지나치게 높은 애니메이션 주사율은 끊김 현상이나 기기 발열을 일으킬 수 있습니다" @@ -843,55 +843,55 @@ msgstr "기상" msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "길게 눌러 재생 시작 지점 설정" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "현재 시간" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "재생 시작 지점" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "재생 진행도" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "오늘" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10 분" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24 시간" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2 일" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3 일" @@ -935,59 +935,59 @@ msgstr "{countdown}초 후 도착" msgid "已抵達" msgstr "도착" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "최근 지진 현황" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "더 보기" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "번호 {number} 강한 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "소구역 체감 지진" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "지진 규모" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "진원 깊이" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "보고 페이지" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "지진 발생 시간" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "에 위치" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "각 지역 진도" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "지진 보고" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "진도" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "최대 지반 가속도" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "최대 지반 속도" @@ -1333,17 +1333,17 @@ msgstr "흐림・강한 천둥/우박" #: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" -msgstr "" +msgstr "{city}{cityLevel} {town}{townLevel}" #: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" -msgstr "" +msgstr "{city} {town}" #: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" -msgstr "" +msgstr "{city}{cityLevel}" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" -msgstr "" +msgstr "{town}{townLevel}" diff --git a/assets/translations/location_names.csv b/assets/translations/location_names.csv index f5125e196..a7e847600 100644 --- a/assets/translations/location_names.csv +++ b/assets/translations/location_names.csv @@ -37,41 +37,41 @@ "水上","水上","Shuishang","水上","水上","水上","水上","水上" "員林","員林","Yuanlin","員林","員林","員林","員林","员林" "小港","小港","Xiaogang","小港","小港","小港","小港","小港" -"蘇澳","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","蘇澳" -"五結","五結","Wujie","五結","五結","五結","五結","五結" -"壯圍","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壯圍" +"蘇澳","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","苏澳" +"五結","五結","Wujie","五結","五結","五結","五結","五结" +"壯圍","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壮围" "南竿","南竿","Nangan","南竿","南竿","南竿","南竿","南竿" "莒光","莒光","Juguang","莒光","莒光","莒光","莒光","莒光" -"烏坵","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","烏坵" -"羅東","羅東","Luodong","羅東","羅東","羅東","羅東","羅東" -"員山","員山","Yuanshan","員山","員山","員山","員山","員山" +"烏坵","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","乌坵" +"羅東","羅東","Luodong","羅東","羅東","羅東","羅東","罗东" +"員山","員山","Yuanshan","員山","員山","員山","員山","员山" "冬山","冬山","Dongshan","冬山","冬山","冬山","冬山","冬山" "三星","三星","Sanxing","三星","三星","三星","三星","三星" "大同","大同","Datong","大同","大同","大同","大同","大同" -"竹東","竹東","Zhudong","竹東","竹東","竹東","竹東","竹東" +"竹東","竹東","Zhudong","竹東","竹東","竹東","竹東","竹东" "新埔","新埔","Sinpu","新埔","新埔","新埔","新埔","新埔" -"關西","關西","Guanxi","関西","關西","關西","關西","關西" +"關西","關西","Guanxi","関西","關西","關西","關西","关西" "湖口","湖口","Hukou","湖口","湖口","湖口","湖口","湖口" "芎林","芎林","Qionglin","芎林","芎林","芎林","芎林","芎林" -"橫山","橫山","Hengshan","横山","橫山","橫山","橫山","橫山" +"橫山","橫山","Hengshan","横山","橫山","橫山","橫山","横山" "北埔","北埔","Beipu","北埔","北埔","北埔","北埔","北埔" "五峰","五峰","Wufeng","五峰","五峰","五峰","五峰","五峰" -"龍井","龍井","Longjing","龍井","龍井","龍井","龍井","龍井" +"龍井","龍井","Longjing","龍井","龍井","龍井","龍井","龙井" "大雅","大雅","Daya","大雅","大雅","大雅","大雅","大雅" "沙鹿","沙鹿","Shalu","沙鹿","沙鹿","沙鹿","沙鹿","沙鹿" -"梧棲","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧棲" +"梧棲","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧栖" "湖西","湖西","Husi","湖西","湖西","湖西","湖西","湖西" "金峰","金峰","Jinfeng","金峰","金峰","金峰","金峰","金峰" "太麻里","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" -"卓蘭","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓蘭" +"卓蘭","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓兰" "大湖","大湖","Dahu","大湖","大湖","大湖","大湖","大湖" -"公館","公館","Gongguan","公館","公館","公館","公館","公館" -"銅鑼","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","銅鑼" -"頭屋","頭屋","Touwu","頭屋","頭屋","頭屋","頭屋","頭屋" -"三義","三義","Sanyi","三義","三義","三義","三義","三義" +"公館","公館","Gongguan","公館","公館","公館","公館","公馆" +"銅鑼","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","铜锣" +"頭屋","頭屋","Touwu","頭屋","頭屋","頭屋","頭屋","头屋" +"三義","三義","Sanyi","三義","三義","三義","三義","三义" "西湖","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" -"造橋","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" -"獅潭","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" +"造橋","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造桥" +"獅潭","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","狮潭" "和美","和美","Hemei","和美","和美","和美","和美","和美" "線西","線西","Xianxi","線西","線西","線西","線西","线西" "伸港","伸港","Shenggang","伸港","伸港","伸港","伸港","伸港" @@ -124,52 +124,52 @@ "民雄","民雄","Minxiong","民雄","民雄","民雄","民雄","民雄" "溪口","溪口","Xikou","渓口","溪口","溪口","溪口","溪口" "新港","新港","Xingang","新港","新港","新港","新港","新港" -"六腳","六腳","Liujiao","六脚","六腳","六腳","六腳","六腳" -"義竹","義竹","Yizhu","義竹","義竹","義竹","義竹","義竹" +"六腳","六腳","Liujiao","六脚","六腳","六腳","六腳","六脚" +"義竹","義竹","Yizhu","義竹","義竹","義竹","義竹","义竹" "鹿草","鹿草","Lucao","鹿草","鹿草","鹿草","鹿草","鹿草" "竹崎","竹崎","Zhuqi","竹崎","竹崎","竹崎","竹崎","竹崎" "梅山","梅山","Meishan","梅山","梅山","梅山","梅山","梅山" "大埔","大埔","Dapu","大埔","大埔","大埔","大埔","大埔" "阿里山","阿里山","Alishan","阿里山","阿里山","阿里山","阿里山","阿里山" "潮州","潮州","Chaojhou","潮州","潮州","潮州","潮州","潮州" -"長治","長治","Changzhi","長治","長治","長治","長治","長治" +"長治","長治","Changzhi","長治","長治","長治","長治","长治" "麟洛","麟洛","Linluo","麟洛","麟洛","麟洛","麟洛","麟洛" "九如","九如","Jiuru","九如","九如","九如","九如","九如" "里港","里港","Ligang","里港","里港","里港","里港","里港" -"鹽埔","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","鹽埔" -"高樹","高樹","Gaoshu","高樹","高樹","高樹","高樹","高樹" -"萬巒","萬巒","Wanluan","万巒","萬巒","萬巒","萬巒","萬巒" -"內埔","內埔","Neipu","内埔","內埔","內埔","內埔","內埔" +"鹽埔","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","盐埔" +"高樹","高樹","Gaoshu","高樹","高樹","高樹","高樹","高树" +"萬巒","萬巒","Wanluan","万巒","萬巒","萬巒","萬巒","万峦" +"內埔","內埔","Neipu","内埔","內埔","內埔","內埔","内埔" "新埤","新埤","Xinpi","新埤","新埤","新埤","新埤","新埤" -"崁頂","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁頂" +"崁頂","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁顶" "南州","南州","Nanzhou","南州","南州","南州","南州","南州" "琉球","琉球","Liuqiu","琉球","琉球","琉球","琉球","琉球" -"三地門","三地門","Sandimen","三地門","三地門","三地門","三地門","三地門" -"霧臺","霧臺","Wutai","霧台","霧臺","霧臺","霧臺","霧臺" -"瑪家","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","瑪家" +"三地門","三地門","Sandimen","三地門","三地門","三地門","三地門","三地门" +"霧臺","霧臺","Wutai","霧台","霧臺","霧臺","霧臺","雾台" +"瑪家","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","玛家" "泰武","泰武","Taiwu","泰武","泰武","泰武","泰武","泰武" -"來義","來義","Laiyi","来義","來義","來義","來義","來義" +"來義","來義","Laiyi","来義","來義","來義","來義","来义" "春日","春日","Chunri","春日","春日","春日","春日","春日" -"獅子","獅子","Shizi","獅子","獅子","獅子","獅子","獅子" +"獅子","獅子","Shizi","獅子","獅子","獅子","獅子","狮子" "鹿野","鹿野","Luye","鹿野","鹿野","鹿野","鹿野","鹿野" "池上","池上","Chihshang","池上","池上","池上","池上","池上" "延平","延平","Yanping","延平","延平","延平","延平","延平" -"光復","光復","Guangfu","光復","光復","光復","光復","光復" +"光復","光復","Guangfu","光復","光復","光復","光復","光复" "瑞穗","瑞穗","Ruisui","瑞穂","瑞穗","瑞穗","瑞穗","瑞穗" "富里","富里","Fuli","富里","富里","富里","富里","富里" -"馬公","馬公","Magong","馬公","馬公","馬公","馬公","馬公" +"馬公","馬公","Magong","馬公","馬公","馬公","馬公","马公" "白沙","白沙","Baisha","白沙","白沙","白沙","白沙","白沙" -"西嶼","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西嶼" +"西嶼","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西屿" "望安","望安","Wangan","望安","望安","望安","望安","望安" "七美","七美","Qimei","七美","七美","七美","七美","七美" "暖暖","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" "大安","大安","Da-An","大安","大安","大安","大安","大安" "文山","文山","Wenshan","文山","文山","文山","文山","文山" -"鹽埕","鹽埕","Yancheng","塩埕","鹽埕","鹽埕","鹽埕","鹽埕" -"新興","新興","Sinsing","新興","新興","新興","新興","新興" +"鹽埕","鹽埕","Yancheng","塩埕","鹽埕","鹽埕","鹽埕","盐埕" +"新興","新興","Sinsing","新興","新興","新興","新興","新兴" "前金","前金","Qianjin","前金","前金","前金","前金","前金" -"前鎮","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前鎮" -"頭城","頭城","Toucheng","頭城","頭城","頭城","頭城","頭城" +"前鎮","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前镇" +"頭城","頭城","Toucheng","頭城","頭城","頭城","頭城","头城" "南澳","南澳","Nanao","南澳","南澳","南澳","南澳","南澳" "竹北","竹北","Zhubei","竹北","竹北","竹北","竹北","竹北" "新豐","新豐","Sinfong","新豊","新豐","新豐","新豐","新丰" @@ -179,72 +179,72 @@ "後龍","後龍","Houlong","後龍","後龍","後龍","後龍","后龙" "鹿港","鹿港","Lukang","鹿港","鹿港","鹿港","鹿港","鹿港" "福興","福興","Fuxing","福興","福興","福興","福興","福兴" -"臺西","臺西","Taixi","台西","臺西","臺西","臺西","臺西" +"臺西","臺西","Taixi","台西","臺西","臺西","臺西","台西" "四湖","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" "口湖","口湖","Kouhu","口湖","口湖","口湖","口湖","口湖" "布袋","布袋","Budai","布袋","布袋","布袋","布袋","布袋" -"東港","東港","Donggang","東港","東港","東港","東港","東港" +"東港","東港","Donggang","東港","東港","東港","東港","东港" "枋寮","枋寮","Fangliao","枋寮","枋寮","枋寮","枋寮","枋寮" -"新園","新園","Xinyuan","新園","新園","新園","新園","新園" -"林邊","林邊","Linbian","林辺","林邊","林邊","林邊","林邊" -"車城","車城","Checheng","車城","車城","車城","車城","車城" -"滿州","滿州","Manzhou","満州","滿州","滿州","滿州","滿州" +"新園","新園","Xinyuan","新園","新園","新園","新園","新园" +"林邊","林邊","Linbian","林辺","林邊","林邊","林邊","林边" +"車城","車城","Checheng","車城","車城","車城","車城","车城" +"滿州","滿州","Manzhou","満州","滿州","滿州","滿州","满州" "枋山","枋山","Fangshan","枋山","枋山","枋山","枋山","枋山" "牡丹","牡丹","Mudan","牡丹","牡丹","牡丹","牡丹","牡丹" "卑南","卑南","Beinan","卑南","卑南","卑南","卑南","卑南" -"東河","東河","Donghe","東河","東河","東河","東河","東河" +"東河","東河","Donghe","東河","東河","東河","東河","东河" "吉安","吉安","Ji'an","吉安","吉安","吉安","吉安","吉安" -"壽豐","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","壽豐" +"壽豐","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","寿丰" "秀林","秀林","Xiulin","秀林","秀林","秀林","秀林","秀林" "楠梓","楠梓","Nanzi","楠梓","楠梓","楠梓","楠梓","楠梓" -"鳳山","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","鳳山" +"鳳山","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","凤山" "大寮","大寮","Daliao","大寮","大寮","大寮","大寮","大寮" -"大樹","大樹","Dashu","大樹","大樹","大樹","大樹","大樹" +"大樹","大樹","Dashu","大樹","大樹","大樹","大樹","大树" "大社","大社","Dashe","大社","大社","大社","大社","大社" "仁武","仁武","Renwu","仁武","仁武","仁武","仁武","仁武" -"鳥松","鳥松","Niaosong","鳥松","鳥松","鳥松","鳥松","鳥松" -"岡山","岡山","Gangshan","岡山","岡山","岡山","岡山","岡山" -"橋頭","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","橋頭" +"鳥松","鳥松","Niaosong","鳥松","鳥松","鳥松","鳥松","鸟松" +"岡山","岡山","Gangshan","岡山","岡山","岡山","岡山","冈山" +"橋頭","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","桥头" "燕巢","燕巢","Yanchao","燕巣","燕巢","燕巢","燕巢","燕巢" "田寮","田寮","Tianliao","田寮","田寮","田寮","田寮","田寮" -"阿蓮","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿蓮" +"阿蓮","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿连" "路竹","路竹","Luzhu","路竹","路竹","路竹","路竹","路竹" -"湖內","湖內","Hunei","湖内","湖內","湖內","湖內","湖內" +"湖內","湖內","Hunei","湖内","湖內","湖內","湖內","湖内" "旗山","旗山","Qishan","旗山","旗山","旗山","旗山","旗山" -"美濃","美濃","Meinong","美濃","美濃","美濃","美濃","美濃" -"六龜","六龜","Liugui","六亀","六龜","六龜","六龜","六龜" +"美濃","美濃","Meinong","美濃","美濃","美濃","美濃","美浓" +"六龜","六龜","Liugui","六亀","六龜","六龜","六龜","六龟" "甲仙","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" "杉林","杉林","Shanlin","杉林","杉林","杉林","杉林","杉林" -"內門","內門","Neimen","内門","內門","內門","內門","內門" +"內門","內門","Neimen","内門","內門","內門","內門","内门" "茂林","茂林","Maolin","茂林","茂林","茂林","茂林","茂林" "桃源","桃源","Taoyuan","桃源","桃源","桃源","桃源","桃源" -"那瑪夏","那瑪夏","Namaxia","那瑪夏","那瑪夏","那瑪夏","那瑪夏","那瑪夏" +"那瑪夏","那瑪夏","Namaxia","那瑪夏","那瑪夏","那瑪夏","那瑪夏","那玛夏" "永和","永和","Yonghe","永和","永和","永和","永和","永和" "新店","新店","Xindian","新店","新店","新店","新店","新店" "土城","土城","Tucheng","土城","土城","土城","土城","土城" -"蘆洲","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","蘆洲" +"蘆洲","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","芦洲" "五股","五股","Wugu","五股","五股","五股","五股","五股" "坪林","坪林","Pinglin","坪林","坪林","坪林","坪林","坪林" "平溪","平溪","Pingxi","平渓","平溪","平溪","平溪","平溪" -"烏來","烏來","Wulai","烏来","烏來","烏來","烏來","烏來" -"豐原","豐原","Fengyuan","豊原","豐原","豐原","豐原","豐原" +"烏來","烏來","Wulai","烏来","烏來","烏來","烏來","乌来" +"豐原","豐原","Fengyuan","豊原","豐原","豐原","豐原","丰原" "后里","后里","Houli","后里","后里","后里","后里","后里" -"神岡","神岡","Shengang","神岡","神岡","神岡","神岡","神岡" +"神岡","神岡","Shengang","神岡","神岡","神岡","神岡","神冈" "新社","新社","Xinshe","新社","新社","新社","新社","新社" -"石岡","石岡","Shigang","石岡","石岡","石岡","石岡","石岡" +"石岡","石岡","Shigang","石岡","石岡","石岡","石岡","石冈" "外埔","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" "大肚","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" -"新營","新營","Xinying","新営","新營","新營","新營","新營" -"鹽水","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","鹽水" +"新營","新營","Xinying","新営","新營","新營","新營","新营" +"鹽水","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","盐水" "白河","白河","Baihe","白河","白河","白河","白河","白河" -"後壁","後壁","Houbi","後壁","後壁","後壁","後壁","後壁" +"後壁","後壁","Houbi","後壁","後壁","後壁","後壁","后壁" "麻豆","麻豆","Madou","麻豆","麻豆","麻豆","麻豆","麻豆" -"下營","下營","Xiaying","下営","下營","下營","下營","下營" +"下營","下營","Xiaying","下営","下營","下營","下營","下营" "六甲","六甲","Liujia","六甲","六甲","六甲","六甲","六甲" "官田","官田","Guantian","官田","官田","官田","官田","官田" -"大內","大內","Danei","大内","大內","大內","大內","大內" +"大內","大內","Danei","大内","大內","大內","大內","大内" "佳里","佳里","Jiali","佳里","佳里","佳里","佳里","佳里" -"學甲","學甲","Xuejia","学甲","學甲","學甲","學甲","學甲" +"學甲","學甲","Xuejia","学甲","學甲","學甲","學甲","学甲" "西港","西港","Xigang","西港","西港","西港","西港","西港" "新化","新化","Xinhua","新化","新化","新化","新化","新化" "新市","新市","Xinshi","新市","新市","新市","新市","新市" @@ -252,17 +252,17 @@ "玉井","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" "楠西","楠西","Nanxi","楠西","楠西","楠西","楠西","楠西" "南化","南化","Nanhua","南化","南化","南化","南化","南化" -"左鎮","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左鎮" +"左鎮","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左镇" "仁德","仁德","Rende","仁徳","仁德","仁德","仁德","仁德" -"歸仁","歸仁","Guiren","帰仁","歸仁","歸仁","歸仁","歸仁" -"關廟","關廟","Guanmiao","関廟","關廟","關廟","關廟","關廟" -"龍崎","龍崎","Longqi","龍崎","龍崎","龍崎","龍崎","龍崎" +"歸仁","歸仁","Guiren","帰仁","歸仁","歸仁","歸仁","归仁" +"關廟","關廟","Guanmiao","関廟","關廟","關廟","關廟","关庙" +"龍崎","龍崎","Longqi","龍崎","龍崎","龍崎","龍崎","龙崎" "永康","永康","Yongkang","永康","永康","永康","永康","永康" "北","北","North","北","北","北","北","北" -"林園","林園","Linyuan","林園","林園","林園","林園","林園" +"林園","林園","Linyuan","林園","林園","林園","林園","林园" "茄萣","茄萣","Qieding","茄萣","茄萣","茄萣","茄萣","茄萣" "永安","永安","Yong'An","永安","永安","永安","永安","永安" -"彌陀","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","彌陀" +"彌陀","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","弥陀" "梓官","梓官","Ziguan","梓官","梓官","梓官","梓官","梓官" "淡水","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" "瑞芳","瑞芳","Rueifang","瑞芳","瑞芳","瑞芳","瑞芳","瑞芳" @@ -270,69 +270,69 @@ "三芝","三芝","Sanzhi","三芝","三芝","三芝","三芝","三芝" "八里","八里","Bali","八里","八里","八里","八里","八里" "大甲","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" -"北門","北門","Beimen","北門","北門","北門","北門","北門" +"北門","北門","Beimen","北門","北門","北門","北門","北门" "安南","安南","Annan","安南","安南","安南","安南","安南" -"蘆竹","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","蘆竹" -"龜山","龜山","Guishan","亀山","龜山","龜山","龜山","龜山" -"復興","復興","Fuxing","復興","復興","復興","復興","復興" -"東","東","East","東","東","東","東","東" +"蘆竹","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","芦竹" +"龜山","龜山","Guishan","亀山","龜山","龜山","龜山","龟山" +"復興","復興","Fuxing","復興","復興","復興","復興","复兴" +"東","東","East","東","東","東","東","东" "西","西","West","西","西","西","西","西" -"達仁","達仁","Daren","達仁","達仁","達仁","達仁","達仁" +"達仁","達仁","Daren","達仁","達仁","達仁","達仁","达仁" "大武","大武","Dawu","大武","大武","大武","大武","大武" -"關山","關山","Guanshan","関山","關山","關山","關山","關山" +"關山","關山","Guanshan","関山","關山","關山","關山","关山" "海端","海端","Haiduan","海端","海端","海端","海端","海端" "香山","香山","Xiangshan","香山","香山","香山","香山","香山" "礁溪","礁溪","Chiaoshi","礁渓","礁溪","礁溪","礁溪","礁溪" "玉里","玉里","Yuli","玉里","玉里","玉里","玉里","玉里" "卓溪","卓溪","Zhuoxi","卓渓","卓溪","卓溪","卓溪","卓溪" -"頭份","頭份","Toufen","頭份","頭份","頭份","頭份","頭份" +"頭份","頭份","Toufen","頭份","頭份","頭份","頭份","头份" "清水","清水","Qingshui","清水","清水","清水","清水","清水" "南","南","South","南","南","南","南","南" "安平","安平","Anping","安平","安平","安平","安平","安平" "中西","中西","West Central","中西","中西","中西","中西","中西" "大溪","大溪","Dasi","大渓","大溪","大溪","大溪","大溪" "八德","八德","Bade","八徳","八德","八德","八德","八德" -"大園","大園","Dayuan","大園","大園","大園","大園","大園" -"楊梅","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","楊梅" +"大園","大園","Dayuan","大園","大園","大園","大園","大园" +"楊梅","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","杨梅" "七堵","七堵","Qidu","七堵","七堵","七堵","七堵","七堵" "中正","中正","Zhongzheng","中正","中正","中正","中正","中正" "中山","中山","Zhongshan","中山","中山","中山","中山","中山" -"安樂","安樂","Anle","安楽","安樂","安樂","安樂","安樂" -"三峽","三峽","Sanshia","三峡","三峽","三峽","三峽","三峽" -"鶯歌","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","鶯歌" +"安樂","安樂","Anle","安楽","安樂","安樂","安樂","安乐" +"三峽","三峽","Sanshia","三峡","三峽","三峽","三峽","三峡" +"鶯歌","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","莺歌" "中和","中和","Zhonghe","中和","中和","中和","中和","中和" -"樹林","樹林","Shulin","樹林","樹林","樹林","樹林","樹林" +"樹林","樹林","Shulin","樹林","樹林","樹林","樹林","树林" "深坑","深坑","Shenkeng","深坑","深坑","深坑","深坑","深坑" -"板橋","板橋","Banchiao","板橋","板橋","板橋","板橋","板橋" +"板橋","板橋","Banchiao","板橋","板橋","板橋","板橋","板桥" "石碇","石碇","Shihding","石碇","石碇","石碇","石碇","石碇" -"新莊","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新莊" +"新莊","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新庄" "泰山","泰山","Taishan","泰山","泰山","泰山","泰山","泰山" "三重","三重","Sanchong","三重","三重","三重","三重","三重" -"雙溪","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","雙溪" -"貢寮","貢寮","Gongliao","貢寮","貢寮","貢寮","貢寮","貢寮" +"雙溪","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","双溪" +"貢寮","貢寮","Gongliao","貢寮","貢寮","貢寮","貢寮","贡寮" "汐止","汐止","Xizhi","汐止","汐止","汐止","汐止","汐止" -"萬里","萬里","Wanli","万里","萬里","萬里","萬里","萬里" +"萬里","萬里","Wanli","万里","萬里","萬里","萬里","万里" "金山","金山","Jinshan","金山","金山","金山","金山","金山" -"石門","石門","Shimen","石門","石門","石門","石門","石門" +"石門","石門","Shimen","石門","石門","石門","石門","石门" "苓雅","苓雅","Lingya","苓雅","苓雅","苓雅","苓雅","苓雅" "三民","三民","Sanmin","三民","三民","三民","三民","三民" "新屋","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" -"觀音","觀音","Guanyin","観音","觀音","觀音","觀音","觀音" +"觀音","觀音","Guanyin","観音","觀音","觀音","觀音","观音" "北竿","北竿","Beigan","北竿","北竿","北竿","北竿","北竿" -"東引","東引","Dongyin","東引","東引","東引","東引","東引" -"烈嶼","烈嶼","Lieyu","烈嶼","烈嶼","烈嶼","烈嶼","烈嶼" +"東引","東引","Dongyin","東引","東引","東引","東引","东引" +"烈嶼","烈嶼","Lieyu","烈嶼","烈嶼","烈嶼","烈嶼","烈屿" "旗津","旗津","Qijin","旗津","旗津","旗津","旗津","旗津" -"長濱","長濱","Changbin","長浜","長濱","長濱","長濱","長濱" -"豐濱","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","豐濱" -"霧峰","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","霧峰" +"長濱","長濱","Changbin","長浜","長濱","長濱","長濱","长滨" +"豐濱","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","丰滨" +"霧峰","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","雾峰" "大里","大里","Dali","大里","大里","大里","大里","大里" -"烏日","烏日","Wuri","烏日","烏日","烏日","烏日","烏日" +"烏日","烏日","Wuri","烏日","烏日","烏日","烏日","乌日" "中","中","Central","中","中","中","中","中" "南屯","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" "西屯","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" "北屯","北屯","Beitun","北屯","北屯","北屯","北屯","北屯" "潭子","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" -"萬華","萬華","Wanhua","万華","萬華","萬華","萬華","萬華" +"萬華","萬華","Wanhua","万華","萬華","萬華","萬華","万华" "松山","松山","Songshan","松山","松山","松山","松山","松山" "士林","士林","Shilin","士林","士林","士林","士林","士林" "北投","北投","Beitou","北投","北投","北投","北投","北投" @@ -343,29 +343,29 @@ "田尾","田尾","Tianwei","田尾","田尾","田尾","田尾","田尾" "金沙","金沙","Jinsha ","金沙","金沙","金沙","金沙","金沙" "金湖","金湖","Jinhu","金湖","金湖","金湖","金湖","金湖" -"柳營","柳營","Liuying","柳営","柳營","柳營","柳營","柳營" -"東山","東山","Dongshan","東山","東山","東山","東山","東山" +"柳營","柳營","Liuying","柳営","柳營","柳營","柳營","柳营" +"東山","東山","Dongshan","東山","東山","東山","東山","东山" "七股","七股","Qigu","七股","七股","七股","七股","七股" -"將軍","將軍","Jiangjun","将軍","將軍","將軍","將軍","將軍" +"將軍","將軍","Jiangjun","将軍","將軍","將軍","將軍","将军" "鼓山","鼓山","Gushan","鼓山","鼓山","鼓山","鼓山","鼓山" -"左營","左營","Zuoying","左営","左營","左營","左營","左營" -"中壢","中壢","Zhongli","中壢","中壢","中壢","中壢","中壢" -"寶山","寶山","Baoshan","宝山","寶山","寶山","寶山","寶山" -"恆春","恆春","Hengchun","恒春","恆春","恆春","恆春","恆春" +"左營","左營","Zuoying","左営","左營","左營","左營","左营" +"中壢","中壢","Zhongli","中壢","中壢","中壢","中壢","中坜" +"寶山","寶山","Baoshan","宝山","寶山","寶山","寶山","宝山" +"恆春","恆春","Hengchun","恒春","恆春","恆春","恆春","恒春" "太平","太平","Taiping","太平","太平","太平","太平","太平" -"鳳林","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","鳳林" -"萬榮","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","萬榮" -"龍潭","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龍潭" -"平鎮","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平鎮" +"鳳林","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","凤林" +"萬榮","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","万荣" +"龍潭","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龙潭" +"平鎮","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平镇" "南港","南港","Nangang","南港","南港","南港","南港","南港" -"內湖","內湖","Neihu","内湖","內湖","內湖","內湖","內湖" -"金寧","金寧","Jinning","金寧","金寧","金寧","金寧","金寧" +"內湖","內湖","Neihu","内湖","內湖","內湖","內湖","内湖" +"金寧","金寧","Jinning","金寧","金寧","金寧","金寧","金宁" "金城","金城","Jincheng","金城","金城","金城","金城","金城" "尖石","尖石","Jianshi","尖石","尖石","尖石","尖石","尖石" "泰安","泰安","Tai-An","泰安","泰安","泰安","泰安","泰安" "和平","和平","Heping","和平","和平","和平","和平","和平" -"縣","縣","County","県","縣","縣","縣","縣" -"鄉","鄉","Township","郷","鄉","鄉","鄉","鄉" -"鎮","鎮","Town","鎮","鎮","鎮","鎮","鎮" +"縣","縣","County","県","縣","縣","縣","县" +"鄉","鄉","Township","郷","鄉","鄉","鄉","乡" +"鎮","鎮","Town","鎮","鎮","鎮","鎮","镇" "市","市","City","市","市","市","市","市" -"區","區","District","区","區","區","區","區" +"區","區","District","区","區","區","區","区" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 4694bcb4b..966d49ce3 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Russian\n" "Language: ru_RU\n" -"PO-Revision-Date: 2025-08-14 00:59\n" +"PO-Revision-Date: 2025-08-15 01:20\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "" msgid "強震監視器" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "" @@ -586,19 +586,19 @@ msgstr "" msgid "監視器" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "" @@ -622,15 +622,15 @@ msgstr "" msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" @@ -842,55 +842,55 @@ msgstr "" msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "" @@ -934,59 +934,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "" diff --git a/assets/translations/vi.po b/assets/translations/vi.po index c18d072cd..783ea1632 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" -"PO-Revision-Date: 2025-08-14 00:59\n" +"PO-Revision-Date: 2025-08-15 01:20\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "Cảnh báo động đất sớm" msgid "強震監視器" msgstr "giám sát động đất" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "Báo cáo động đất" @@ -589,19 +589,19 @@ msgstr "" msgid "監視器" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "Hình ảnh radar" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "Nhiệt độ" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "Lượng mưa" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "Hướng gió/Tốc độ gió" @@ -625,15 +625,15 @@ msgstr "" msgid "初始圖層" msgstr "" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "" @@ -845,55 +845,55 @@ msgstr "" msgid "單位:{unit}" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "Hôm nay" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10 phút" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24 giờ" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2 ngày" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3 ngày" @@ -937,59 +937,59 @@ msgstr "" msgid "已抵達" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "Thêm" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "Động đất nhẹ, cảm nhận được ở khu vực nhỏ" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "Cường độ" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "Độ sâu chấn tiêu" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "Trang báo cáo" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "Ngày giờ nhận biết động đất" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "nằm ở" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "Cường độ địa chấn tại các khu vực" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "Bản đồ báo cáo động đất" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "Bản đồ cường độ địa chấn" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "Bản đồ gia tốc mặt đất tối đa" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "Bản đồ vận tốc mặt đất tối đa" @@ -1335,17 +1335,17 @@ msgstr "" #: ./lib/api/model/location/location.dart:82 msgid "{city}{cityLevel} {town}{townLevel}" -msgstr "" +msgstr "{city}{cityLevel} {town}{townLevel}" #: ./lib/api/model/location/location.dart:95 msgid "{city} {town}" -msgstr "" +msgstr "{city} {town}" #: ./lib/api/model/location/location.dart:104 msgid "{city}{cityLevel}" -msgstr "" +msgstr "{city}{cityLevel}" #: ./lib/api/model/location/location.dart:113 msgid "{town}{townLevel}" -msgstr "" +msgstr "{town}{townLevel}" diff --git a/assets/translations/weather_station_names.csv b/assets/translations/weather_station_names.csv index e05811e6e..c0a3fa75f 100644 --- a/assets/translations/weather_station_names.csv +++ b/assets/translations/weather_station_names.csv @@ -1,12 +1,12 @@ "key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" -"466850","五分山雷達站","Wufenshan","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站" +"466850","五分山雷達站","Wufenshan","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷达站" "466881","新北","New Taipei","新北","新北","新北","新北","新北" "466900","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" "466910","鞍部","Anbu","鞍部","鞍部","鞍部","鞍部","鞍部" "466920","臺北","Taipei","台北","臺北","臺北","臺北","台北" "466930","竹子湖","Zhuzihu","竹子湖","竹子湖","竹子湖","竹子湖","竹子湖" "466940","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" -"466950","彭佳嶼","Pengjiayu","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼" +"466950","彭佳嶼","Pengjiayu","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼","彭佳屿" "466990","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花莲" "467050","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" "467080","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜兰" @@ -14,7 +14,7 @@ "467270","田中","Tianzhong","田中","田中","田中","田中","田中" "467280","後龍","Houlong","後龍","後龍","後龍","後龍","后龙" "467290","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" -"467300","東吉島","Dongjidao","東吉島","東吉島","東吉島","東吉島","東吉島" +"467300","東吉島","Dongjidao","東吉島","東吉島","東吉島","東吉島","东吉岛" "467350","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" "467410","臺南","Tainan","台南","臺南","臺南","臺南","台南" "467420","永康","Yongkang","永康","永康","永康","永康","永康" @@ -25,106 +25,106 @@ "467540","大武","Dawu","大武","大武","大武","大武","大武" "467550","玉山","Yushan","玉山","玉山","玉山","玉山","玉山" "467571","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" -"467590","恆春","Hengchun","恒春","恆春","恆春","恆春","恆春" +"467590","恆春","Hengchun","恒春","恆春","恆春","恆春","恒春" "467610","成功","Chenggong","成功","成功","成功","成功","成功" "467620","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","兰屿" "467650","日月潭","Sun Moon Lake","日月潭","日月潭","日月潭","日月潭","日月潭" "467660","臺東","Taitung","台東","臺東","臺東","臺東","台东" -"467790","墾丁雷達站","Kenting","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站" -"467990","馬祖","Matsu","馬祖","馬祖","馬祖","馬祖","馬祖" +"467790","墾丁雷達站","Kenting","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站","垦丁雷达站" +"467990","馬祖","Matsu","馬祖","馬祖","馬祖","馬祖","马祖" "12J990","口湖工作站","Kouhu Branch Station","口湖工作站","口湖工作站","口湖工作站","口湖工作站","口湖工作站" -"12Q970","東港工作站","Donggang Branch","東港工作站","東港工作站","東港工作站","東港工作站","東港工作站" -"12Q980","恆春工作站","Hengchun Branch","恆春工作站","恆春工作站","恆春工作站","恆春工作站","恆春工作站" -"42HA10","萬大發電廠","Wanta Hydro","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠" -"72AI40","桃改樹林分場","Shulin Sub-station Of Taoyuan ARES","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場" -"72C440","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場" -"72D080","桃改五峰分場","Wufeng Sub-station Of Taoyuan ARES","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場" -"72D680","桃改新埔分場","Sinpu Sub-station Of Taoyuan ARES","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分場" -"72G600","臺中農改場","Ta Tsun","臺中農改場","臺中農改場","臺中農改場","臺中農改場","臺中農改場" -"72HA00","中改埔里分場","Puli Sub-station Of Taichung ARES","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分場" -"72K220","南改斗南分場","Dounan Sub-station Of Tainan ARES","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分場" -"72M360","南改義竹分場","Yichu Sub-station Of Tainan ARES","南改義竹分場","南改義竹分場","南改義竹分場","南改義竹分場","南改義竹分場" -"72M700","南改鹿草分場","Lucao Sub-station Of Tainan ARES","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分場" -"72N100","臺南農改場","Tainan","臺南農改場","臺南農改場","臺南農改場","臺南農改場","臺南農改場" +"12Q970","東港工作站","Donggang Branch","東港工作站","東港工作站","東港工作站","東港工作站","东港工作站" +"12Q980","恆春工作站","Hengchun Branch","恆春工作站","恆春工作站","恆春工作站","恆春工作站","恒春工作站" +"42HA10","萬大發電廠","Wanta Hydro","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠","万大发电厂" +"72AI40","桃改樹林分場","Shulin Sub-station Of Taoyuan ARES","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改树林分场" +"72C440","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃园农改场" +"72D080","桃改五峰分場","Wufeng Sub-station Of Taoyuan ARES","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分场" +"72D680","桃改新埔分場","Sinpu Sub-station Of Taoyuan ARES","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分場","桃改新埔分场" +"72G600","臺中農改場","Ta Tsun","臺中農改場","臺中農改場","臺中農改場","臺中農改場","台中农改场" +"72HA00","中改埔里分場","Puli Sub-station Of Taichung ARES","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分場","中改埔里分场" +"72K220","南改斗南分場","Dounan Sub-station Of Tainan ARES","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分場","南改斗南分场" +"72M360","南改義竹分場","Yichu Sub-station Of Tainan ARES","南改義竹分場","南改義竹分場","南改義竹分場","南改義竹分場","南改义竹分场" +"72M700","南改鹿草分場","Lucao Sub-station Of Tainan ARES","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分場","南改鹿草分场" +"72N100","臺南農改場","Tainan","臺南農改場","臺南農改場","臺南農改場","臺南農改場","台南农改场" "72N240","七股研究中心","Qigu Research Center","七股研究中心","七股研究中心","七股研究中心","七股研究中心","七股研究中心" -"72Q010","高雄農改場","Pingtung","高雄農改場","高雄農改場","高雄農改場","高雄農改場","高雄農改場" -"72S200","東改班鳩分場","Banjuou Sub-station Of Taitung ARES ","東改班鳩分場","東改班鳩分場","東改班鳩分場","東改班鳩分場","東改班鳩分場" -"72S590","東改賓朗果園","Binlung Orchard Sub-station Of Taitung ARES ","東改賓朗果園","東改賓朗果園","東改賓朗果園","東改賓朗果園","東改賓朗果園" -"72T250","花蓮農改場","Gi An","花蓮農改場","花蓮農改場","花蓮農改場","花蓮農改場","花蓮農改場" -"72U480","花改蘭陽分場","Lanyang Sub-station Of Hualien ARES","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場" -"72V140","高改旗南分場","Chinan Sub-station Of Kaohsiung ARES","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分場" -"82A750","茶改北部分場","North Branch Of TBRS","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分場" -"82C160","茶改場","Tea And Beverage Research Station","茶改場","茶改場","茶改場","茶改場","茶改場" -"82H320","茶改中部分場","Middle Branch Of TRES","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分場" -"82H840","茶改南部分場","South Branch Of TBRS","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場" -"82S580","茶改東部分場","East Branch Of TBRS","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場" -"A2C560","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心" -"A2K360","水試臺西試驗場","Taixi Experimental Fishing Ground","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場" -"A2K630","臺大雲林校區","Yunlin Branch Of NTU","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區" -"A2N290","臺南蘭花園區","Taiwan Orchid","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區" -"B2E890","畜試北區分所","North Branch Of TLRI","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所" -"B2N890","畜產試驗所","Hsin Hua","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所" -"B2Q810","畜試南區分所","South Branch Of TLRI","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所" -"B2U990","畜試東區分所","East Branch Of TLRI","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所" +"72Q010","高雄農改場","Pingtung","高雄農改場","高雄農改場","高雄農改場","高雄農改場","高雄农改场" +"72S200","東改班鳩分場","Banjuou Sub-station Of Taitung ARES ","東改班鳩分場","東改班鳩分場","東改班鳩分場","東改班鳩分場","东改斑鸠分场" +"72S590","東改賓朗果園","Binlung Orchard Sub-station Of Taitung ARES ","東改賓朗果園","東改賓朗果園","東改賓朗果園","東改賓朗果園","东改宾朗果园" +"72T250","花蓮農改場","Gi An","花蓮農改場","花蓮農改場","花蓮農改場","花蓮農改場","花莲农改场" +"72U480","花改蘭陽分場","Lanyang Sub-station Of Hualien ARES","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改蘭陽分場","花改兰阳分场" +"72V140","高改旗南分場","Chinan Sub-station Of Kaohsiung ARES","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分場","高改旗南分场" +"82A750","茶改北部分場","North Branch Of TBRS","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分場","茶改北部分场" +"82C160","茶改場","Tea And Beverage Research Station","茶改場","茶改場","茶改場","茶改場","茶改场" +"82H320","茶改中部分場","Middle Branch Of TRES","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分場","茶改中部分场" +"82H840","茶改南部分場","South Branch Of TBRS","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分场" +"82S580","茶改東部分場","East Branch Of TBRS","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場","茶改东部分场" +"A2C560","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心","农工中心" +"A2K360","水試臺西試驗場","Taixi Experimental Fishing Ground","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水改台西试验场" +"A2K630","臺大雲林校區","Yunlin Branch Of NTU","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區","台大云林校区" +"A2N290","臺南蘭花園區","Taiwan Orchid","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","台南兰花园区" +"B2E890","畜試北區分所","North Branch Of TLRI","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所","蓄试北区分所" +"B2N890","畜產試驗所","Hsin Hua","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所","畜产试验所" +"B2Q810","畜試南區分所","South Branch Of TLRI","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所","蓄试南区分所" +"B2U990","畜試東區分所","East Branch Of TLRI","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所","蓄试东区分所" "C2A540","四堵","Sihdu","四堵","四堵","四堵","四堵","四堵" "C2A560","福山","Fushan","福山","福山","福山","福山","福山" -"C2A650","火燒寮","Huoshaoliao","火燒寮","火燒寮","火燒寮","火燒寮","火燒寮" +"C2A650","火燒寮","Huoshaoliao","火燒寮","火燒寮","火燒寮","火燒寮","火烧寮" "C2A660","瑞芳","Rueifang","瑞芳","瑞芳","瑞芳","瑞芳","瑞芳" "C2A880","福隆","Fulong","福隆","福隆","福隆","福隆","福隆" -"C2A920","富貴角","Fugueijiao","富貴角","富貴角","富貴角","富貴角","富貴角" -"C2C410","中央大學","Ncu","中央大学","中央大學","中央大學","中央大學","中央大學" -"C2D720","關西工作站","Guanxi Experiment Station","關西工作站","關西工作站","關西工作站","關西工作站","關西工作站" -"C2D730","寶山農場","Baoshan Farm","寶山農場","寶山農場","寶山農場","寶山農場","寶山農場" +"C2A920","富貴角","Fugueijiao","富貴角","富貴角","富貴角","富貴角","富贵角" +"C2C410","中央大學","Ncu","中央大学","中央大學","中央大學","中央大學","中央大学" +"C2D720","關西工作站","Guanxi Experiment Station","關西工作站","關西工作站","關西工作站","關西工作站","关西工作站" +"C2D730","寶山農場","Baoshan Farm","寶山農場","寶山農場","寶山農場","寶山農場","宝山农场" "C2D740","屯原","Tunyuan","屯原","屯原","屯原","屯原","屯原" "C2E520","大湖","Dahu","大湖","大湖","大湖","大湖","大湖" -"C2E540","龍溪","Longxi","龍溪","龍溪","龍溪","龍溪","龍溪" -"C2E880","三義","Sanyi","三義","三義","三義","三義","三義" +"C2E540","龍溪","Longxi","龍溪","龍溪","龍溪","龍溪","龙溪" +"C2E880","三義","Sanyi","三義","三義","三義","三義","三义" "C2E970","八甲","Bajia","八甲","八甲","八甲","八甲","八甲" "C2F000","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" "C2F860","梨山","Lishan","梨山","梨山","梨山","梨山","梨山" "C2F930","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" -"C2F990","摩天嶺","Motianling","摩天嶺","摩天嶺","摩天嶺","摩天嶺","摩天嶺" +"C2F990","摩天嶺","Motianling","摩天嶺","摩天嶺","摩天嶺","摩天嶺","摩天岭" "C2F9A0","中竹林","Zhongzhulin","中竹林","中竹林","中竹林","中竹林","中竹林" -"C2FA00","烏石坑","Wushihkeng","烏石坑","烏石坑","烏石坑","烏石坑","烏石坑" -"C2FB50","出雲","Chuyun","出雲","出雲","出雲","出雲","出雲" -"C2FB60","頭櫃山","Touguishan","頭櫃山","頭櫃山","頭櫃山","頭櫃山","頭櫃山" +"C2FA00","烏石坑","Wushihkeng","烏石坑","烏石坑","烏石坑","烏石坑","乌石坑" +"C2FB50","出雲","Chuyun","出雲","出雲","出雲","出雲","出云" +"C2FB60","頭櫃山","Touguishan","頭櫃山","頭櫃山","頭櫃山","頭櫃山","头柜山" "C2G640","鹿港","Lukang","鹿港","鹿港","鹿港","鹿港","鹿港" "C2G840","北斗","Beidou","北斗","北斗","北斗","北斗","北斗" "C2G870","芳苑","Fangyuan","芳苑","芳苑","芳苑","芳苑","芳苑" -"C2G980","田頭村","Toutian Village","田頭村","田頭村","田頭村","田頭村","田頭村" -"C2G9A0","畜試所彰化","Changhua Branch Of TLRI","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化" +"C2G980","田頭村","Toutian Village","田頭村","田頭村","田頭村","田頭村","田头村" +"C2G9A0","畜試所彰化","Changhua Branch Of TLRI","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化","蓄试所彰化" "C2H950","中寮","Zhongliao","中寮","中寮","中寮","中寮","中寮" -"C2H9D0","三隻寮","Sanziliao","三隻寮","三隻寮","三隻寮","三隻寮","三隻寮" -"C2H9E0","國姓南港","Guoxing Nangang","國姓南港","國姓南港","國姓南港","國姓南港","國姓南港" +"C2H9D0","三隻寮","Sanziliao","三隻寮","三隻寮","三隻寮","三隻寮","三只寮" +"C2H9E0","國姓南港","Guoxing Nangang","國姓南港","國姓南港","國姓南港","國姓南港","国姓南港" "C2H9F0","柑林","Ganlin","柑林","柑林","柑林","柑林","柑林" -"C2H9G0","百勝","Bosheng","百勝","百勝","百勝","百勝","百勝" -"C2H9H0","苗改南投蜂場","Nantou Bee Farm Of Miaoli TARI","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場" +"C2H9G0","百勝","Bosheng","百勝","百勝","百勝","百勝","百胜" +"C2H9H0","苗改南投蜂場","Nantou Bee Farm Of Miaoli TARI","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂场" "C2H9J0","中台","Zhongtai","中台","中台","中台","中台","中台" -"C2H9L0","馬烈霸","Malieba","馬烈霸","馬烈霸","馬烈霸","馬烈霸","馬烈霸" -"C2H9M0","發祥","Faxiang","發祥","發祥","發祥","發祥","發祥" -"C2H9N0","仁愛東眼","Renaidong","仁愛東眼","仁愛東眼","仁愛東眼","仁愛東眼","仁愛東眼" +"C2H9L0","馬烈霸","Malieba","馬烈霸","馬烈霸","馬烈霸","馬烈霸","马烈霸" +"C2H9M0","發祥","Faxiang","發祥","發祥","發祥","發祥","发祥" +"C2H9N0","仁愛東眼","Renaidong","仁愛東眼","仁愛東眼","仁愛東眼","仁愛東眼","仁爱东眼" "C2H9P0","伊拿谷","Yinagu","伊拿谷","伊拿谷","伊拿谷","伊拿谷","伊拿谷" -"C2H9Q0","北東眼山","Beidongyanshan","北東眼山","北東眼山","北東眼山","北東眼山","北東眼山" +"C2H9Q0","北東眼山","Beidongyanshan","北東眼山","北東眼山","北東眼山","北東眼山","北东眼山" "C2H9R0","卓社","Zhuoshe","卓社","卓社","卓社","卓社","卓社" -"C2H9S0","龍南","Longnan","龍南","龍南","龍南","龍南","龍南" -"C2H9T0","名間竹圍","Mingjianzhuwei","名間竹圍","名間竹圍","名間竹圍","名間竹圍","名間竹圍" -"C2H9U0","鳳鵬","Fengpeng","鳳鵬","鳳鵬","鳳鵬","鳳鵬","鳳鵬" -"C2H9W0","大坪頂農水","Dapingding Station","大坪頂農水","大坪頂農水","大坪頂農水","大坪頂農水","大坪頂農水" -"C2I090","鳳凰","Fenghuang","鳳凰","鳳凰","鳳凰","鳳凰","鳳凰" -"C2K240","草嶺","Caoling","草嶺","草嶺","草嶺","草嶺","草嶺" -"C2K610","草嶺石壁","Caolingshibi","草嶺石壁","草嶺石壁","草嶺石壁","草嶺石壁","草嶺石壁" -"C2K620","馬光農場","Maguang Organic Agriculture Circular Park","馬光農場","馬光農場","馬光農場","馬光農場","馬光農場" +"C2H9S0","龍南","Longnan","龍南","龍南","龍南","龍南","龙南" +"C2H9T0","名間竹圍","Mingjianzhuwei","名間竹圍","名間竹圍","名間竹圍","名間竹圍","名间竹围" +"C2H9U0","鳳鵬","Fengpeng","鳳鵬","鳳鵬","鳳鵬","鳳鵬","凤鹏" +"C2H9W0","大坪頂農水","Dapingding Station","大坪頂農水","大坪頂農水","大坪頂農水","大坪頂農水","大坪顶农水" +"C2I090","鳳凰","Fenghuang","鳳凰","鳳凰","鳳凰","鳳凰","凤凰" +"C2K240","草嶺","Caoling","草嶺","草嶺","草嶺","草嶺","草岭" +"C2K610","草嶺石壁","Caolingshibi","草嶺石壁","草嶺石壁","草嶺石壁","草嶺石壁","草岭石壁" +"C2K620","馬光農場","Maguang Organic Agriculture Circular Park","馬光農場","馬光農場","馬光農場","馬光農場","马光农场" "C2K630","荷苞","Hebao","荷苞","荷苞","荷苞","荷苞","荷苞" -"C2M410","馬頭山","Matoushan","馬頭山","馬頭山","馬頭山","馬頭山","馬頭山" +"C2M410","馬頭山","Matoushan","馬頭山","馬頭山","馬頭山","馬頭山","马头山" "C2M620","瑞里","Ruili","瑞里","瑞里","瑞里","瑞里","瑞里" -"C2M910","嘉義大學","Chiayi University","嘉義大学","嘉義大學","嘉義大學","嘉義大學","嘉義大學" -"C2M920","朴子農改","Pozi DARES","朴子農改","朴子農改","朴子農改","朴子農改","朴子農改" +"C2M910","嘉義大學","Chiayi University","嘉義大学","嘉義大學","嘉義大學","嘉義大學","嘉义大学" +"C2M920","朴子農改","Pozi DARES","朴子農改","朴子農改","朴子農改","朴子農改","朴子农改" "C2M930","石卓","Shizhuo","石卓","石卓","石卓","石卓","石卓" -"C2M940","日野賀","Riyehe","日野賀","日野賀","日野賀","日野賀","日野賀" +"C2M940","日野賀","Riyehe","日野賀","日野賀","日野賀","日野賀","日野贺" "C2M950","太和","Taihe","太和","太和","太和","太和","太和" "C2M960","外寮","Wailiao","外寮","外寮","外寮","外寮","外寮" "C2M970","碧湖","Bihu","碧湖","碧湖","碧湖","碧湖","碧湖" -"C2N160","西拉雅風管處","Siraya NSAH","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處" +"C2N160","西拉雅風管處","Siraya NSAH","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅风管处" "C2O810","曾文","Cengwen","曾文","曾文","曾文","曾文","曾文" "C2O930","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" "C2O950","安南","Annan","安南","安南","安南","安南","安南" @@ -132,64 +132,64 @@ "C2R970","屏科大","National Pingtung University","屏科大","屏科大","屏科大","屏科大","屏科大" "C2V250","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" "C2V260","月眉","Yuemei","月眉","月眉","月眉","月眉","月眉" -"C2V310","美濃","Meinong","美濃","美濃","美濃","美濃","美濃" -"C2W030","金門農試所","Kimmann","金門農試所","金門農試所","金門農試所","金門農試所","金門農試所" -"C2W230","畜試所澎湖","Penghu Field Area Of TLRI","畜試所澎湖","畜試所澎湖","畜試所澎湖","畜試所澎湖","畜試所澎湖" -"CAG100","王功漁港","Wanggong Fishing Port","王功漁港","王功漁港","王功漁港","王功漁港","王功漁港" -"CAH030","茶改場竹圍站","TRES Chuwei Station","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站" -"CAJ050","海口故事園區","Haikou Story Camping Park","海口故事園區","海口故事園區","海口故事園區","海口故事園區","海口故事園區" -"CAL110","布袋國中","Budai Junior High School","布袋國中","布袋國中","布袋國中","布袋國中","布袋國中" -"CAN130","水試所海水繁養殖中心","Mariculture Research Center","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心" -"CAN140","六官養殖協會","Liuguan Aquaculture","六官養殖協會","六官養殖協會","六官養殖協會","六官養殖協會","六官養殖協會" -"CAQ030","崎峰國小","Cifong Elementary School","崎峰國小","崎峰國小","崎峰國小","崎峰國小","崎峰國小" -"E2H360","蓮華池","Lienhuchih","蓮華池","蓮華池","蓮華池","蓮華池","蓮華池" -"E2HA20","林試畢祿溪站","Pilushi","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站" -"E2K600","四湖植物園","Sihu Botanical Garden","四湖植物園","四湖植物園","四湖植物園","四湖植物園","四湖植物園" -"E2P980","林試六龜中心","Lioukuei Research Center ","林試六龜中心","林試六龜中心","林試六龜中心","林試六龜中心","林試六龜中心" -"E2P990","林試扇平站","Shanping","林試扇平站","林試扇平站","林試扇平站","林試扇平站","林試扇平站" -"E2S960","林試太麻里2","Taimalee2","林試太麻里2","林試太麻里2","林試太麻里2","林試太麻里2","林試太麻里2" -"E2S980","林試太麻里1","Taimalee Research Center 1","林試太麻里1","林試太麻里1","林試太麻里1","林試太麻里1","林試太麻里1" -"G2AI50","關渡","Guandu","關渡","關渡","關渡","關渡","關渡" -"G2F820","農試所(霧峰)","Taichung","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)" -"G2L020","農試嘉義分所","Chiayi Sub-station Of TARI","農試嘉義分所","農試嘉義分所","農試嘉義分所","農試嘉義分所","農試嘉義分所" -"G2M350","農試溪口農場","Xikou Farm Of TARI","農試溪口農場","農試溪口農場","農試溪口農場","農試溪口農場","農試溪口農場" -"G2P820","農試鳳山分所","Fengshan Tropical Horticultural Of TARI","農試鳳山分所","農試鳳山分所","農試鳳山分所","農試鳳山分所","農試鳳山分所" -"K2E360","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場" +"C2V310","美濃","Meinong","美濃","美濃","美濃","美濃","美浓" +"C2W030","金門農試所","Kimmann","金門農試所","金門農試所","金門農試所","金門農試所","金门农试所" +"C2W230","畜試所澎湖","Penghu Field Area Of TLRI","畜試所澎湖","畜試所澎湖","畜試所澎湖","畜試所澎湖","蓄试所澎湖" +"CAG100","王功漁港","Wanggong Fishing Port","王功漁港","王功漁港","王功漁港","王功漁港","王功渔港" +"CAH030","茶改場竹圍站","TRES Chuwei Station","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改場竹圍站","茶改场竹围站" +"CAJ050","海口故事園區","Haikou Story Camping Park","海口故事園區","海口故事園區","海口故事園區","海口故事園區","海口故事园区" +"CAL110","布袋國中","Budai Junior High School","布袋國中","布袋國中","布袋國中","布袋國中","布袋国中" +"CAN130","水試所海水繁養殖中心","Mariculture Research Center","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水試所海水繁養殖中心","水试所海水繁养殖中心" +"CAN140","六官養殖協會","Liuguan Aquaculture","六官養殖協會","六官養殖協會","六官養殖協會","六官養殖協會","六官养殖协会" +"CAQ030","崎峰國小","Cifong Elementary School","崎峰國小","崎峰國小","崎峰國小","崎峰國小","崎峰国小" +"E2H360","蓮華池","Lienhuchih","蓮華池","蓮華池","蓮華池","蓮華池","莲华池" +"E2HA20","林試畢祿溪站","Pilushi","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林試畢祿溪站","林试毕禄溪站" +"E2K600","四湖植物園","Sihu Botanical Garden","四湖植物園","四湖植物園","四湖植物園","四湖植物園","四湖植物园" +"E2P980","林試六龜中心","Lioukuei Research Center ","林試六龜中心","林試六龜中心","林試六龜中心","林試六龜中心","林试六龟中心" +"E2P990","林試扇平站","Shanping","林試扇平站","林試扇平站","林試扇平站","林試扇平站","林试扇平站" +"E2S960","林試太麻里2","Taimalee2","林試太麻里2","林試太麻里2","林試太麻里2","林試太麻里2","林试太麻里2" +"E2S980","林試太麻里1","Taimalee Research Center 1","林試太麻里1","林試太麻里1","林試太麻里1","林試太麻里1","林试太麻里1" +"G2AI50","關渡","Guandu","關渡","關渡","關渡","關渡","关渡" +"G2F820","農試所(霧峰)","Taichung","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","農試所(霧峰)","农试所(雾峰)" +"G2L020","農試嘉義分所","Chiayi Sub-station Of TARI","農試嘉義分所","農試嘉義分所","農試嘉義分所","農試嘉義分所","农试嘉义分所" +"G2M350","農試溪口農場","Xikou Farm Of TARI","農試溪口農場","農試溪口農場","農試溪口農場","農試溪口農場","农试溪口农场" +"G2P820","農試鳳山分所","Fengshan Tropical Horticultural Of TARI","農試鳳山分所","農試鳳山分所","農試鳳山分所","農試鳳山分所","农试凤山分所" +"K2E360","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗農改場","苗栗农改场" "K2E710","苗改生物防治研究中心","Biological Control Branch Of Miaoli TARI","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心","苗改生物防治研究中心" -"K2F750","種苗改良場","Shin She","種苗改良場","種苗改良場","種苗改良場","種苗改良場","種苗改良場" -"U2H480","溪頭","Hsi Tou","溪頭","溪頭","溪頭","溪頭","溪頭" -"U2HA30","臺大和社","NTU Exfohoshe","臺大和社","臺大和社","臺大和社","臺大和社","臺大和社" -"U2HA40","臺大內茅埔","NTU Exfoneimoupu","臺大內茅埔","臺大內茅埔","臺大內茅埔","臺大內茅埔","臺大內茅埔" -"U2HA50","臺大竹山","NTU Experimental Forest","臺大竹山","臺大竹山","臺大竹山","臺大竹山","臺大竹山" +"K2F750","種苗改良場","Shin She","種苗改良場","種苗改良場","種苗改良場","種苗改良場","种苗改良场" +"U2H480","溪頭","Hsi Tou","溪頭","溪頭","溪頭","溪頭","溪头" +"U2HA30","臺大和社","NTU Exfohoshe","臺大和社","臺大和社","臺大和社","臺大和社","台大和社" +"U2HA40","臺大內茅埔","NTU Exfoneimoupu","臺大內茅埔","臺大內茅埔","臺大內茅埔","臺大內茅埔","台大內茅埔" +"U2HA50","臺大竹山","NTU Experimental Forest","臺大竹山","臺大竹山","臺大竹山","臺大竹山","台大竹山" "V2C250","八德合作社","Bade Cooperative","八德合作社","八德合作社","八德合作社","八德合作社","八德合作社" "V2C260","八德蔬果","Bade Fruit And Vegetable","八德蔬果","八德蔬果","八德蔬果","八德蔬果","八德蔬果" "V2K610","大庄合作社","Dazhuang Cooperative","大庄合作社","大庄合作社","大庄合作社","大庄合作社","大庄合作社" -"V2K620","麥寮合作社","Mailiao Cooperative","麥寮合作社","麥寮合作社","麥寮合作社","麥寮合作社","麥寮合作社" +"V2K620","麥寮合作社","Mailiao Cooperative","麥寮合作社","麥寮合作社","麥寮合作社","麥寮合作社","麦寮合作社" "C0A520","山佳","Shanjia","山佳","山佳","山佳","山佳","山佳" "C0A530","坪林","Pinglin","坪林","坪林","坪林","坪林","坪林" "C0A550","泰平","Taiping","泰平","泰平","泰平","泰平","泰平" -"C0A570","桶後","Tonghou","桶後","桶後","桶後","桶後","桶後" +"C0A570","桶後","Tonghou","桶後","桶後","桶後","桶後","桶后" "C0A640","石碇","Shihding","石碇","石碇","石碇","石碇","石碇" -"C0A770","科教館","Science Education Center ","科教館","科教館","科教館","科教館","科教館" +"C0A770","科教館","Science Education Center ","科教館","科教館","科教館","科教館","科教馆" "C0A860","大坪","Daping","大坪","大坪","大坪","大坪","大坪" "C0A870","五指山","Wujhihshan","五指山","五指山","五指山","五指山","五指山" -"C0A890","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","雙溪" +"C0A890","雙溪","Shuangsi","双渓","雙溪","雙溪","雙溪","双溪" "C0A931","三和","Sanhe","三和","三和","三和","三和","三和" "C0A940","金山","Jinshan","金山","金山","金山","金山","金山" -"C0A950","鼻頭角","Bitoujiao","鼻頭角","鼻頭角","鼻頭角","鼻頭角","鼻頭角" +"C0A950","鼻頭角","Bitoujiao","鼻頭角","鼻頭角","鼻頭角","鼻頭角","鼻头角" "C0A970","三貂角","Sandiaojiao","三貂角","三貂角","三貂角","三貂角","三貂角" "C0A980","社子","Shezih","社子","社子","社子","社子","社子" "C0A9C0","天母","Tianmu","天母","天母","天母","天母","天母" -"C0A9F0","內湖","Neihu","内湖","內湖","內湖","內湖","內湖" +"C0A9F0","內湖","Neihu","内湖","內湖","內湖","內湖","内湖" "C0AC40","大屯山","Datunshan","大屯山","大屯山","大屯山","大屯山","大屯山" -"C0AC60","三峽","Sanshia","三峡","三峽","三峽","三峽","三峽" +"C0AC60","三峽","Sanshia","三峡","三峽","三峽","三峽","三峡" "C0AC70","信義","Xinyi","信義","信義","信義","信義","信义" "C0AC80","文山","Wenshan","文山","文山","文山","文山","文山" -"C0ACA0","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新莊" +"C0ACA0","新莊","Xinzhuang","新荘","新莊","新莊","新莊","新庄" "C0AD10","八里","Bali","八里","八里","八里","八里","八里" -"C0AD30","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","蘆洲" +"C0AD30","蘆洲","Lujhou","蘆洲","蘆洲","蘆洲","蘆洲","芦洲" "C0AD40","土城","Tucheng","土城","土城","土城","土城","土城" -"C0AD50","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","鶯歌" +"C0AD50","鶯歌","Yingge","鶯歌","鶯歌","鶯歌","鶯歌","莺歌" "C0AG80","中和","Zhonghe","中和","中和","中和","中和","中和" "C0AH00","汐止","Xizhi","汐止","汐止","汐止","汐止","汐止" "C0AH10","永和","Yonghe","永和","永和","永和","永和","永和" @@ -198,120 +198,120 @@ "C0AH50","林口","Linkou","林口","林口","林口","林口","林口" "C0AH70","松山","Songshan","松山","松山","松山","松山","松山" "C0AH80","深坑","Shenkeng","深坑","深坑","深坑","深坑","深坑" -"C0AH90","福山植物園","Fushan Botanical Garden","福山植物園","福山植物園","福山植物園","福山植物園","福山植物園" +"C0AH90","福山植物園","Fushan Botanical Garden","福山植物園","福山植物園","福山植物園","福山植物園","福山植物园" "C0AI00","五股","Wugu","五股","五股","五股","五股","五股" "C0AI10","屈尺","Quchi","屈尺","屈尺","屈尺","屈尺","屈尺" -"C0AI20","白沙灣","Baishawan","白沙灣","白沙灣","白沙灣","白沙灣","白沙灣" +"C0AI20","白沙灣","Baishawan","白沙灣","白沙灣","白沙灣","白沙灣","白沙湾" "C0AI30","三重","Sanchong","三重","三重","三重","三重","三重" "C0AI40","石牌","Shipai","石牌","石牌","石牌","石牌","石牌" "C0AJ20","野柳","Yehliou","野柳","野柳","野柳","野柳","野柳" -"C0AJ30","淡水觀海","Danshuei Guanhai","淡水觀海","淡水觀海","淡水觀海","淡水觀海","淡水觀海" -"C0AJ40","石門","Shimen","石門","石門","石門","石門","石門" +"C0AJ30","淡水觀海","Danshuei Guanhai","淡水觀海","淡水觀海","淡水觀海","淡水觀海","淡水观海" +"C0AJ40","石門","Shimen","石門","石門","石門","石門","石门" "C0AJ50","水湳洞","Shuinandong","水湳洞","水湳洞","水湳洞","水湳洞","水湳洞" -"C0AJ60","六塊厝","Lioukuaitsuo","六塊厝","六塊厝","六塊厝","六塊厝","六塊厝" +"C0AJ60","六塊厝","Lioukuaitsuo","六塊厝","六塊厝","六塊厝","六塊厝","六块厝" "C0AJ70","田寮","Tianliao","田寮","田寮","田寮","田寮","田寮" -"C0AJ80","板橋","Banchiao","板橋","板橋","板橋","板橋","板橋" +"C0AJ80","板橋","Banchiao","板橋","板橋","板橋","板橋","板桥" "C0AJ90","澳底","Aodi","澳底","澳底","澳底","澳底","澳底" "C0AK10","太平里","Taiping Vil.","太平里","太平里","太平里","太平里","太平里" -"C0AK30","硬漢嶺","Yinghanling","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺" +"C0AK30","硬漢嶺","Yinghanling","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺","硬汉岭" "C0B010","七堵","Qidu","七堵","七堵","七堵","七堵","七堵" -"C0B020","基隆嶼","Keelung Islet","基隆嶼","基隆嶼","基隆嶼","基隆嶼","基隆嶼" -"C0B040","大武崙","Dawulun","大武崙","大武崙","大武崙","大武崙","大武崙" +"C0B020","基隆嶼","Keelung Islet","基隆嶼","基隆嶼","基隆嶼","基隆嶼","基隆屿" +"C0B040","大武崙","Dawulun","大武崙","大武崙","大武崙","大武崙","大武仑" "C0B050","八斗子","Badouzi","八斗子","八斗子","八斗子","八斗子","八斗子" "C0B060","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" -"C0C460","復興","Fuxing","復興","復興","復興","復興","復興" +"C0C460","復興","Fuxing","復興","復興","復興","復興","复兴" "C0C480","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃园" "C0C490","八德","Bade","八徳","八德","八德","八德","八德" -"C0C590","觀音","Guanyin","観音","觀音","觀音","觀音","觀音" -"C0C620","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","蘆竹" +"C0C590","觀音","Guanyin","観音","觀音","觀音","觀音","观音" +"C0C620","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","芦竹" "C0C630","大溪","Dasi","大渓","大溪","大溪","大溪","大溪" -"C0C650","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平鎮" -"C0C660","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","楊梅" -"C0C670","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龍潭" -"C0C680","龜山","Guishan","亀山","龜山","龜山","龜山","龜山" -"C0C700","中壢","Zhongli","中壢","中壢","中壢","中壢","中壢" +"C0C650","平鎮","Pingjhen","平鎮","平鎮","平鎮","平鎮","平镇" +"C0C660","楊梅","Yangmei","楊梅","楊梅","楊梅","楊梅","杨梅" +"C0C670","龍潭","Longtan","龍潭","龍潭","龍潭","龍潭","龙潭" +"C0C680","龜山","Guishan","亀山","龜山","龜山","龜山","龟山" +"C0C700","中壢","Zhongli","中壢","中壢","中壢","中壢","中坜" "C0C710","大溪永福","Yongfu Daxi","大溪永福","大溪永福","大溪永福","大溪永福","大溪永福" -"C0C720","竹圍","Jhuwei","竹圍","竹圍","竹圍","竹圍","竹圍" -"C0C730","中大臨海站","Jhongda Coastal Station","中大臨海站","中大臨海站","中大臨海站","中大臨海站","中大臨海站" -"C0C740","觀音工業區","Guanyin Industrial Area","觀音工業區","觀音工業區","觀音工業區","觀音工業區","觀音工業區" -"C0C750","新興坑尾","Sinsingkengwei","新興坑尾","新興坑尾","新興坑尾","新興坑尾","新興坑尾" -"C0C790","東眼山","Dongyanshan","東眼山","東眼山","東眼山","東眼山","東眼山" -"C0C800","四稜","Sileng","四稜","四稜","四稜","四稜","四稜" +"C0C720","竹圍","Jhuwei","竹圍","竹圍","竹圍","竹圍","竹围" +"C0C730","中大臨海站","Jhongda Coastal Station","中大臨海站","中大臨海站","中大臨海站","中大臨海站","中大临海站" +"C0C740","觀音工業區","Guanyin Industrial Area","觀音工業區","觀音工業區","觀音工業區","觀音工業區","观音工业区" +"C0C750","新興坑尾","Sinsingkengwei","新興坑尾","新興坑尾","新興坑尾","新興坑尾","新兴坑尾" +"C0C790","東眼山","Dongyanshan","東眼山","東眼山","東眼山","東眼山","东眼山" +"C0C800","四稜","Sileng","四稜","四稜","四稜","四稜","四棱" "C0D360","梅花","Meihua","梅花","梅花","梅花","梅花","梅花" "C0D430","峨眉","Emei","峨眉","峨眉","峨眉","峨眉","峨眉" -"C0D480","打鐵坑","Datiekeng","打鐵坑","打鐵坑","打鐵坑","打鐵坑","打鐵坑" -"C0D540","橫山","Hengshan","横山","橫山","橫山","橫山","橫山" +"C0D480","打鐵坑","Datiekeng","打鐵坑","打鐵坑","打鐵坑","打鐵坑","打铁坑" +"C0D540","橫山","Hengshan","横山","橫山","橫山","橫山","横山" "C0D550","雪霸","Xueba","雪霸","雪霸","雪霸","雪霸","雪霸" -"C0D560","竹東","Zhudong","竹東","竹東","竹東","竹東","竹東" -"C0D580","寶山","Baoshan","宝山","寶山","寶山","寶山","寶山" +"C0D560","竹東","Zhudong","竹東","竹東","竹東","竹東","竹东" +"C0D580","寶山","Baoshan","宝山","寶山","寶山","寶山","宝山" "C0D590","新豐","Sinfong","新豊","新豐","新豐","新豐","新丰" "C0D650","湖口","Hukou","湖口","湖口","湖口","湖口","湖口" -"C0D660","新竹市東區","Dongqu Hsinshu City","新竹市東區","新竹市東區","新竹市東區","新竹市東區","新竹市東區" -"C0D670","海天一線","Haitianyisian","海天一線","海天一線","海天一線","海天一線","海天一線" -"C0D680","香山濕地","Siangshan Wetland","香山濕地","香山濕地","香山濕地","香山濕地","香山濕地" +"C0D660","新竹市東區","Dongqu Hsinshu City","新竹市東區","新竹市東區","新竹市東區","新竹市東區","新竹市东区" +"C0D670","海天一線","Haitianyisian","海天一線","海天一線","海天一線","海天一線","海天一线" +"C0D680","香山濕地","Siangshan Wetland","香山濕地","香山濕地","香山濕地","香山濕地","香山湿地" "C0D690","外湖","Waihu","外湖","外湖","外湖","外湖","外湖" -"C0D700","關西","Guanxi","関西","關西","關西","關西","關西" -"C0D750","樂山林道6k","Leshan 6k","樂山林道6k","樂山林道6k","樂山林道6k","樂山林道6k","樂山林道6k" +"C0D700","關西","Guanxi","関西","關西","關西","關西","关西" +"C0D750","樂山林道6k","Leshan 6k","樂山林道6k","樂山林道6k","樂山林道6k","樂山林道6k","乐林山道6K" "C0D760","大坪苗圃","Daping Nurserygarden","大坪苗圃","大坪苗圃","大坪苗圃","大坪苗圃","大坪苗圃" "C0E420","竹南","Jhunan","竹南","竹南","竹南","竹南","竹南" "C0E430","南庄","Nanzhuang","南庄","南庄","南庄","南庄","南庄" "C0E550","明德","Mingde","明德","明德","明德","明德","明德" "C0E570","白沙屯","Baishatun","白沙屯","白沙屯","白沙屯","白沙屯","白沙屯" "C0E590","通霄","Tongxiao","通霄","通霄","通霄","通霄","通宵" -"C0E610","馬都安","Madu-An","馬都安","馬都安","馬都安","馬都安","馬都安" -"C0E730","頭份","Toufen","頭份","頭份","頭份","頭份","頭份" -"C0E740","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造橋" +"C0E610","馬都安","Madu-An","馬都安","馬都安","馬都安","馬都安","马都安" +"C0E730","頭份","Toufen","頭份","頭份","頭份","頭份","头份" +"C0E740","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造桥" "C0E750","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" -"C0E780","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","銅鑼" -"C0E791","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓蘭" +"C0E780","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","铜锣" +"C0E791","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓兰" "C0E810","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" -"C0E820","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","獅潭" +"C0E820","獅潭","Shitan","獅潭","獅潭","獅潭","獅潭","狮潭" "C0E830","苑裡","Yuanli","苑裡","苑裡","苑裡","苑裡","苑里" "C0E850","大河","Dahe","大河","大河","大河","大河","大河" -"C0E870","高鐵苗栗","THSR Miaoli","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗" +"C0E870","高鐵苗栗","THSR Miaoli","高鐵苗栗","高鐵苗栗","高鐵苗栗","高鐵苗栗","高铁苗栗" "C0E910","海埔","Haipu","海埔","海埔","海埔","海埔","海埔" -"C0E920","通霄漁港","Tongsiao Fishing Harbor","通霄漁港","通霄漁港","通霄漁港","通霄漁港","通霄漁港" -"C0E930","龍鳳","Longfong","龍鳳","龍鳳","龍鳳","龍鳳","龍鳳" -"C0E940","雪見","Shiuejian","雪見","雪見","雪見","雪見","雪見" +"C0E920","通霄漁港","Tongsiao Fishing Harbor","通霄漁港","通霄漁港","通霄漁港","通霄漁港","通宵渔港" +"C0E930","龍鳳","Longfong","龍鳳","龍鳳","龍鳳","龍鳳","龙凤" +"C0E940","雪見","Shiuejian","雪見","雪見","雪見","雪見","雪见" "C0E950","松安","Songan","松安","松安","松安","松安","松安" -"C0E960","觀霧分站","Guanwu","觀霧分站","觀霧分站","觀霧分站","觀霧分站","觀霧分站" +"C0E960","觀霧分站","Guanwu","觀霧分站","觀霧分站","觀霧分站","觀霧分站","观雾分站" "C0F0A0","雪山圈谷","Xueshanjuangu","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷" -"C0F0B0","石岡","Shigang","石岡","石岡","石岡","石岡","石岡" +"C0F0B0","石岡","Shigang","石岡","石岡","石岡","石岡","石冈" "C0F0C0","中坑","Zhongkeng","中坑","中坑","中坑","中坑","中坑" -"C0F0D0","審馬陣","Shenmazhen","審馬陣","審馬陣","審馬陣","審馬陣","審馬陣" -"C0F0E0","南湖圈谷","Nanhuquangu","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷" +"C0F0D0","審馬陣","Shenmazhen","審馬陣","審馬陣","審馬陣","審馬陣","审马阵" +"C0F0E0","南湖圈谷","Nanhuquangu","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷","南胡圈谷" "C0F850","東勢","Dongshi","東勢","東勢","東勢","東勢","东势" "C0F970","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" -"C0F9I0","神岡","Shengang","神岡","神岡","神岡","神岡","神岡" +"C0F9I0","神岡","Shengang","神岡","神岡","神岡","神岡","神冈" "C0F9K0","大安","Da-An","大安","大安","大安","大安","大安" "C0F9L0","后里","Houli","后里","后里","后里","后里","后里" -"C0F9M0","豐原","Fengyuan","豊原","豐原","豐原","豐原","豐原" +"C0F9M0","豐原","Fengyuan","豊原","豐原","豐原","豐原","丰原" "C0F9N0","大里","Dali","大里","大里","大里","大里","大里" "C0F9O0","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" "C0F9P0","清水","Qingshui","清水","清水","清水","清水","清水" "C0F9Q0","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" -"C0F9R0","龍井","Longjing","龍井","龍井","龍井","龍井","龍井" -"C0F9S0","烏日","Wuri","烏日","烏日","烏日","烏日","烏日" +"C0F9R0","龍井","Longjing","龍井","龍井","龍井","龍井","龙井" +"C0F9S0","烏日","Wuri","烏日","烏日","烏日","烏日","乌日" "C0F9T0","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" "C0F9U0","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" "C0F9V0","新社","Xinshe","新社","新社","新社","新社","新社" -"C0F9X0","大雅(中科園區)","Daya","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)" +"C0F9X0","大雅(中科園區)","Daya","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科园区)" "C0F9Y0","桃山","Taoshan","桃山","桃山","桃山","桃山","桃山" -"C0F9Z0","雪山東峰","Xueshandongfeng","雪山東峰","雪山東峰","雪山東峰","雪山東峰","雪山東峰" +"C0F9Z0","雪山東峰","Xueshandongfeng","雪山東峰","雪山東峰","雪山東峰","雪山東峰","雪山东峰" "C0FA10","松柏","Songbai","松柏","松柏","松柏","松柏","松柏" -"C0FA20","溫寮","Wunliao","溫寮","溫寮","溫寮","溫寮","溫寮" -"C0FA30","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧棲" -"C0FA40","臺中電廠","Taichung?Power Plant","臺中電廠","臺中電廠","臺中電廠","臺中電廠","臺中電廠" -"C0FA50","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","霧峰" -"C0FA60","鞍馬山工作站","Anmashan Office","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站" -"C0FA70","大雪山埡口","Dashiueshan Yakou","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口" +"C0FA20","溫寮","Wunliao","溫寮","溫寮","溫寮","溫寮","温寮" +"C0FA30","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧栖" +"C0FA40","臺中電廠","Taichung?Power Plant","臺中電廠","臺中電廠","臺中電廠","臺中電廠","台中电厂" +"C0FA50","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","雾峰" +"C0FA60","鞍馬山工作站","Anmashan Office","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍马山工作站" +"C0FA70","大雪山埡口","Dashiueshan Yakou","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口","大雪山哑口" "C0FA80","小雪山天池","Shiaushiueshan Tianchr","小雪山天池","小雪山天池","小雪山天池","小雪山天池","小雪山天池" "C0FA90","小雪山林道","Shiaushiueshan","小雪山林道","小雪山林道","小雪山林道","小雪山林道","小雪山林道" "C0FB00","大雪山","Dashiueshan","大雪山","大雪山","大雪山","大雪山","大雪山" -"C0FB10","出雲山苗圃","Chuyunshan","出雲山苗圃","出雲山苗圃","出雲山苗圃","出雲山苗圃","出雲山苗圃" -"C0FB20","雪山橋","Shiueshanchiau","雪山橋","雪山橋","雪山橋","雪山橋","雪山橋" +"C0FB10","出雲山苗圃","Chuyunshan","出雲山苗圃","出雲山苗圃","出雲山苗圃","出雲山苗圃","出云山苗圃" +"C0FB20","雪山橋","Shiueshanchiau","雪山橋","雪山橋","雪山橋","雪山橋","雪山桥" "C0FB30","八仙山苗圃","Bashianshan","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃","八仙山苗圃" -"C0FB40","中橫21.6k","Chungheng 21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k" +"C0FB40","中橫21.6k","Chungheng 21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6k","中橫21.6K" "C0FB70","大甲溪埔","Dajia, Xipu","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔","大甲溪埔" "C0G620","芬園","Fenyuan","芬園","芬園","芬園","芬園","芬园" "C0G650","員林","Yuanlin","員林","員林","員林","員林","员林" @@ -332,16 +332,16 @@ "C0G910","花壇","Huatan","花壇","花壇","花壇","花壇","花坛" "C0G920","永靖","Yongjing ","永靖","永靖","永靖","永靖","永靖" "C0G940","竹塘","Zhutang","竹塘","竹塘","竹塘","竹塘","竹塘" -"C0G950","防潮門","Fangchaomen","防潮門","防潮門","防潮門","防潮門","防潮門" -"C0G960","福寶","Fubao","福寶","福寶","福寶","福寶","福寶" -"C0G970","三豐","Sanfong","三豐","三豐","三豐","三豐","三豐" +"C0G950","防潮門","Fangchaomen","防潮門","防潮門","防潮門","防潮門","防潮门" +"C0G960","福寶","Fubao","福寶","福寶","福寶","福寶","福宝" +"C0G970","三豐","Sanfong","三豐","三豐","三豐","三豐","三丰" "C0G9B0","和美","Hemei","和美","和美","和美","和美","和美" "C0H890","埔里","Puli","埔里","埔里","埔里","埔里","埔里" "C0H960","草屯","Caotun","草屯","草屯","草屯","草屯","草屯" -"C0H990","昆陽","Kunyang","昆陽","昆陽","昆陽","昆陽","昆陽" +"C0H990","昆陽","Kunyang","昆陽","昆陽","昆陽","昆陽","昆阳" "C0H9A0","神木村","Shenmu Village","神木村","神木村","神木村","神木村","神木村" -"C0H9C0","合歡山","Hehuan Mountain","合歡山","合歡山","合歡山","合歡山","合歡山" -"C0I010","廬山","Lushan","廬山","廬山","廬山","廬山","廬山" +"C0H9C0","合歡山","Hehuan Mountain","合歡山","合歡山","合歡山","合歡山","合欢山" +"C0I010","廬山","Lushan","廬山","廬山","廬山","廬山","庐山" "C0I080","信義","Xinyi","信義","信義","信義","信義","信义" "C0I110","竹山","Zhushan","竹山","竹山","竹山","竹山","竹山" "C0I360","水里","Shuili","水里","水里","水里","水里","水里" @@ -352,10 +352,10 @@ "C0I420","國姓","Guoxing","国姓","國姓","國姓","國姓","国姓" "C0I460","南投","Nantou","南投","南投","南投","南投","南投" "C0I480","梅峰","Meifeng","梅峰","梅峰","梅峰","梅峰","梅峰" -"C0I490","萬大林道","Wandalindao","萬大林道","萬大林道","萬大林道","萬大林道","萬大林道" -"C0I520","玉山風口","Yushanfengkou","玉山風口","玉山風口","玉山風口","玉山風口","玉山風口" -"C0I530","小奇萊","Xiaoqilai","小奇萊","小奇萊","小奇萊","小奇萊","小奇萊" -"C0I540","奇萊稜線","Qilailengxian","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線" +"C0I490","萬大林道","Wandalindao","萬大林道","萬大林道","萬大林道","萬大林道","万大林道" +"C0I520","玉山風口","Yushanfengkou","玉山風口","玉山風口","玉山風口","玉山風口","玉山风口" +"C0I530","小奇萊","Xiaoqilai","小奇萊","小奇萊","小奇萊","小奇萊","小奇莱" +"C0I540","奇萊稜線","Qilailengxian","奇萊稜線","奇萊稜線","奇萊稜線","奇萊稜線","奇莱棱线" "C0K250","崙背","Lunbei","崙背","崙背","崙背","崙背","仑背" "C0K280","四湖","Sihu","四湖","四湖","四湖","四湖","四湖" "C0K291","宜梧","Yiwu","宜梧","宜梧","宜梧","宜梧","宜梧" @@ -372,14 +372,14 @@ "C0K480","莿桐","Citong","莿桐","莿桐","莿桐","莿桐","莿桐" "C0K500","元長","Yuanchang","元長","元長","元長","元長","元长" "C0K510","水林","Shuilin","水林","水林","水林","水林","水林" -"C0K530","臺西","Taixi","台西","臺西","臺西","臺西","臺西" -"C0K550","蔦松","Niaosong","蔦松","蔦松","蔦松","蔦松","蔦松" +"C0K530","臺西","Taixi","台西","臺西","臺西","臺西","台西" +"C0K550","蔦松","Niaosong","蔦松","蔦松","蔦松","蔦松","茑松" "C0K560","棋山","Qishan","棋山","棋山","棋山","棋山","棋山" -"C0K580","高鐵雲林","THSR Yunlin","高鐵雲林","高鐵雲林","高鐵雲林","高鐵雲林","高鐵雲林" -"C0K590","雲林東勢","Dongshi, Yunlin County","雲林東勢","雲林東勢","雲林東勢","雲林東勢","雲林東勢" +"C0K580","高鐵雲林","THSR Yunlin","高鐵雲林","高鐵雲林","高鐵雲林","高鐵雲林","高铁云林" +"C0K590","雲林東勢","Dongshi, Yunlin County","雲林東勢","雲林東勢","雲林東勢","雲林東勢","云林东势" "C0K600","箔子寮","Bozihliao","箔子寮","箔子寮","箔子寮","箔子寮","箔子寮" -"C0M520","東後寮","Donghouliao","東後寮","東後寮","東後寮","東後寮","東後寮" -"C0M530","奮起湖","Fenqihu","奮起湖","奮起湖","奮起湖","奮起湖","奮起湖" +"C0M520","東後寮","Donghouliao","東後寮","東後寮","東後寮","東後寮","东后寮" +"C0M530","奮起湖","Fenqihu","奮起湖","奮起湖","奮起湖","奮起湖","奋起湖" "C0M640","中埔","Zhongpu","中埔","中埔","中埔","中埔","中埔" "C0M650","朴子","Puzi","朴子","朴子","朴子","朴子","朴子" "C0M660","溪口","Xikou","渓口","溪口","溪口","溪口","溪口" @@ -389,27 +389,27 @@ "C0M700","竹崎","Zhuqi","竹崎","竹崎","竹崎","竹崎","竹崎" "C0M710","東石","Dongshi","東石","東石","東石","東石","东石" "C0M720","番路","Fanlu","番路","番路","番路","番路","番路" -"C0M730","嘉義市東區","Dongqu Chiayi City","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區" -"C0M740","六腳","Liujiao","六脚","六腳","六腳","六腳","六腳" +"C0M730","嘉義市東區","Dongqu Chiayi City","嘉義市東區","嘉義市東區","嘉義市東區","嘉義市東區","嘉义市东区" +"C0M740","六腳","Liujiao","六脚","六腳","六腳","六腳","六脚" "C0M750","布袋","Budai","布袋","布袋","布袋","布袋","布袋" "C0M760","民雄","Minxiong","民雄","民雄","民雄","民雄","民雄" -"C0M770","嘉義梅山","Meishan Chiayi County","嘉義梅山","嘉義梅山","嘉義梅山","嘉義梅山","嘉義梅山" +"C0M770","嘉義梅山","Meishan Chiayi County","嘉義梅山","嘉義梅山","嘉義梅山","嘉義梅山","嘉义梅山" "C0M780","鹿草","Lucao","鹿草","鹿草","鹿草","鹿草","鹿草" "C0M790","新港","Xingang","新港","新港","新港","新港","新港" "C0M800","茶山","Chashan","茶山","茶山","茶山","茶山","茶山" "C0M810","里佳","Lijia","里佳","里佳","里佳","里佳","里佳" -"C0M820","達邦","Dabang","達邦","達邦","達邦","達邦","達邦" +"C0M820","達邦","Dabang","達邦","達邦","達邦","達邦","达邦" "C0M850","表湖","Biaohu","表湖","表湖","表湖","表湖","表湖" "C0M860","新美","Shinmei","新美","新美","新美","新美","新美" "C0M880","好美里","Haomeili","好美里","好美里","好美里","好美里","好美里" -"C0N010","鯤鯓國小","Kunshen Elementary School","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小" +"C0N010","鯤鯓國小","Kunshen Elementary School","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小","鲲鯓国小" "C0N020","城西","Chengsi","城西","城西","城西","城西","城西" "C0N030","四草","Sihtsao","四草","四草","四草","四草","四草" "C0N040","蘆竹溝","Lujhugou","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝" "C0N050","蚵寮","Eliao","蚵寮","蚵寮","蚵寮","蚵寮","蚵寮" "C0O830","北寮","Beiliao","北寮","北寮","北寮","北寮","北寮" "C0O840","王爺宮","Wangyegong","王爺宮","王爺宮","王爺宮","王爺宮","王爺宮" -"C0O860","大內","Danei","大内","大內","大內","大內","大內" +"C0O860","大內","Danei","大内","大內","大內","大內","大内" "C0O900","善化","Shanhua","善化","善化","善化","善化","善化" "C0O960","崎頂","Qiding","崎頂","崎頂","崎頂","崎頂","崎頂" "C0O970","虎頭埤","Hutoupi","虎頭埤","虎頭埤","虎頭埤","虎頭埤","虎頭埤" @@ -417,80 +417,80 @@ "C0O990","媽廟","Mamiao","媽廟","媽廟","媽廟","媽廟","媽廟" "C0R100","尾寮山","Weiliaoshan","尾寮山","尾寮山","尾寮山","尾寮山","尾寮山" "C0R130","阿禮","Ali","阿禮","阿禮","阿禮","阿禮","阿禮" -"C0R140","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","瑪家" -"C0R150","三地門","Sandimen","三地門","三地門","三地門","三地門","三地門" -"C0R160","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","鹽埔" +"C0R140","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","玛家" +"C0R150","三地門","Sandimen","三地門","三地門","三地門","三地門","三地门" +"C0R160","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","盐埔" "C0R190","赤山","Chishan","赤山","赤山","赤山","赤山","赤山" "C0R220","潮州","Chaojhou","潮州","潮州","潮州","潮州","潮州" -"C0R240","來義","Laiyi","来義","來義","來義","來義","來義" +"C0R240","來義","Laiyi","来義","來義","來義","來義","来义" "C0R260","春日","Chunri","春日","春日","春日","春日","春日" "C0R270","琉球嶼","Liouciouyu","琉球嶼","琉球嶼","琉球嶼","琉球嶼","琉球嶼" "C0R280","檳榔","Binlang","檳榔","檳榔","檳榔","檳榔","檳榔" -"C0R320","車城","Checheng","車城","車城","車城","車城","車城" +"C0R320","車城","Checheng","車城","車城","車城","車城","车城" "C0R341","牡丹","Mudan","牡丹","牡丹","牡丹","牡丹","牡丹" -"C0R350","貓鼻頭","Maobitou","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭" -"C0R440","大漢山","Dahanshan","大漢山","大漢山","大漢山","大漢山","大漢山" -"C0R470","高樹","Gaoshu","高樹","高樹","高樹","高樹","高樹" -"C0R480","長治","Changzhi","長治","長治","長治","長治","長治" +"C0R350","貓鼻頭","Maobitou","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭","猫鼻头" +"C0R440","大漢山","Dahanshan","大漢山","大漢山","大漢山","大漢山","大汉山" +"C0R470","高樹","Gaoshu","高樹","高樹","高樹","高樹","高树" +"C0R480","長治","Changzhi","長治","長治","長治","長治","长治" "C0R490","九如","Jiuru","九如","九如","九如","九如","九如" -"C0R520","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁頂" +"C0R520","崁頂","Kanding","崁頂","崁頂","崁頂","崁頂","崁顶" "C0R540","佳冬","Jiadong","佳冬","佳冬","佳冬","佳冬","佳冬" "C0R550","新埤","Xinpi","新埤","新埤","新埤","新埤","新埤" -"C0R560","新園","Xinyuan","新園","新園","新園","新園","新園" +"C0R560","新園","Xinyuan","新園","新園","新園","新園","新园" "C0R570","麟洛","Linluo","麟洛","麟洛","麟洛","麟洛","麟洛" "C0R580","南州","Nanzhou","南州","南州","南州","南州","南州" "C0R590","里港","Ligang","里港","里港","里港","里港","里港" -"C0R600","舊泰武","Jiutaiwu","舊泰武","舊泰武","舊泰武","舊泰武","舊泰武" -"C0R620","墾雷","Kenlei","墾雷","墾雷","墾雷","墾雷","墾雷" -"C0R640","東港","Donggang","東港","東港","東港","東港","東港" +"C0R600","舊泰武","Jiutaiwu","舊泰武","舊泰武","舊泰武","舊泰武","旧泰武" +"C0R620","墾雷","Kenlei","墾雷","墾雷","墾雷","墾雷","垦雷" +"C0R640","東港","Donggang","東港","東港","東港","東港","东港" "C0R650","竹田","Zhutian","竹田","竹田","竹田","竹田","竹田" "C0R660","枋寮","Fangliao","枋寮","枋寮","枋寮","枋寮","枋寮" -"C0R670","楓港","Fenggang","楓港","楓港","楓港","楓港","楓港" -"C0R680","佳樂水","Jialeshui","佳樂水","佳樂水","佳樂水","佳樂水","佳樂水" -"C0R690","墾丁","Kenting","墾丁","墾丁","墾丁","墾丁","墾丁" +"C0R670","楓港","Fenggang","楓港","楓港","楓港","楓港","枫港" +"C0R680","佳樂水","Jialeshui","佳樂水","佳樂水","佳樂水","佳樂水","佳乐水" +"C0R690","墾丁","Kenting","墾丁","墾丁","墾丁","墾丁","垦丁" "C0R700","枋山","Fangshan","枋山","枋山","枋山","枋山","枋山" -"C0R710","龍磐","Longpan","龍磐","龍磐","龍磐","龍磐","龍磐" +"C0R710","龍磐","Longpan","龍磐","龍磐","龍磐","龍磐","龙磐" "C0R720","旭海","Xuhai","旭海","旭海","旭海","旭海","旭海" -"C0R730","大坪頂","Dapingding","大坪頂","大坪頂","大坪頂","大坪頂","大坪頂" -"C0R741","獅子","Shizi","獅子","獅子","獅子","獅子","獅子" +"C0R730","大坪頂","Dapingding","大坪頂","大坪頂","大坪頂","大坪頂","大坪顶" +"C0R741","獅子","Shizi","獅子","獅子","獅子","獅子","狮子" "C0R750","四林格山","Silingeshan","四林格山","四林格山","四林格山","四林格山","四林格山" "C0R760","南仁湖","Nanrenhu","南仁湖","南仁湖","南仁湖","南仁湖","南仁湖" "C0R770","保力","Baoli","保力","保力","保力","保力","保力" -"C0R780","滿州","Manzhou","満州","滿州","滿州","滿州","滿州" +"C0R780","滿州","Manzhou","満州","滿州","滿州","滿州","满州" "C0R790","九棚","Jiupeng","九棚","九棚","九棚","九棚","九棚" "C0R800","丹路","Danlu","丹路","丹路","丹路","丹路","丹路" -"C0R810","內獅","Neishi","內獅","內獅","內獅","內獅","內獅" -"C0R820","白鷺","Bailu","白鷺","白鷺","白鷺","白鷺","白鷺" +"C0R810","內獅","Neishi","內獅","內獅","內獅","內獅","内狮" +"C0R820","白鷺","Bailu","白鷺","白鷺","白鷺","白鷺","白鹭" "C0R830","高士","Gaoshi","高士","高士","高士","高士","高士" "C0R840","牡丹池山","Mudanchisahn","牡丹池山","牡丹池山","牡丹池山","牡丹池山","牡丹池山" -"C0R850","林邊","Linbian","林辺","林邊","林邊","林邊","林邊" -"C0R860","鼻頭","Bitou","鼻頭","鼻頭","鼻頭","鼻頭","鼻頭" -"C0R870","興海","Singhai","興海","興海","興海","興海","興海" -"C0R880","後壁湖","Houbihu","後壁湖","後壁湖","後壁湖","後壁湖","後壁湖" +"C0R850","林邊","Linbian","林辺","林邊","林邊","林邊","林边" +"C0R860","鼻頭","Bitou","鼻頭","鼻頭","鼻頭","鼻頭","鼻头" +"C0R870","興海","Singhai","興海","興海","興海","興海","兴海" +"C0R880","後壁湖","Houbihu","後壁湖","後壁湖","後壁湖","後壁湖","后壁湖" "C0R890","山海","Shanhai","山海","山海","山海","山海","山海" "C0R900","竹坑","Jhukeng","竹坑","竹坑","竹坑","竹坑","竹坑" "C0R910","下寮","Sialiao","下寮","下寮","下寮","下寮","下寮" "C0R920","塭仔","Wunzai","塭仔","塭仔","塭仔","塭仔","塭仔" "C0R930","萬丹","Wandan","万丹","萬丹","萬丹","萬丹","万丹" -"C0R940","加祿堂","Jialutang","加祿堂","加祿堂","加祿堂","加祿堂","加祿堂" -"C0R950","萬隆國小","Wanlongguoxiao","萬隆國小","萬隆國小","萬隆國小","萬隆國小","萬隆國小" -"C0R960","內埔","Neipu","内埔","內埔","內埔","內埔","內埔" -"C0S660","下馬","Xiama","下馬","下馬","下馬","下馬","下馬" +"C0R940","加祿堂","Jialutang","加祿堂","加祿堂","加祿堂","加祿堂","加禄堂" +"C0R950","萬隆國小","Wanlongguoxiao","萬隆國小","萬隆國小","萬隆國小","萬隆國小","万隆国小" +"C0R960","內埔","Neipu","内埔","內埔","內埔","內埔","内埔" +"C0S660","下馬","Xiama","下馬","下馬","下馬","下馬","下马" "C0S690","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" "C0S700","知本","Jhihben","知本","知本","知本","知本","知本" "C0S710","鹿野","Luye","鹿野","鹿野","鹿野","鹿野","鹿野" "C0S730","綠島","Ludao","緑島","綠島","綠島","綠島","绿岛" "C0S740","池上","Chihshang","池上","池上","池上","池上","池上" -"C0S750","向陽","Siangyang","向陽","向陽","向陽","向陽","向陽" -"C0S760","紅石","Hongshih","紅石","紅石","紅石","紅石","紅石" +"C0S750","向陽","Siangyang","向陽","向陽","向陽","向陽","向阳" +"C0S760","紅石","Hongshih","紅石","紅石","紅石","紅石","红石" "C0S770","大溪山","Dasishan","大溪山","大溪山","大溪山","大溪山","大溪山" -"C0S790","金崙","Jinlun","金崙","金崙","金崙","金崙","金崙" -"C0S810","東河","Donghe","東河","東河","東河","東河","東河" -"C0S830","長濱","Changbin","長浜","長濱","長濱","長濱","長濱" +"C0S790","金崙","Jinlun","金崙","金崙","金崙","金崙","金仑" +"C0S810","東河","Donghe","東河","東河","東河","東河","东河" +"C0S830","長濱","Changbin","長浜","長濱","長濱","長濱","长滨" "C0S840","南田","Nantian","南田","南田","南田","南田","南田" -"C0S890","關山","Guanshan","関山","關山","關山","關山","關山" -"C0S900","蘭嶼高中","Lanyu High School","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中" -"C0S910","蘭嶼燈塔","Lanyu Lighthouse","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔" +"C0S890","關山","Guanshan","関山","關山","關山","關山","关山" +"C0S900","蘭嶼高中","Lanyu High School","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中","兰屿高中" +"C0S910","蘭嶼燈塔","Lanyu Lighthouse","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","兰屿灯塔" "C0S920","金峰嘉蘭","Jialan Jinfeng","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭" "C0S930","延平","Yanping","延平","延平","延平","延平","延平" "C0S940","石寧山","Shiningshan","石寧山","石寧山","石寧山","石寧山","石寧山" @@ -519,145 +519,145 @@ "C0T820","天祥","Tianxiang","天祥","天祥","天祥","天祥","天祥" "C0T870","鯉魚潭","Liyutan","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭" "C0T900","西林","Xilin","西林","西林","西林","西林","西林" -"C0T960","光復","Guangfu","光復","光復","光復","光復","光復" +"C0T960","光復","Guangfu","光復","光復","光復","光復","光复" "C0T9A0","月眉山","Yuemeishan","月眉山","月眉山","月眉山","月眉山","月眉山" "C0T9B0","水源","Shuiyuan","水源","水源","水源","水源","水源" "C0T9D0","和中","Hezhong","和中","和中","和中","和中","和中" "C0T9E0","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" -"C0T9F0","水璉","Shuilian","水璉","水璉","水璉","水璉","水璉" -"C0T9G0","鳳林山","Fenglinshan","鳳林山","鳳林山","鳳林山","鳳林山","鳳林山" -"C0T9H0","加路蘭山","Jialulanshan","加路蘭山","加路蘭山","加路蘭山","加路蘭山","加路蘭山" -"C0T9I0","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","豐濱" -"C0T9M0","靜浦","Jingpu","靜浦","靜浦","靜浦","靜浦","靜浦" +"C0T9F0","水璉","Shuilian","水璉","水璉","水璉","水璉","水琏" +"C0T9G0","鳳林山","Fenglinshan","鳳林山","鳳林山","鳳林山","鳳林山","凤林山" +"C0T9H0","加路蘭山","Jialulanshan","加路蘭山","加路蘭山","加路蘭山","加路蘭山","加路兰山" +"C0T9I0","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","丰滨" +"C0T9M0","靜浦","Jingpu","靜浦","靜浦","靜浦","靜浦","静埔" "C0T9N0","富里","Fuli","富里","富里","富里","富里","富里" -"C0TA10","花蓮漁港","Hualien Fishing Harbor","花蓮漁港","花蓮漁港","花蓮漁港","花蓮漁港","花蓮漁港" -"C0TA20","加灣","Jiawan","加灣","加灣","加灣","加灣","加灣" -"C0TA30","鹽寮","Yanliao","鹽寮","鹽寮","鹽寮","鹽寮","鹽寮" +"C0TA10","花蓮漁港","Hualien Fishing Harbor","花蓮漁港","花蓮漁港","花蓮漁港","花蓮漁港","花莲渔港" +"C0TA20","加灣","Jiawan","加灣","加灣","加灣","加灣","加湾" +"C0TA30","鹽寮","Yanliao","鹽寮","鹽寮","鹽寮","鹽寮","盐寮" "C0TA40","秀林","Xiulin","秀林","秀林","秀林","秀林","秀林" "C0TA50","和仁","Heren","和仁","和仁","和仁","和仁","和仁" -"C0TA80","立霧山","Liwushan","立霧山","立霧山","立霧山","立霧山","立霧山" -"C0U520","雙連埤","Shuanglianpi","雙連埤","雙連埤","雙連埤","雙連埤","雙連埤" +"C0TA80","立霧山","Liwushan","立霧山","立霧山","立霧山","立霧山","立雾山" +"C0U520","雙連埤","Shuanglianpi","雙連埤","雙連埤","雙連埤","雙連埤","双连埤" "C0U600","礁溪","Chiaoshi","礁渓","礁溪","礁溪","礁溪","礁溪" -"C0U650","玉蘭","Yulan","玉蘭","玉蘭","玉蘭","玉蘭","玉蘭" +"C0U650","玉蘭","Yulan","玉蘭","玉蘭","玉蘭","玉蘭","玉兰" "C0U710","太平山","Taipingshan","太平山","太平山","太平山","太平山","太平山" "C0U720","南山","Nanshan","南山","南山","南山","南山","南山" -"C0U750","龜山島","Gueishandao","龜山島","龜山島","龜山島","龜山島","龜山島" -"C0U760","東澳","Dong-Ao","東澳","東澳","東澳","東澳","東澳" +"C0U750","龜山島","Gueishandao","龜山島","龜山島","龜山島","龜山島","龟山岛" +"C0U760","東澳","Dong-Ao","東澳","東澳","東澳","東澳","东澳" "C0U770","南澳","Nanao","南澳","南澳","南澳","南澳","南澳" -"C0U780","五結","Wujie","五結","五結","五結","五結","五結" -"C0U860","頭城","Toucheng","頭城","頭城","頭城","頭城","頭城" +"C0U780","五結","Wujie","五結","五結","五結","五結","五结" +"C0U860","頭城","Toucheng","頭城","頭城","頭城","頭城","头城" "C0U870","大礁溪","Dajiaoxi","大礁溪","大礁溪","大礁溪","大礁溪","大礁溪" -"C0U880","北關","Beiguan","北關","北關","北關","北關","北關" +"C0U880","北關","Beiguan","北關","北關","北關","北關","北关" "C0U890","三星","Sanxing","三星","三星","三星","三星","三星" -"C0U900","內城","Neicheng","內城","內城","內城","內城","內城" +"C0U900","內城","Neicheng","內城","內城","內城","內城","内城" "C0U910","冬山","Dongshan","冬山","冬山","冬山","冬山","冬山" -"C0U940","羅東","Luodong","羅東","羅東","羅東","羅東","羅東" -"C0U950","鶯子嶺","Yingziling","鶯子嶺","鶯子嶺","鶯子嶺","鶯子嶺","鶯子嶺" +"C0U940","羅東","Luodong","羅東","羅東","羅東","羅東","罗东" +"C0U950","鶯子嶺","Yingziling","鶯子嶺","鶯子嶺","鶯子嶺","鶯子嶺","莺子岭" "C0U960","翠峰湖","Cuifenghu","翠峰湖","翠峰湖","翠峰湖","翠峰湖","翠峰湖" "C0U970","大福","Dafu","大福","大福","大福","大福","大福" "C0U980","坪林石牌","Shipai Pinglin","坪林石牌","坪林石牌","坪林石牌","坪林石牌","坪林石牌" -"C0U990","員山","Yuanshan","員山","員山","員山","員山","員山" -"C0UA00","土場","Tuchang","土場","土場","土場","土場","土場" -"C0UA10","鴛鴦湖","Yuanyanghu","鴛鴦湖","鴛鴦湖","鴛鴦湖","鴛鴦湖","鴛鴦湖" +"C0U990","員山","Yuanshan","員山","員山","員山","員山","员山" +"C0UA00","土場","Tuchang","土場","土場","土場","土場","土场" +"C0UA10","鴛鴦湖","Yuanyanghu","鴛鴦湖","鴛鴦湖","鴛鴦湖","鴛鴦湖","鸳鸯湖" "C0UA20","多加屯","Duojiatun","多加屯","多加屯","多加屯","多加屯","多加屯" -"C0UA30","白嶺","Bailing","白嶺","白嶺","白嶺","白嶺","白嶺" +"C0UA30","白嶺","Bailing","白嶺","白嶺","白嶺","白嶺","白岭" "C0UA40","西德山","Xideshan","西德山","西德山","西德山","西德山","西德山" "C0UA50","西帽山","Ximaoshan","西帽山","西帽山","西帽山","西帽山","西帽山" -"C0UA60","樟樹山","Zhangshushan","樟樹山","樟樹山","樟樹山","樟樹山","樟樹山" +"C0UA60","樟樹山","Zhangshushan","樟樹山","樟樹山","樟樹山","樟樹山","樟树山" "C0UA70","桃源谷","Taoyuangu","桃源谷","桃源谷","桃源谷","桃源谷","桃源谷" -"C0UA80","大溪漁港","Dasi Fishing Harbor","大溪漁港","大溪漁港","大溪漁港","大溪漁港","大溪漁港" +"C0UA80","大溪漁港","Dasi Fishing Harbor","大溪漁港","大溪漁港","大溪漁港","大溪漁港","大溪渔港" "C0UA90","石城","Shihcheng","石城","石城","石城","石城","石城" -"C0UB00","淡江大學蘭陽校園","Tamkang Lanyang Campus","淡江大学蘭陽キャンパス","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大學蘭陽校園" -"C0UB10","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","蘇澳" -"C0UB20","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壯圍" +"C0UB00","淡江大學蘭陽校園","Tamkang Lanyang Campus","淡江大学蘭陽キャンパス","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大學蘭陽校園","淡江大学兰阳校园" +"C0UB10","蘇澳","Suao","蘇澳","蘇澳","蘇澳","蘇澳","苏澳" +"C0UB20","壯圍","Jhuangwei","壮囲","壯圍","壯圍","壯圍","壮围" "C0UB60","明池","Mingchr","明池","明池","明池","明池","明池" -"C0UB70","太平山中間站","Jhongjian","太平山中間站","太平山中間站","太平山中間站","太平山中間站","太平山中間站" +"C0UB70","太平山中間站","Jhongjian","太平山中間站","太平山中間站","太平山中間站","太平山中間站","太平山中间站" "C0UB80","翠峰林道6K","Trifong 6k","翠峰林道6K","翠峰林道6K","翠峰林道6K","翠峰林道6K","翠峰林道6K" -"C0UB90","太平山莊","Taipingshan Villa","太平山莊","太平山莊","太平山莊","太平山莊","太平山莊" -"C0V210","復興","Fuxing","復興","復興","復興","復興","復興" +"C0UB90","太平山莊","Taipingshan Villa","太平山莊","太平山莊","太平山莊","太平山莊","太平山庄" +"C0V210","復興","Fuxing","復興","復興","復興","復興","复兴" "C0V350","溪埔","Xipu","溪埔","溪埔","溪埔","溪埔","溪埔" -"C0V360","內門","Neimen","内門","內門","內門","內門","內門" +"C0V360","內門","Neimen","内門","內門","內門","內門","内门" "C0V370","古亭坑","Gutingkeng","古亭坑","古亭坑","古亭坑","古亭坑","古亭坑" "C0V400","阿公店","Agongdian","阿公店","阿公店","阿公店","阿公店","阿公店" -"C0V440","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","鳳山" -"C0V450","鳳森","Fengsen","鳳森","鳳森","鳳森","鳳森","鳳森" -"C0V490","新興","Sinsing","新興","新興","新興","新興","新興" -"C0V530","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿蓮" +"C0V440","鳳山","Fengshan","鳳山","鳳山","鳳山","鳳山","凤山" +"C0V450","鳳森","Fengsen","鳳森","鳳森","鳳森","鳳森","凤森" +"C0V490","新興","Sinsing","新興","新興","新興","新興","新兴" +"C0V530","阿蓮","Alian","阿蓮","阿蓮","阿蓮","阿蓮","阿连" "C0V610","梓官","Ziguan","梓官","梓官","梓官","梓官","梓官" "C0V620","永安","Yong'An","永安","永安","永安","永安","永安" "C0V630","茄萣","Qieding","茄萣","茄萣","茄萣","茄萣","茄萣" -"C0V640","湖內","Hunei","湖内","湖內","湖內","湖內","湖內" -"C0V650","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","彌陀" -"C0V660","岡山","Gangshan","岡山","岡山","岡山","岡山","岡山" +"C0V640","湖內","Hunei","湖内","湖內","湖內","湖內","湖内" +"C0V650","彌陀","Mituo","弥陀","彌陀","彌陀","彌陀","弥陀" +"C0V660","岡山","Gangshan","岡山","岡山","岡山","岡山","冈山" "C0V680","仁武","Renwu","仁武","仁武","仁武","仁武","仁武" "C0V690","鼓山","Gushan","鼓山","鼓山","鼓山","鼓山","鼓山" "C0V700","三民","Sanmin","三民","三民","三民","三民","三民" "C0V710","苓雅","Lingya","苓雅","苓雅","苓雅","苓雅","苓雅" -"C0V720","林園","Linyuan","林園","林園","林園","林園","林園" +"C0V720","林園","Linyuan","林園","林園","林園","林園","林园" "C0V730","大寮","Daliao","大寮","大寮","大寮","大寮","大寮" "C0V740","旗山","Qishan","旗山","旗山","旗山","旗山","旗山" "C0V750","路竹","Luzhu","路竹","路竹","路竹","路竹","路竹" -"C0V760","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","橋頭" +"C0V760","橋頭","Qiaotou","橋頭","橋頭","橋頭","橋頭","桥头" "C0V770","大社","Dashe","大社","大社","大社","大社","大社" -"C0V790","萬山","Wanshan","萬山","萬山","萬山","萬山","萬山" -"C0V800","六龜","Liugui","六亀","六龜","六龜","六龜","六龜" -"C0V810","左營","Zuoying","左営","左營","左營","左營","左營" +"C0V790","萬山","Wanshan","萬山","萬山","萬山","萬山","万山" +"C0V800","六龜","Liugui","六亀","六龜","六龜","六龜","六龟" +"C0V810","左營","Zuoying","左営","左營","左營","左營","左营" "C0V820","小林","Xiaolin","小林","小林","小林","小林","小林" -"C0V840","鳳鼻頭","Fongbitou","鳳鼻頭","鳳鼻頭","鳳鼻頭","鳳鼻頭","鳳鼻頭" +"C0V840","鳳鼻頭","Fongbitou","鳳鼻頭","鳳鼻頭","鳳鼻頭","鳳鼻頭","凤鼻头" "C0V850","蚵仔寮","Kezailiao","蚵仔寮","蚵仔寮","蚵仔寮","蚵仔寮","蚵仔寮" "C0V860","南寮","Nanliao","南寮","南寮","南寮","南寮","南寮" "C0V870","文安","Wunan","文安","文安","文安","文安","文安" -"C0V880","興達","Singda","興達","興達","興達","興達","興達" -"C0V890","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前鎮" +"C0V880","興達","Singda","興達","興達","興達","興達","兴达" +"C0V890","前鎮","Chian Jhen","前鎮","前鎮","前鎮","前鎮","前镇" "C0V900","汕尾","Shanwei","汕尾","汕尾","汕尾","汕尾","汕尾" -"C0V910","大樹","Dashu","大樹","大樹","大樹","大樹","大樹" -"C0W110","東莒","Dongju","東莒","東莒","東莒","東莒","東莒" -"C0W120","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西嶼" -"C0W130","花嶼","Huayu","花嶼","花嶼","花嶼","花嶼","花嶼" +"C0V910","大樹","Dashu","大樹","大樹","大樹","大樹","大树" +"C0W110","東莒","Dongju","東莒","東莒","東莒","東莒","东莒" +"C0W120","西嶼","Xiyu","西嶼","西嶼","西嶼","西嶼","西屿" +"C0W130","花嶼","Huayu","花嶼","花嶼","花嶼","花嶼","花屿" "C0W140","金沙","Jinsha ","金沙","金沙","金沙","金沙","金沙" -"C0W150","金寧","Jinning","金寧","金寧","金寧","金寧","金寧" -"C0W160","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","烏坵" +"C0W150","金寧","Jinning","金寧","金寧","金寧","金寧","金宁" +"C0W160","烏坵","Wuqiu","烏坵","烏坵","烏坵","烏坵","乌坵" "C0W180","七美","Qimei","七美","七美","七美","七美","七美" "C0W190","望安","Wangan","望安","望安","望安","望安","望安" "C0W200","湖西","Husi","湖西","湖西","湖西","湖西","湖西" "C0W220","北竿","Beigan","北竿","北竿","北竿","北竿","北竿" -"C0W240","九宮","Jiugong ","九宮","九宮","九宮","九宮","九宮" -"C0X050","東河","Donghe","東河","東河","東河","東河","東河" -"C0X060","下營","Xiaying","下営","下營","下營","下營","下營" +"C0W240","九宮","Jiugong ","九宮","九宮","九宮","九宮","九宫" +"C0X050","東河","Donghe","東河","東河","東河","東河","东河" +"C0X060","下營","Xiaying","下営","下營","下營","下營","下营" "C0X080","佳里","Jiali","佳里","佳里","佳里","佳里","佳里" -"C0X100","臺南市北區","Beiqu Tainan City","臺南市北區","臺南市北區","臺南市北區","臺南市北區","臺南市北區" -"C0X110","臺南市南區","Nanqu Tainan City","臺南市南區","臺南市南區","臺南市南區","臺南市南區","臺南市南區" +"C0X100","臺南市北區","Beiqu Tainan City","臺南市北區","臺南市北區","臺南市北區","臺南市北區","台南市北区" +"C0X110","臺南市南區","Nanqu Tainan City","臺南市南區","臺南市南區","臺南市南區","臺南市南區","台南市南区" "C0X120","麻豆","Madou","麻豆","麻豆","麻豆","麻豆","麻豆" "C0X130","官田","Guantian","官田","官田","官田","官田","官田" "C0X140","西港","Xigang","西港","西港","西港","西港","西港" "C0X150","安定","Anding","安定","安定","安定","安定","安定" "C0X160","仁德","Rende","仁徳","仁德","仁德","仁德","仁德" -"C0X170","關廟","Guanmiao","関廟","關廟","關廟","關廟","關廟" +"C0X170","關廟","Guanmiao","関廟","關廟","關廟","關廟","关庙" "C0X180","山上","Shanshang","山上","山上","山上","山上","山上" "C0X190","安平","Anping","安平","安平","安平","安平","安平" -"C0X200","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左鎮" +"C0X200","左鎮","Zuozhen","左鎮","左鎮","左鎮","左鎮","左镇" "C0X210","白河","Baihe","白河","白河","白河","白河","白河" -"C0X220","學甲","Xuejia","学甲","學甲","學甲","學甲","學甲" -"C0X230","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","鹽水" -"C0X240","關子嶺","Guanziling","關子嶺","關子嶺","關子嶺","關子嶺","關子嶺" -"C0X250","新營","Xinying","新営","新營","新營","新營","新營" -"C0X260","後壁","Houbi","後壁","後壁","後壁","後壁","後壁" -"C0X280","將軍","Jiangjun","将軍","將軍","將軍","將軍","將軍" -"C0X290","北門","Beimen","北門","北門","北門","北門","北門" +"C0X220","學甲","Xuejia","学甲","學甲","學甲","學甲","学甲" +"C0X230","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","盐水" +"C0X240","關子嶺","Guanziling","關子嶺","關子嶺","關子嶺","關子嶺","关子岭" +"C0X250","新營","Xinying","新営","新營","新營","新營","新营" +"C0X260","後壁","Houbi","後壁","後壁","後壁","後壁","后壁" +"C0X280","將軍","Jiangjun","将軍","將軍","將軍","將軍","将军" +"C0X290","北門","Beimen","北門","北門","北門","北門","北门" "C0X300","鹿寮","Luliao","鹿寮","鹿寮","鹿寮","鹿寮","鹿寮" -"C0X320","柳營","Liuying","柳営","柳營","柳營","柳營","柳營" +"C0X320","柳營","Liuying","柳営","柳營","柳營","柳營","柳营" "C0Z020","明里","Mingli","明里","明里","明里","明里","明里" "C0Z050","佳心","Jiaxin","佳心","佳心","佳心","佳心","佳心" "C0Z061","玉里","Yuli","玉里","玉里","玉里","玉里","玉里" -"C0Z070","舞鶴","Wuhe","舞鶴","舞鶴","舞鶴","舞鶴","舞鶴" +"C0Z070","舞鶴","Wuhe","舞鶴","舞鶴","舞鶴","舞鶴","舞鹤" "C0Z080","富源","Fuyuan","富源","富源","富源","富源","富源" -"C0Z100","東華","Donghwa","東華","東華","東華","東華","東華" -"C0Z150","吉安光華","Guanghua Ji-An","吉安光華","吉安光華","吉安光華","吉安光華","吉安光華" -"C0Z160","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","鳳林" +"C0Z100","東華","Donghwa","東華","東華","東華","東華","东华" +"C0Z150","吉安光華","Guanghua Ji-An","吉安光華","吉安光華","吉安光華","吉安光華","吉安光华" +"C0Z160","鳳林","Fenglin","鳳林","鳳林","鳳林","鳳林","凤林" "C0Z170","卓溪","Zhuoxi","卓渓","卓溪","卓溪","卓溪","卓溪" "C0Z180","新城","Xincheng","新城","新城","新城","新城","新城" "C0Z190","富世","Fushi","富世","富世","富世","富世","富世" -"C0Z200","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","萬榮" +"C0Z200","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","万荣" "C0Z210","瑞穗","Ruisui","瑞穂","瑞穗","瑞穗","瑞穗","瑞穗" "C0Z220","和平林道","Hepinglindao","和平林道","和平林道","和平林道","和平林道","和平林道" "C0Z230","和平","Heping","和平","和平","和平","和平","和平" @@ -673,7 +673,7 @@ "C1A750","石碇服務區","Shiding Service Area","石碇服務區","石碇服務區","石碇服務區","石碇服務區","石碇服務區" "C1A760","坪林交控","Pinglin Traffic Control Center","坪林交控","坪林交控","坪林交控","坪林交控","坪林交控" "C1A9N0","四十份","Sihshihfen","四十份","四十份","四十份","四十份","四十份" -"C1AC50","關渡","Guandu","關渡","關渡","關渡","關渡","關渡" +"C1AC50","關渡","Guandu","關渡","關渡","關渡","關渡","关渡" "C1AI50","國三N016K","Freeway No. 3 - Rain - N016k","國三N016K","國三N016K","國三N016K","國三N016K","國三N016K" "C1AI60","國一39K邊坡","Freeway No. 1 - Rain – N039k","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡" "C1C510","水尾","Shueiwei","水尾","水尾","水尾","水尾","水尾" @@ -681,32 +681,32 @@ "C1D400","鳥嘴山","Niaozueishan","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山" "C1D410","白蘭","Bailan","白蘭","白蘭","白蘭","白蘭","白蘭" "C1D420","太閣南","Taigenan","太閣南","太閣南","太閣南","太閣南","太閣南" -"C1D630","飛鳳山","Fei Feng Mountain","飛鳳山","飛鳳山","飛鳳山","飛鳳山","飛鳳山" +"C1D630","飛鳳山","Fei Feng Mountain","飛鳳山","飛鳳山","飛鳳山","飛鳳山","飞凤山" "C1D640","外坪(五指山)","Waiping(Wuzhihshan)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)" "C1E451","象鼻","Xiangbi","象鼻","象鼻","象鼻","象鼻","象鼻" "C1E461","松安","Song-An","松安","松安","松安","松安","松安" -"C1E480","鳳美","Fongmei","鳳美","鳳美","鳳美","鳳美","鳳美" -"C1E511","新開","Xinkai","新開","新開","新開","新開","新開" -"C1E601","南勢","Nanshi","南勢","南勢","南勢","南勢","南勢" -"C1E670","南礦","Nankuang","南礦","南礦","南礦","南礦","南礦" -"C1E681","南勢山","Nanshishan","南勢山","南勢山","南勢山","南勢山","南勢山" -"C1E691","南湖","Nanhu","南湖","南湖","南湖","南湖","南湖" +"C1E480","鳳美","Fongmei","鳳美","鳳美","鳳美","鳳美","凤美" +"C1E511","新開","Xinkai","新開","新開","新開","新開","新开" +"C1E601","南勢","Nanshi","南勢","南勢","南勢","南勢","南势" +"C1E670","南礦","Nankuang","南礦","南礦","南礦","南礦","南矿" +"C1E681","南勢山","Nanshishan","南勢山","南勢山","南勢山","南勢山","南势山" +"C1E691","南湖","Nanhu","南湖","南湖","南湖","南湖","南胡" "C1E701","八卦","Bagua","八卦","八卦","八卦","八卦","八卦" "C1E711","馬拉邦山","Malabangshan","馬拉邦山","馬拉邦山","馬拉邦山","馬拉邦山","馬拉邦山" "C1E721","泰安","Tai-An","泰安","泰安","泰安","泰安","泰安" -"C1E770","公館","Gongguan","公館","公館","公館","公館","公館" -"C1E890","國三N149K","Freeway No. 1 - Rain – N149k","國三N149K","國三N149K","國三N149K","國三N149K","國三N149K" -"C1E900","國一N128K","Freeway No. 1 - Rain – N128k","國一N128K","國一N128K","國一N128K","國一N128K","國一N128K" -"C1F871","上谷關","Shangguguan","上谷關","上谷關","上谷關","上谷關","上谷關" -"C1F891","稍來","Shaolai","稍來","稍來","稍來","稍來","稍來" +"C1E770","公館","Gongguan","公館","公館","公館","公館","公馆" +"C1E890","國三N149K","Freeway No. 1 - Rain – N149k","國三N149K","國三N149K","國三N149K","國三N149K","国三N149K" +"C1E900","國一N128K","Freeway No. 1 - Rain – N128k","國一N128K","國一N128K","國一N128K","國一N128K","国一N128K" +"C1F871","上谷關","Shangguguan","上谷關","上谷關","上谷關","上谷關","上谷关" +"C1F891","稍來","Shaolai","稍來","稍來","稍來","稍來","稍来" "C1F911","新伯公","Xinbogong","新伯公","新伯公","新伯公","新伯公","新伯公" -"C1F941","雪嶺","Xueling","雪嶺","雪嶺","雪嶺","雪嶺","雪嶺" +"C1F941","雪嶺","Xueling","雪嶺","雪嶺","雪嶺","雪嶺","雪岭" "C1F9B1","桐林","Tonglin","桐林","桐林","桐林","桐林","桐林" "C1F9C1","白冷","Baileng","白冷","白冷","白冷","白冷","白冷" "C1F9D1","白毛台","Baimaotai","白毛台","白毛台","白毛台","白毛台","白毛台" -"C1F9E1","龍安","Long-An","龍安","龍安","龍安","龍安","龍安" -"C1F9F1","伯公龍","Bogonglong","伯公龍","伯公龍","伯公龍","伯公龍","伯公龍" -"C1F9G1","慶福山","Cingfushan","慶福山","慶福山","慶福山","慶福山","慶福山" +"C1F9E1","龍安","Long-An","龍安","龍安","龍安","龍安","龙安" +"C1F9F1","伯公龍","Bogonglong","伯公龍","伯公龍","伯公龍","伯公龍","伯公龙" +"C1F9G1","慶福山","Cingfushan","慶福山","慶福山","慶福山","慶福山","庆福山" "C1F9J1","清水林","Qingshuilin","清水林","清水林","清水林","清水林","清水林" "C1F9W0","德基","Deji","德基","德基","德基","德基","德基" "C1G691","下水埔","Xiashuipu","下水埔","下水埔","下水埔","下水埔","下水埔" @@ -714,25 +714,25 @@ "C1H000","翠峰","Cuifeng","翠峰","翠峰","翠峰","翠峰","翠峰" "C1H840","國三N238K","Freeway No. 3 - Rain –N238k","國三N238K","國三N238K","國三N238K","國三N238K","國三N238K" "C1H900","清流","Qingliu","清流","清流","清流","清流","清流" -"C1H920","長豐","Changfeng","長豐","長豐","長豐","長豐","長豐" -"C1H941","雙冬","Shuangdong","雙冬","雙冬","雙冬","雙冬","雙冬" +"C1H920","長豐","Changfeng","長豐","長豐","長豐","長豐","长丰" +"C1H941","雙冬","Shuangdong","雙冬","雙冬","雙冬","雙冬","双冬" "C1H971","六分寮","Liufenliao","六分寮","六分寮","六分寮","六分寮","六分寮" "C1H9B1","阿眉","Amei","阿眉","阿眉","阿眉","阿眉","阿眉" -"C1I020","萬大","Wanda","萬大","萬大","萬大","萬大","萬大" +"C1I020","萬大","Wanda","萬大","萬大","萬大","萬大","万大" "C1I030","武界","Wujie","武界","武界","武界","武界","武界" "C1I050","丹大","Danda","丹大","丹大","丹大","丹大","丹大" "C1I070","和社","Heshe","和社","和社","和社","和社","和社" -"C1I101","溪頭","Xitou","溪頭","溪頭","溪頭","溪頭","溪頭" +"C1I101","溪頭","Xitou","溪頭","溪頭","溪頭","溪頭","溪头" "C1I121","大鞍","Da-An","大鞍","大鞍","大鞍","大鞍","大鞍" -"C1I131","桶頭","Tongtou","桶頭","桶頭","桶頭","桶頭","桶頭" -"C1I140","卡奈托灣","Kanaituowan","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托灣" -"C1I150","青雲","Qingyun","青雲","青雲","青雲","青雲","青雲" -"C1I201","中心崙","Zhongxinlun","中心崙","中心崙","中心崙","中心崙","中心崙" -"C1I211","蘆竹湳","Luzhunan","蘆竹湳","蘆竹湳","蘆竹湳","蘆竹湳","蘆竹湳" +"C1I131","桶頭","Tongtou","桶頭","桶頭","桶頭","桶頭","桶头" +"C1I140","卡奈托灣","Kanaituowan","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托灣","卡奈托湾" +"C1I150","青雲","Qingyun","青雲","青雲","青雲","青雲","青云" +"C1I201","中心崙","Zhongxinlun","中心崙","中心崙","中心崙","中心崙","中心仑" +"C1I211","蘆竹湳","Luzhunan","蘆竹湳","蘆竹湳","蘆竹湳","蘆竹湳","芦竹湳" "C1I220","樟湖","Zhanghu","樟湖","樟湖","樟湖","樟湖","樟湖" "C1I230","九份二山","Jiufen'Ershan","九份二山","九份二山","九份二山","九份二山","九份二山" "C1I240","外大坪","Waidaping","外大坪","外大坪","外大坪","外大坪","外大坪" -"C1I250","鯉潭","Litan","鯉潭","鯉潭","鯉潭","鯉潭","鯉潭" +"C1I250","鯉潭","Litan","鯉潭","鯉潭","鯉潭","鯉潭","鲤潭" "C1I260","北坑","Beikeng","北坑","北坑","北坑","北坑","北坑" "C1I280","埔中","Puzhong","埔中","埔中","埔中","埔中","埔中" "C1I290","豐丘","Fengqiu","豐丘","豐丘","豐丘","豐丘","豐丘" @@ -759,7 +759,7 @@ "C1N001","沙崙","Shalun","沙崙","沙崙","沙崙","沙崙","沙崙" "C1O850","環湖","Huanhu","環湖","環湖","環湖","環湖","環湖" "C1O870","大棟山","Dadongshan","大棟山","大棟山","大棟山","大棟山","大棟山" -"C1O880","關山","Guanshan","関山","關山","關山","關山","關山" +"C1O880","關山","Guanshan","関山","關山","關山","關山","关山" "C1O921","楠西","Nanxi","楠西","楠西","楠西","楠西","楠西" "C1O940","東山服務區","Dongshan Service Area","東山服務區","東山服務區","東山服務區","東山服務區","東山服務區" "C1R110","口社","Gusia","口社","口社","口社","口社","口社" @@ -787,32 +787,32 @@ "C1T980","龍澗","Longjian","龍澗","龍澗","龍澗","龍澗","龍澗" "C1T990","高寮","Gaoliao","高寮","高寮","高寮","高寮","高寮" "C1TA00","太魯閣","Taroko","太魯閣","太魯閣","太魯閣","太魯閣","太魯閣" -"C1U501","牛鬥","Nioudou","牛鬥","牛鬥","牛鬥","牛鬥","牛鬥" +"C1U501","牛鬥","Nioudou","牛鬥","牛鬥","牛鬥","牛鬥","牛斗" "C1U670","寒溪","Hanxi","寒溪","寒溪","寒溪","寒溪","寒溪" -"C1U840","東澳嶺","Dongaoling","東澳嶺","東澳嶺","東澳嶺","東澳嶺","東澳嶺" -"C1U850","觀音海岸","Guanyin Coast","觀音海岸","觀音海岸","觀音海岸","觀音海岸","觀音海岸" +"C1U840","東澳嶺","Dongaoling","東澳嶺","東澳嶺","東澳嶺","東澳嶺","东澳岭" +"C1U850","觀音海岸","Guanyin Coast","觀音海岸","觀音海岸","觀音海岸","觀音海岸","观音海岸" "C1U920","思源","Siyuan","思源","思源","思源","思源","思源" -"C1U930","粉鳥林","Fenniaolin","粉鳥林","粉鳥林","粉鳥林","粉鳥林","粉鳥林" -"C1V160","達卡努瓦","Dakanuwa","達卡努瓦","達卡努瓦","達卡努瓦","達卡努瓦","達卡努瓦" -"C1V170","排雲","Paiyun","排雲","排雲","排雲","排雲","排雲" +"C1U930","粉鳥林","Fenniaolin","粉鳥林","粉鳥林","粉鳥林","粉鳥林","粉鸟林" +"C1V160","達卡努瓦","Dakanuwa","達卡努瓦","達卡努瓦","達卡努瓦","達卡努瓦","达卡努瓦" +"C1V170","排雲","Paiyun","排雲","排雲","排雲","排雲","排云" "C1V190","南天池","Nantianchi","南天池","南天池","南天池","南天池","南天池" "C1V200","梅山","Meishan","梅山","梅山","梅山","梅山","梅山" -"C1V220","小關山","Xiaoguanshan","小關山","小關山","小關山","小關山","小關山" +"C1V220","小關山","Xiaoguanshan","小關山","小關山","小關山","小關山","小关山" "C1V231","高中","Gaozhong","高中","高中","高中","高中","高中" "C1V300","御油山","Yuyoushan","御油山","御油山","御油山","御油山","御油山" "C1V340","大津","Dajin","大津","大津","大津","大津","大津" "C1V390","尖山","Jianshan","尖山","尖山","尖山","尖山","尖山" -"C1V570","吉東","Jiadong","吉東","吉東","吉東","吉東","吉東" +"C1V570","吉東","Jiadong","吉東","吉東","吉東","吉東","吉东" "C1V580","溪南(特生中心)","Xinan","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)","溪南(特生中心)" -"C1V590","新發","Xinfa","新發","新發","新發","新發","新發" +"C1V590","新發","Xinfa","新發","新發","新發","新發","新发" "C1V600","藤枝","Tengzhi","藤枝","藤枝","藤枝","藤枝","藤枝" -"C1V780","多納林道","Duonalindao","多納林道","多納林道","多納林道","多納林道","多納林道" +"C1V780","多納林道","Duonalindao","多納林道","多納林道","多納林道","多納林道","多纳林道" "C1V830","國三S383K","Freeway No. 3 - Rain – S383k","國三S383K","國三S383K","國三S383K","國三S383K","國三S383K" -"C1X040","東原","Dongyuan","東原","東原","東原","東原","東原" -"C1Z030","紅葉","Hongye","紅葉","紅葉","紅葉","紅葉","紅葉" +"C1X040","東原","Dongyuan","東原","東原","東原","東原","东原" +"C1Z030","紅葉","Hongye","紅葉","紅葉","紅葉","紅葉","红叶" "C1Z040","立山","Lishan","立山","立山","立山","立山","立山" -"C1Z110","三棧","Sanzhan","三棧","三棧","三棧","三棧","三棧" -"C1Z120","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","壽豐" -"C1Z130","銅門","Tongmen","銅門","銅門","銅門","銅門","銅門" +"C1Z110","三棧","Sanzhan","三棧","三棧","三棧","三棧","三栈" +"C1Z120","壽豐","Shoufeng","寿豊","壽豐","壽豐","壽豐","寿丰" +"C1Z130","銅門","Tongmen","銅門","銅門","銅門","銅門","铜门" "C1Z140","荖溪","Laoxi","荖溪","荖溪","荖溪","荖溪","荖溪" "C1Z240","中平林道","Zhongpinglindao","中平林道","中平林道","中平林道","中平林道","中平林道" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index 8bfdd8c1b..eebcabf6a 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2025-08-14 00:59\n" +"PO-Revision-Date: 2025-08-15 01:20\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -44,7 +44,7 @@ msgstr "紧急地震预警" msgid "強震監視器" msgstr "强震监视器" -#: ./lib/app/map/_lib/managers/report.dart:811 +#: ./lib/app/map/_lib/managers/report.dart:818 msgid "地震報告" msgstr "地震报告" @@ -486,7 +486,7 @@ msgstr "无法取得位置权限" #: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "" +msgstr "无法获取自启动权限" #: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" @@ -530,7 +530,7 @@ msgstr "取消" #: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" -msgstr "" +msgstr "自动启动" #: ./lib/app/settings/location/page.dart:164 msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" @@ -546,7 +546,7 @@ msgstr "始终允许" #: ./lib/app/settings/location/page.dart:220 msgid "永遠" -msgstr "" +msgstr "永远" #: ./lib/app/settings/location/page.dart:231 msgid "自動更新" @@ -566,7 +566,7 @@ msgstr "通知功能已被拒绝,请前往设置允许权限。" #: ./lib/app/settings/location/page.dart:326 msgid "自啟動權限已被拒絕,請移至設定允許權限。" -msgstr "" +msgstr "自启动权限已被拒绝,请移至设置开启权限。" #: ./lib/app/settings/location/page.dart:352 msgid "省電策略已被拒絕,請移至設定允許權限。" @@ -574,7 +574,7 @@ msgstr "省电策略被拒绝,请前往设置允许权限。" #: ./lib/app/settings/location/page.dart:413 msgid "設定所在地時發生錯誤,請稍候再試一次。" -msgstr "" +msgstr "设置所在地时发生错误,请稍后再试。" #: ./lib/app/settings/location/page.dart:421 msgid "新增地點" @@ -590,21 +590,21 @@ msgstr "当前位置" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:134 msgid "監視器" -msgstr "" +msgstr "监视器" -#: ./lib/app/map/_lib/managers/radar.dart:495 +#: ./lib/app/map/_lib/managers/radar.dart:505 msgid "雷達回波" msgstr "雷达拼图" -#: ./lib/app/map/_lib/managers/temperature.dart:371 +#: ./lib/app/map/_lib/managers/temperature.dart:382 msgid "氣溫" msgstr "气温" -#: ./lib/app/map/_lib/managers/precipitation.dart:457 +#: ./lib/app/map/_lib/managers/precipitation.dart:470 msgid "降水" msgstr "降水" -#: ./lib/app/map/_lib/managers/wind.dart:264 +#: ./lib/app/map/_lib/managers/wind.dart:271 msgid "風向/風速" msgstr "风向/风速" @@ -628,15 +628,15 @@ msgstr "底图" msgid "初始圖層" msgstr "默认图层" -#: ./lib/app/settings/map/page.dart:106 +#: ./lib/app/settings/map/page.dart:107 msgid "動畫幀率" msgstr "动画帧率" -#: ./lib/app/settings/map/page.dart:110 +#: ./lib/app/settings/map/page.dart:111 msgid "影響強震監視器的震波模擬動畫流暢度" msgstr "影响强震监视器的地震波模拟动画流畅度" -#: ./lib/app/settings/map/page.dart:140 +#: ./lib/app/settings/map/page.dart:142 msgid "過高的動畫幀率可能會造成卡頓或設備發熱" msgstr "过高的动画帧率可能会造成设备卡顿或发热" @@ -834,11 +834,11 @@ msgstr "选择要显示的地图图层" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 msgid "簡單" -msgstr "" +msgstr "简单" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" -msgstr "" +msgstr "报告" #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:150 msgid "氣象" @@ -848,55 +848,55 @@ msgstr "气象" msgid "單位:{unit}" msgstr "单位:{unit}" -#: ./lib/app/map/_lib/managers/radar.dart:609 +#: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" msgstr "长按设定播放起点" -#: ./lib/app/map/_lib/managers/radar.dart:623 +#: ./lib/app/map/_lib/managers/radar.dart:633 msgid "目前時間" msgstr "目前时间" -#: ./lib/app/map/_lib/managers/radar.dart:628 +#: ./lib/app/map/_lib/managers/radar.dart:638 msgid "播放起點" msgstr "播放起点" -#: ./lib/app/map/_lib/managers/radar.dart:935 +#: ./lib/app/map/_lib/managers/radar.dart:945 msgid "播放進度" msgstr "播放进度" -#: ./lib/app/map/_lib/managers/precipitation.dart:315 +#: ./lib/app/map/_lib/managers/precipitation.dart:328 msgid "今日" msgstr "今天" -#: ./lib/app/map/_lib/managers/precipitation.dart:316 +#: ./lib/app/map/_lib/managers/precipitation.dart:329 msgid "10 分鐘" msgstr "10 分钟" -#: ./lib/app/map/_lib/managers/precipitation.dart:317 +#: ./lib/app/map/_lib/managers/precipitation.dart:330 msgid "1 小時" msgstr "1 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:318 +#: ./lib/app/map/_lib/managers/precipitation.dart:331 msgid "3 小時" msgstr "3 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:319 +#: ./lib/app/map/_lib/managers/precipitation.dart:332 msgid "6 小時" msgstr "6 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:320 +#: ./lib/app/map/_lib/managers/precipitation.dart:333 msgid "12 小時" msgstr "12 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:321 +#: ./lib/app/map/_lib/managers/precipitation.dart:334 msgid "24 小時" msgstr "24 小时" -#: ./lib/app/map/_lib/managers/precipitation.dart:322 +#: ./lib/app/map/_lib/managers/precipitation.dart:335 msgid "2 天" msgstr "2 天" -#: ./lib/app/map/_lib/managers/precipitation.dart:323 +#: ./lib/app/map/_lib/managers/precipitation.dart:336 msgid "3 天" msgstr "3 天" @@ -940,59 +940,59 @@ msgstr "{countdown}秒后抵达" msgid "已抵達" msgstr "已抵达" -#: ./lib/app/map/_lib/managers/report.dart:362 +#: ./lib/app/map/_lib/managers/report.dart:369 msgid "近期的地震報告" msgstr "近期地震报告" -#: ./lib/app/map/_lib/managers/report.dart:367 +#: ./lib/app/map/_lib/managers/report.dart:374 msgid "更多" msgstr "更多" -#: ./lib/app/map/_lib/managers/report.dart:592 +#: ./lib/app/map/_lib/managers/report.dart:599 msgid "編號 {number} 顯著有感地震" msgstr "序号 {number} 显著有感地震" -#: ./lib/app/map/_lib/managers/report.dart:593 +#: ./lib/app/map/_lib/managers/report.dart:600 msgid "小區域有感地震" msgstr "小区域有感地震" -#: ./lib/app/map/_lib/managers/report.dart:649 +#: ./lib/app/map/_lib/managers/report.dart:656 msgid "地震規模" msgstr "地震震级" -#: ./lib/app/map/_lib/managers/report.dart:671 +#: ./lib/app/map/_lib/managers/report.dart:678 msgid "震源深度" msgstr "震源深度" -#: ./lib/app/map/_lib/managers/report.dart:608 +#: ./lib/app/map/_lib/managers/report.dart:615 msgid "報告頁面" msgstr "报告详情" -#: ./lib/app/map/_lib/managers/report.dart:632 +#: ./lib/app/map/_lib/managers/report.dart:639 msgid "發震時間" msgstr "发震时刻" -#: ./lib/app/map/_lib/managers/report.dart:639 +#: ./lib/app/map/_lib/managers/report.dart:646 msgid "位於" msgstr "位于" -#: ./lib/app/map/_lib/managers/report.dart:695 +#: ./lib/app/map/_lib/managers/report.dart:702 msgid "各地震度" msgstr "各地震度" -#: ./lib/app/map/_lib/managers/report.dart:766 +#: ./lib/app/map/_lib/managers/report.dart:773 msgid "地震報告圖" msgstr "地震报告图" -#: ./lib/app/map/_lib/managers/report.dart:776 +#: ./lib/app/map/_lib/managers/report.dart:783 msgid "震度圖" msgstr "震度图" -#: ./lib/app/map/_lib/managers/report.dart:786 +#: ./lib/app/map/_lib/managers/report.dart:793 msgid "最大地動加速度圖" msgstr "峰值地震动加速度图" -#: ./lib/app/map/_lib/managers/report.dart:796 +#: ./lib/app/map/_lib/managers/report.dart:803 msgid "最大地動速度圖" msgstr "峰值最大地震动速度图" From 507889c6d1b57664907c3b53234a5208e8b019d8 Mon Sep 17 00:00:00 2001 From: lowrt Date: Fri, 15 Aug 2025 09:56:03 +0800 Subject: [PATCH 43/59] Build: 300100001 --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 4408838fd..dafb2da7a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 35 - versionCode 300100000 + versionCode 300100001 versionName flutterVersionName multiDexEnabled true } From 204ed6bfd6553eed5c3c02b83e7fb2488c811df7 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Fri, 15 Aug 2025 12:41:55 +0800 Subject: [PATCH 44/59] fix: ios swipe back (#388) * fix: ios swipe back * style: sort import * fix: use CupertinoPage for iOS * fix: route material * feat: predictive back for android * chore: remove unused import * feat: use builtin transition * fix: import * fix: builders --- lib/app.dart | 15 +- lib/router.dart | 138 +++------- lib/utils/constants.dart | 17 ++ lib/widgets/shell_wrapper.dart | 22 ++ lib/widgets/transitions/forward_back.dart | 38 --- .../transitions/predictive_fade_forward.dart | 244 ++++++++++++++++++ 6 files changed, 336 insertions(+), 138 deletions(-) create mode 100644 lib/widgets/shell_wrapper.dart delete mode 100644 lib/widgets/transitions/forward_back.dart create mode 100644 lib/widgets/transitions/predictive_fade_forward.dart diff --git a/lib/app.dart b/lib/app.dart index 96d79449c..247012c34 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,16 +1,19 @@ import 'dart:async'; import 'dart:io'; +import 'package:flutter/material.dart'; + +import 'package:dynamic_system_colors/dynamic_system_colors.dart'; +import 'package:i18n_extension/i18n_extension.dart'; +import 'package:in_app_update/in_app_update.dart'; +import 'package:provider/provider.dart'; + import 'package:dpip/core/notify.dart'; import 'package:dpip/core/providers.dart'; import 'package:dpip/models/settings/ui.dart'; import 'package:dpip/router.dart'; +import 'package:dpip/utils/constants.dart'; import 'package:dpip/utils/log.dart'; -import 'package:dynamic_system_colors/dynamic_system_colors.dart'; -import 'package:flutter/material.dart'; -import 'package:i18n_extension/i18n_extension.dart'; -import 'package:in_app_update/in_app_update.dart'; -import 'package:provider/provider.dart'; class DpipApp extends StatefulWidget { const DpipApp({super.key}); @@ -86,12 +89,14 @@ class _DpipAppState extends State with WidgetsBindingObserver { colorScheme: model.themeColor == null ? lightDynamic : null, brightness: Brightness.light, snackBarTheme: const SnackBarThemeData(behavior: SnackBarBehavior.floating), + pageTransitionsTheme: kZoomPageTransitionsTheme, ); final darkTheme = ThemeData( colorSchemeSeed: model.themeColor, colorScheme: model.themeColor == null ? darkDynamic : null, brightness: Brightness.dark, snackBarTheme: const SnackBarThemeData(behavior: SnackBarBehavior.floating), + pageTransitionsTheme: kZoomPageTransitionsTheme, ); return MaterialApp.router( diff --git a/lib/router.dart b/lib/router.dart index 197c549c9..cb2aea8e0 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -38,8 +38,10 @@ import 'package:dpip/app/welcome/layout.dart'; import 'package:dpip/core/i18n.dart'; import 'package:dpip/core/preference.dart'; import 'package:dpip/route/announcement/announcement.dart'; +import 'package:dpip/utils/constants.dart'; +import 'package:dpip/utils/extensions/build_context.dart'; import 'package:dpip/utils/log.dart'; -import 'package:dpip/widgets/transitions/forward_back.dart'; +import 'package:dpip/widgets/shell_wrapper.dart'; final GlobalKey _rootNavigatorKey = GlobalKey(); final GlobalKey _welcomeNavigatorKey = GlobalKey(); @@ -51,45 +53,28 @@ final router = GoRouter( routes: [ ShellRoute( navigatorKey: _welcomeNavigatorKey, - builder: (context, state, child) => WelcomeLayout(child: child), + builder: (context, state, child) => ShellWrapper(WelcomeLayout(child: child)), routes: [ - GoRoute( - path: WelcomeAboutPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const WelcomeAboutPage()), - ), + GoRoute(path: WelcomeAboutPage.route, builder: (context, state) => const Material(child: WelcomeAboutPage())), GoRoute( path: WelcomeExpTechPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const WelcomeExpTechPage()), - ), - GoRoute( - path: WelcomeNoticePage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const WelcomeNoticePage()), + builder: (context, state) => const Material(child: WelcomeExpTechPage()), ), + GoRoute(path: WelcomeNoticePage.route, builder: (context, state) => const Material(child: WelcomeNoticePage())), GoRoute( path: WelcomePermissionPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const WelcomePermissionPage()), + builder: (context, state) => const Material(child: WelcomePermissionPage()), ), ], ), - GoRoute( - path: HomePage.route, - pageBuilder: (context, state) => const NoTransitionPage( - child: AppLayout( - child: HomePage(), - ), - ), - ), + GoRoute(path: HomePage.route, builder: (context, state) => const AppLayout(child: HomePage())), ShellRoute( navigatorKey: _settingsNavigatorKey, builder: (context, state, child) { final title = switch (state.fullPath) { SettingsLocationPage.route => '所在地'.i18n, - SettingsLocationSelectPage.route => '所在地'.i18n, - final p when p == SettingsLocationSelectCityPage.route() => '所在地'.i18n, + SettingsLocationSelectPage.route => '新增地點'.i18n, + final p when p == SettingsLocationSelectCityPage.route() => '新增地點'.i18n, SettingsThemePage.route => '主題'.i18n, SettingsThemeSelectPage.route => '主題'.i18n, SettingsLocalePage.route => '語言'.i18n, @@ -111,129 +96,92 @@ final router = GoRouter( SettingsDonatePage.route => '贊助我們'.i18n, _ => '設定'.i18n, }; - return SettingsLayout(title: title, child: child); + + return ShellWrapper( + SettingsLayout( + title: title, + child: Theme( + data: context.theme.copyWith(pageTransitionsTheme: kFadeForwardPageTransitionsTheme), + child: child, + ), + ), + ); }, routes: [ - GoRoute( - path: SettingsIndexPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsIndexPage()), - ), + GoRoute(path: SettingsIndexPage.route, builder: (context, state) => const Material(child: SettingsIndexPage())), GoRoute( path: SettingsLocationPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsLocationPage()), + builder: (context, state) => const Material(child: SettingsLocationPage()), ), GoRoute( path: SettingsLocationSelectPage.route, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsLocationSelectPage()), + builder: (context, state) => const Material(child: SettingsLocationSelectPage()), ), GoRoute( path: SettingsLocationSelectCityPage.route(), - pageBuilder: - (context, state) => ForwardBackTransitionPage( - key: state.pageKey, - child: SettingsLocationSelectCityPage(city: state.pathParameters['city']!), - ), - ), - GoRoute( - path: SettingsThemePage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsThemePage()), + builder: + (context, state) => Material(child: SettingsLocationSelectCityPage(city: state.pathParameters['city']!)), ), + GoRoute(path: SettingsThemePage.route, builder: (context, state) => const Material(child: SettingsThemePage())), GoRoute( path: SettingsThemeSelectPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsThemeSelectPage()), + builder: (context, state) => const Material(child: SettingsThemeSelectPage()), ), GoRoute( path: SettingsLocalePage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsLocalePage()), + builder: (context, state) => const Material(child: SettingsLocalePage()), ), GoRoute( path: SettingsLocaleSelectPage.route, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsLocaleSelectPage()), - ), - GoRoute( - path: SettingsUnitPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsUnitPage()), - ), - GoRoute( - path: SettingsMapPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsMapPage()), + builder: (context, state) => const Material(child: SettingsLocaleSelectPage()), ), + GoRoute(path: SettingsUnitPage.route, builder: (context, state) => const Material(child: SettingsUnitPage())), + GoRoute(path: SettingsMapPage.route, builder: (context, state) => const Material(child: SettingsMapPage())), GoRoute( path: SettingsNotifyPage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyPage()), + builder: (context, state) => const Material(child: SettingsNotifyPage()), routes: [ GoRoute( path: SettingsNotifyEewPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyEewPage()), + builder: (context, state) => const Material(child: SettingsNotifyEewPage()), ), GoRoute( path: SettingsNotifyMonitorPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyMonitorPage()), + builder: (context, state) => const Material(child: SettingsNotifyMonitorPage()), ), GoRoute( path: SettingsNotifyReportPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyReportPage()), + builder: (context, state) => const Material(child: SettingsNotifyReportPage()), ), GoRoute( path: SettingsNotifyIntensityPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyIntensityPage()), + builder: (context, state) => const Material(child: SettingsNotifyIntensityPage()), ), GoRoute( path: SettingsNotifyThunderstormPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyThunderstormPage()), + builder: (context, state) => const Material(child: SettingsNotifyThunderstormPage()), ), GoRoute( path: SettingsNotifyAdvisoryPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyAdvisoryPage()), + builder: (context, state) => const Material(child: SettingsNotifyAdvisoryPage()), ), GoRoute( path: SettingsNotifyEvacuationPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyEvacuationPage()), + builder: (context, state) => const Material(child: SettingsNotifyEvacuationPage()), ), GoRoute( path: SettingsNotifyTsunamiPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyTsunamiPage()), + builder: (context, state) => const Material(child: SettingsNotifyTsunamiPage()), ), GoRoute( path: SettingsNotifyAnnouncementPage.name, - pageBuilder: - (context, state) => - ForwardBackTransitionPage(key: state.pageKey, child: const SettingsNotifyAnnouncementPage()), + builder: (context, state) => const Material(child: SettingsNotifyAnnouncementPage()), ), ], ), GoRoute( path: SettingsDonatePage.route, - pageBuilder: - (context, state) => ForwardBackTransitionPage(key: state.pageKey, child: const SettingsDonatePage()), + builder: (context, state) => const Material(child: SettingsDonatePage()), ), ], ), diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 71c3ef33e..ba328d90e 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,6 +1,23 @@ import 'package:flutter/material.dart'; + import 'package:maplibre_gl/maplibre_gl.dart'; +import 'package:dpip/widgets/transitions/predictive_fade_forward.dart'; + +const kZoomPageTransitionsTheme = PageTransitionsTheme( + builders: { + TargetPlatform.iOS: CupertinoPageTransitionsBuilder(), + TargetPlatform.android: PredictiveBackPageTransitionsBuilder(), + }, +); + +const kFadeForwardPageTransitionsTheme = PageTransitionsTheme( + builders: { + TargetPlatform.iOS: CupertinoPageTransitionsBuilder(), + TargetPlatform.android: PredictiveBackFadeForwardPageTransitionsBuilder(), + }, +); + const kEmphasizedAnimationStyle = AnimationStyle( curve: Easing.emphasizedDecelerate, duration: Durations.medium4, diff --git a/lib/widgets/shell_wrapper.dart b/lib/widgets/shell_wrapper.dart new file mode 100644 index 000000000..c55f2d5f9 --- /dev/null +++ b/lib/widgets/shell_wrapper.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; + +class ShellWrapper extends StatelessWidget { + final Widget child; + + const ShellWrapper(this.child, {super.key}); + + bool _canPop(BuildContext context) { + final lastMatch = GoRouter.of(context).routerDelegate.currentConfiguration.matches.lastOrNull; + + if (lastMatch is ShellRouteMatch) { + return lastMatch.matches.length == 1; + } + + return true; + } + + @override + Widget build(BuildContext context) => PopScope(canPop: _canPop(context), child: child); +} diff --git a/lib/widgets/transitions/forward_back.dart b/lib/widgets/transitions/forward_back.dart deleted file mode 100644 index 2e1b30969..000000000 --- a/lib/widgets/transitions/forward_back.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - -const kBackTransition = Interval(0, 0.5, curve: Easing.emphasizedAccelerate); -const kForwardTransition = Interval(0.5, 1, curve: Easing.emphasizedDecelerate); - -class ForwardBackTransitionPage extends CustomTransitionPage { - ForwardBackTransitionPage({required super.child, super.key}) - : super( - transitionDuration: Durations.long4, - reverseTransitionDuration: Durations.long4, - transitionsBuilder: (context, animation, secondaryAnimation, child) { - final forwardSlide = Tween( - begin: const Offset(0.2, 0.0), - end: Offset.zero, - ).chain(CurveTween(curve: kForwardTransition)); - - final backwardSlide = Tween( - begin: Offset.zero, - end: const Offset(-0.2, 0.0), - ).chain(CurveTween(curve: kBackTransition)); - - final fadeIn = Tween(begin: 0.0, end: 1.0).chain(CurveTween(curve: kForwardTransition)); - final fadeOut = Tween(begin: 1.0, end: 0.0).chain(CurveTween(curve: kBackTransition)); - - return SlideTransition( - position: forwardSlide.animate(animation), - child: SlideTransition( - position: backwardSlide.animate(secondaryAnimation), - child: FadeTransition( - opacity: fadeIn.animate(animation), - child: FadeTransition(opacity: fadeOut.animate(secondaryAnimation), child: Material(child: child)), - ), - ), - ); - }, - ); -} diff --git a/lib/widgets/transitions/predictive_fade_forward.dart b/lib/widgets/transitions/predictive_fade_forward.dart new file mode 100644 index 000000000..2a5cd11e5 --- /dev/null +++ b/lib/widgets/transitions/predictive_fade_forward.dart @@ -0,0 +1,244 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class PredictiveBackFadeForwardPageTransitionsBuilder extends PageTransitionsBuilder { + /// Creates an instance of a [PageTransitionsBuilder] that matches Android U's + /// predictive back transition. + const PredictiveBackFadeForwardPageTransitionsBuilder(); + + @override + Widget buildTransitions( + PageRoute route, + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) { + return _PredictiveBackGestureDetector( + route: route, + builder: (BuildContext context) { + // Only do a predictive back transition when the user is performing a + // pop gesture. Otherwise, for things like button presses or other + // programmatic navigation, fall back to FadeForwardsPageTransitionsBuilder. + if (route.popGestureInProgress) { + return _PredictiveBackPageTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + getIsCurrent: () => route.isCurrent, + child: child, + ); + } + + return const FadeForwardsPageTransitionsBuilder().buildTransitions( + route, + context, + animation, + secondaryAnimation, + child, + ); + }, + ); + } +} + +class _PredictiveBackGestureDetector extends StatefulWidget { + const _PredictiveBackGestureDetector({required this.route, required this.builder}); + + final WidgetBuilder builder; + final PredictiveBackRoute route; + + @override + State<_PredictiveBackGestureDetector> createState() => _PredictiveBackGestureDetectorState(); +} + +class _PredictiveBackGestureDetectorState extends State<_PredictiveBackGestureDetector> with WidgetsBindingObserver { + /// True when the predictive back gesture is enabled. + bool get _isEnabled { + return widget.route.isCurrent && widget.route.popGestureEnabled; + } + + /// The back event when the gesture first started. + PredictiveBackEvent? get startBackEvent => _startBackEvent; + PredictiveBackEvent? _startBackEvent; + set startBackEvent(PredictiveBackEvent? startBackEvent) { + if (_startBackEvent != startBackEvent && mounted) { + setState(() { + _startBackEvent = startBackEvent; + }); + } + } + + /// The most recent back event during the gesture. + PredictiveBackEvent? get currentBackEvent => _currentBackEvent; + PredictiveBackEvent? _currentBackEvent; + set currentBackEvent(PredictiveBackEvent? currentBackEvent) { + if (_currentBackEvent != currentBackEvent && mounted) { + setState(() { + _currentBackEvent = currentBackEvent; + }); + } + } + + // Begin WidgetsBindingObserver. + + @override + bool handleStartBackGesture(PredictiveBackEvent backEvent) { + final bool gestureInProgress = !backEvent.isButtonEvent && _isEnabled; + if (!gestureInProgress) { + return false; + } + + widget.route.handleStartBackGesture(progress: 1 - backEvent.progress); + startBackEvent = currentBackEvent = backEvent; + return true; + } + + @override + void handleUpdateBackGestureProgress(PredictiveBackEvent backEvent) { + widget.route.handleUpdateBackGestureProgress(progress: 1 - backEvent.progress); + currentBackEvent = backEvent; + } + + @override + void handleCancelBackGesture() { + widget.route.handleCancelBackGesture(); + startBackEvent = currentBackEvent = null; + } + + @override + void handleCommitBackGesture() { + widget.route.handleCommitBackGesture(); + startBackEvent = currentBackEvent = null; + } + + // End WidgetsBindingObserver. + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return widget.builder(context); + } +} + +/// Android's predictive back page transition. +class _PredictiveBackPageTransition extends StatelessWidget { + const _PredictiveBackPageTransition({ + required this.animation, + required this.secondaryAnimation, + required this.getIsCurrent, + required this.child, + }); + + // These values were eyeballed to match the native predictive back animation + // on a Pixel 2 running Android API 34. + static const double _scaleFullyOpened = 1.0; + static const double _scaleStartTransition = 0.95; + static const double _opacityFullyOpened = 1.0; + static const double _opacityStartTransition = 0.95; + static const double _weightForStartState = 65.0; + static const double _weightForEndState = 35.0; + static const double _screenWidthDivisionFactor = 20.0; + static const double _xShiftAdjustment = 8.0; + + final Animation animation; + final Animation secondaryAnimation; + final ValueGetter getIsCurrent; + final Widget child; + + Widget _secondaryAnimatedBuilder(BuildContext context, Widget? child) { + final double screenWidth = MediaQuery.widthOf(context); + final double xShift = (screenWidth / _screenWidthDivisionFactor) - _xShiftAdjustment; + + final bool isCurrent = getIsCurrent(); + final Tween xShiftTween = isCurrent ? ConstantTween(0) : Tween(begin: xShift, end: 0); + final Animatable scaleTween = + isCurrent + ? ConstantTween(_scaleFullyOpened) + : TweenSequence(>[ + TweenSequenceItem( + tween: Tween(begin: _scaleStartTransition, end: _scaleFullyOpened), + weight: _weightForStartState, + ), + TweenSequenceItem( + tween: Tween(begin: _scaleFullyOpened, end: _scaleFullyOpened), + weight: _weightForEndState, + ), + ]); + final Animatable fadeTween = + isCurrent + ? ConstantTween(_opacityFullyOpened) + : TweenSequence(>[ + TweenSequenceItem( + tween: Tween(begin: _opacityFullyOpened, end: _opacityStartTransition), + weight: _weightForStartState, + ), + TweenSequenceItem( + tween: Tween(begin: _opacityFullyOpened, end: _opacityFullyOpened), + weight: _weightForEndState, + ), + ]); + + return Transform.translate( + offset: Offset(xShiftTween.animate(secondaryAnimation).value, 0), + child: Transform.scale( + scale: scaleTween.animate(secondaryAnimation).value, + child: Opacity(opacity: fadeTween.animate(secondaryAnimation).value, child: child), + ), + ); + } + + Widget _primaryAnimatedBuilder(BuildContext context, Widget? child) { + final double screenWidth = MediaQuery.widthOf(context); + final double xShift = (screenWidth / _screenWidthDivisionFactor) - _xShiftAdjustment; + + final Animatable xShiftTween = TweenSequence(>[ + TweenSequenceItem(tween: Tween(begin: 0.0, end: 0.0), weight: _weightForStartState), + TweenSequenceItem(tween: Tween(begin: xShift, end: 0.0), weight: _weightForEndState), + ]); + final Animatable scaleTween = TweenSequence(>[ + TweenSequenceItem( + tween: Tween(begin: _scaleFullyOpened, end: _scaleFullyOpened), + weight: _weightForStartState, + ), + TweenSequenceItem( + tween: Tween(begin: _scaleStartTransition, end: _scaleFullyOpened), + weight: _weightForEndState, + ), + ]); + final Animatable fadeTween = TweenSequence(>[ + TweenSequenceItem(tween: Tween(begin: 0.0, end: 0.0), weight: _weightForStartState), + TweenSequenceItem( + tween: Tween(begin: _opacityStartTransition, end: _opacityFullyOpened), + weight: _weightForEndState, + ), + ]); + + return Transform.translate( + offset: Offset(xShiftTween.animate(animation).value, 0), + child: Transform.scale( + scale: scaleTween.animate(animation).value, + child: Opacity(opacity: fadeTween.animate(animation).value, child: child), + ), + ); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: secondaryAnimation, + builder: _secondaryAnimatedBuilder, + child: AnimatedBuilder(animation: animation, builder: _primaryAnimatedBuilder, child: child), + ); + } +} From 07890ad9c5ddb431d4998b9f5694ea98637fb813 Mon Sep 17 00:00:00 2001 From: lowrt Date: Tue, 19 Aug 2025 09:54:11 +0800 Subject: [PATCH 45/59] fix(monitor): countdown time --- lib/app/map/_lib/managers/monitor.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 2683be22b..5a04022ff 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -1033,7 +1033,7 @@ class _MonitorMapLayerSheetState extends State { ), Text( - countdown >= 0 ? '{countdown}秒後抵達'.i18n.args({'countdown': countdown}) : '已抵達'.i18n, + countdown > 0 ? '{countdown}秒後抵達'.i18n.args({'countdown': countdown}) : '已抵達'.i18n, style: context.textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, From 4fb04189084f66dab3df045b1c34e8d3470d11e7 Mon Sep 17 00:00:00 2001 From: Kamiya Date: Tue, 19 Aug 2025 22:59:23 +0800 Subject: [PATCH 46/59] New Crowdin updates (#390) * New translations strings.pot (Chinese Simplified) * New translations location_names.csv (Multilingual) * New translations weather_station_names.csv (Multilingual) * New translations strings.pot (Japanese) * New translations strings.pot (Chinese Simplified) * New translations weather_station_names.csv (Multilingual) * New translations strings.pot (English) * New translations strings.pot (English) --- assets/translations/en.po | 40 +-- assets/translations/ja.po | 8 +- assets/translations/location_names.csv | 104 ++++---- assets/translations/weather_station_names.csv | 227 +++++++++--------- assets/translations/zh-Hans.po | 16 +- 5 files changed, 198 insertions(+), 197 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index fb2de564d..bf2686743 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: English\n" "Language: en_US\n" -"PO-Revision-Date: 2025-08-15 01:39\n" +"PO-Revision-Date: 2025-08-16 08:56\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -62,7 +62,7 @@ msgstr "Weather Advisory" #: ./lib/app/settings/notify/page.dart:235 msgid "防災資訊" -msgstr "" +msgstr "Emergency information" #: ./lib/app/settings/map/page.dart:49 msgid "海嘯資訊" @@ -475,15 +475,15 @@ msgstr "All information should be considered authoritative only if it is consist #: ./lib/app/settings/location/page.dart:76 msgid "無法取得通知權限" -msgstr "" +msgstr "Unable to obtain Notification Permission" #: ./lib/app/settings/location/page.dart:78 msgid "無法取得位置權限" -msgstr "" +msgstr "Unable to obtain Location Permission" #: ./lib/app/settings/location/page.dart:79 msgid "無法取得自啟動權限" -msgstr "" +msgstr "Unable to obtain Self-Start Permission" #: ./lib/app/welcome/4-permissions/page.dart:167 msgid "省電策略" @@ -495,7 +495,7 @@ msgstr "Unable to obtain permission" #: ./lib/app/settings/location/page.dart:85 msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。" -msgstr "" +msgstr "To use the Auto-Location feature, please allow Notification Permission for DPIP in settings, then try again." #: ./lib/app/settings/location/page.dart:86 msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" @@ -775,7 +775,7 @@ msgstr "Earthquake early warning is the result of rapid calculation and may have #: ./lib/app/welcome/3-notice/page.dart:110 msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。" -msgstr "" +msgstr "Any action that is not officially approved could lead to legal consequences. It's essential to follow all applicable rules and regulations." #: ./lib/app/welcome/1-about/page.dart:40 msgid "歡迎使用 DPIP" @@ -843,7 +843,7 @@ msgstr "Weather" #: ./lib/app/map/_widgets/map_legend.dart:181 msgid "單位:{unit}" -msgstr "" +msgstr "Units: {unit}" #: ./lib/app/map/_lib/managers/radar.dart:619 msgid "長按設定播放起點" @@ -1011,7 +1011,7 @@ msgstr "Impact: Medium" #: ./lib/route/announcement/announcement.dart:16 msgid "影響:大" -msgstr "" +msgstr "Impact: Large" #: ./lib/route/announcement/announcement.dart:18 msgid "維修" @@ -1251,7 +1251,7 @@ msgstr "" #: ./lib/utils/weather_icon.dart:320 msgid "多雲大雷雨" -msgstr "" +msgstr "Cloudy with Thunderstorm" #: ./lib/utils/weather_icon.dart:321 msgid "多雲大雷雹" @@ -1259,43 +1259,43 @@ msgstr "" #: ./lib/utils/weather_icon.dart:323 msgid "陰" -msgstr "" +msgstr "Overcast" #: ./lib/utils/weather_icon.dart:324 msgid "陰有霾" -msgstr "" +msgstr "Overcast with Haze" #: ./lib/utils/weather_icon.dart:325 msgid "陰有靄" -msgstr "" +msgstr "Overcast with Mist" #: ./lib/utils/weather_icon.dart:326 msgid "陰有閃電" -msgstr "" +msgstr "Overcast with Lighting" #: ./lib/utils/weather_icon.dart:342 msgid "陰天伴有雷" -msgstr "" +msgstr "Cloudy with Thunder" #: ./lib/utils/weather_icon.dart:328 msgid "陰有霧" -msgstr "" +msgstr "Overcast with Fog" #: ./lib/utils/weather_icon.dart:329 msgid "陰有雨" -msgstr "" +msgstr "Overcast with Rain" #: ./lib/utils/weather_icon.dart:330 msgid "陰有雨雪" -msgstr "" +msgstr "Overcast with Rain/Snow" #: ./lib/utils/weather_icon.dart:331 msgid "陰有大雪" -msgstr "" +msgstr "Overcast with Heavy Snow" #: ./lib/utils/weather_icon.dart:332 msgid "陰有雪珠" -msgstr "" +msgstr "Overcast with Snow" #: ./lib/utils/weather_icon.dart:333 msgid "陰有冰珠" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index 67e067ee5..815640b9f 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Japanese\n" "Language: ja_JP\n" -"PO-Revision-Date: 2025-08-15 01:20\n" +"PO-Revision-Date: 2025-08-15 04:19\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -529,7 +529,7 @@ msgstr "キャンセル" #: ./lib/app/settings/location/page.dart:163 msgid "自動啟動" -msgstr "" +msgstr "自動起動" #: ./lib/app/settings/location/page.dart:164 msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" @@ -541,7 +541,7 @@ msgstr "" #: ./lib/app/settings/location/page.dart:220 msgid "一律允許" -msgstr "" +msgstr "常に許可" #: ./lib/app/settings/location/page.dart:220 msgid "永遠" @@ -577,7 +577,7 @@ msgstr "" #: ./lib/app/settings/location/page.dart:421 msgid "新增地點" -msgstr "" +msgstr "新しい場所を追加" #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" diff --git a/assets/translations/location_names.csv b/assets/translations/location_names.csv index a7e847600..7f8df84ee 100644 --- a/assets/translations/location_names.csv +++ b/assets/translations/location_names.csv @@ -1,24 +1,24 @@ "key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" -"連江","連江","Lienchiang","連江","連江","連江","連江","连江" -"宜蘭","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜兰" -"彰化","彰化","Changhua","彰化","彰化","彰化","彰化","彰化" -"南投","南投","Nantou","南投","南投","南投","南投","南投" -"雲林","雲林","Yunlin","雲林","雲林","雲林","雲林","云林" -"屏東","屏東","Pingdong","屏東","屏東","屏東","屏東","屏东" -"基隆","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" -"臺北","臺北","Taipei","台北","臺北","臺北","臺北","台北" -"新北","新北","New Taipei","新北","新北","新北","新北","新北" -"臺南","臺南","Tainan","台南","臺南","臺南","臺南","台南" -"桃園","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃园" -"嘉義","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉义" -"金門","金門","Kinmen","金門","金門","金門","金門","金门" -"高雄","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" -"臺東","臺東","Taitung","台東","臺東","臺東","臺東","台东" -"花蓮","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花莲" -"澎湖","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" -"新竹","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" -"臺中","臺中","Taichung","台中","臺中","臺中","臺中","台中" -"苗栗","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" +"連江","連江","Lienchiang","連江","롄장","連江","連江","连江" +"宜蘭","宜蘭","Yilan","宜蘭","이란","宜蘭","宜蘭","宜兰" +"彰化","彰化","Changhua","彰化","장화","彰化","彰化","彰化" +"南投","南投","Nantou","南投","난터우","南投","南投","南投" +"雲林","雲林","Yunlin","雲林","윈린","雲林","雲林","云林" +"屏東","屏東","Pingdong","屏東","핑둥","屏東","屏東","屏东" +"基隆","基隆","Keelung","基隆","지룽","基隆","基隆","基隆" +"臺北","臺北","Taipei","台北","타이베이","臺北","臺北","台北" +"新北","新北","New Taipei","新北","신베이","新北","新北","新北" +"臺南","臺南","Tainan","台南","타이난","臺南","臺南","台南" +"桃園","桃園","Taoyuan","桃園","타오위안","桃園","桃園","桃园" +"嘉義","嘉義","Chiayi","嘉義","자이","嘉義","嘉義","嘉义" +"金門","金門","Kinmen","金門","진먼","金門","金門","金门" +"高雄","高雄","Kaohsiung","高雄","가오슝","高雄","高雄","高雄" +"臺東","臺東","Taitung","台東","타이둥","臺東","臺東","台东" +"花蓮","花蓮","Hualien","花蓮","화롄","花蓮","花蓮","花莲" +"澎湖","澎湖","Penghu","澎湖","펑후","澎湖","澎湖","澎湖" +"新竹","新竹","Hsinchu","新竹","신주","新竹","新竹","新竹" +"臺中","臺中","Taichung","台中","타이중","臺中","臺中","台中" +"苗栗","苗栗","Miaoli","苗栗","먀오리","苗栗","苗栗","苗栗" "成功","成功","Chenggong","成功","成功","成功","成功","成功" "佳冬","佳冬","Jiadong","佳冬","佳冬","佳冬","佳冬","佳冬" "麥寮","麥寮","Mailiao","麦寮","麥寮","麥寮","麥寮","麦寮" @@ -56,10 +56,10 @@ "橫山","橫山","Hengshan","横山","橫山","橫山","橫山","横山" "北埔","北埔","Beipu","北埔","北埔","北埔","北埔","北埔" "五峰","五峰","Wufeng","五峰","五峰","五峰","五峰","五峰" -"龍井","龍井","Longjing","龍井","龍井","龍井","龍井","龙井" -"大雅","大雅","Daya","大雅","大雅","大雅","大雅","大雅" -"沙鹿","沙鹿","Shalu","沙鹿","沙鹿","沙鹿","沙鹿","沙鹿" -"梧棲","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧栖" +"龍井","龍井","Longjing","龍井","룽징","龍井","龍井","龙井" +"大雅","大雅","Daya","大雅","다야","大雅","大雅","大雅" +"沙鹿","沙鹿","Shalu","沙鹿","사루","沙鹿","沙鹿","沙鹿" +"梧棲","梧棲","Wuqi","梧棲","우치","梧棲","梧棲","梧栖" "湖西","湖西","Husi","湖西","湖西","湖西","湖西","湖西" "金峰","金峰","Jinfeng","金峰","金峰","金峰","金峰","金峰" "太麻里","太麻里","Taimali","太麻里","太麻里","太麻里","太麻里","太麻里" @@ -115,7 +115,7 @@ "林內","林內","Linnei","林内","林內","林內","林內","林內" "二崙","二崙","Erlun","二崙","二崙","二崙","二崙","二仑" "崙背","崙背","Lunbei","崙背","崙背","崙背","崙背","仑背" -"東勢","東勢","Dongshi","東勢","東勢","東勢","東勢","东势" +"東勢","東勢","Dongshi","東勢","둥스","東勢","東勢","东势" "褒忠","褒忠","Baozhong","褒忠","褒忠","褒忠","褒忠","褒忠" "元長","元長","Yuanchang","元長","元長","元長","元長","元长" "水林","水林","Shuilin","水林","水林","水林","水林","水林" @@ -163,7 +163,7 @@ "望安","望安","Wangan","望安","望安","望安","望安","望安" "七美","七美","Qimei","七美","七美","七美","七美","七美" "暖暖","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" -"大安","大安","Da-An","大安","大安","大安","大安","大安" +"大安","大安","Da-An","大安","다안","大安","大安","大安" "文山","文山","Wenshan","文山","文山","文山","文山","文山" "鹽埕","鹽埕","Yancheng","塩埕","鹽埕","鹽埕","鹽埕","盐埕" "新興","新興","Sinsing","新興","新興","新興","新興","新兴" @@ -227,13 +227,13 @@ "坪林","坪林","Pinglin","坪林","坪林","坪林","坪林","坪林" "平溪","平溪","Pingxi","平渓","平溪","平溪","平溪","平溪" "烏來","烏來","Wulai","烏来","烏來","烏來","烏來","乌来" -"豐原","豐原","Fengyuan","豊原","豐原","豐原","豐原","丰原" -"后里","后里","Houli","后里","后里","后里","后里","后里" -"神岡","神岡","Shengang","神岡","神岡","神岡","神岡","神冈" -"新社","新社","Xinshe","新社","新社","新社","新社","新社" -"石岡","石岡","Shigang","石岡","石岡","石岡","石岡","石冈" -"外埔","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" -"大肚","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" +"豐原","豐原","Fengyuan","豊原","펑위안","豐原","豐原","丰原" +"后里","后里","Houli","后里","허우리","后里","后里","后里" +"神岡","神岡","Shengang","神岡","룽징","神岡","神岡","神冈" +"新社","新社","Xinshe","新社","신서","新社","新社","新社" +"石岡","石岡","Shigang","石岡","스강","石岡","石岡","石冈" +"外埔","外埔","Waipu","外埔","와이푸","外埔","外埔","外埔" +"大肚","大肚","Dadu","大肚","다두","大肚","大肚","大肚" "新營","新營","Xinying","新営","新營","新營","新營","新营" "鹽水","鹽水","Yanshui","塩水","鹽水","鹽水","鹽水","盐水" "白河","白河","Baihe","白河","白河","白河","白河","白河" @@ -258,7 +258,7 @@ "關廟","關廟","Guanmiao","関廟","關廟","關廟","關廟","关庙" "龍崎","龍崎","Longqi","龍崎","龍崎","龍崎","龍崎","龙崎" "永康","永康","Yongkang","永康","永康","永康","永康","永康" -"北","北","North","北","北","北","北","北" +"北","北","North","北","베이","北","北","北" "林園","林園","Linyuan","林園","林園","林園","林園","林园" "茄萣","茄萣","Qieding","茄萣","茄萣","茄萣","茄萣","茄萣" "永安","永安","Yong'An","永安","永安","永安","永安","永安" @@ -269,14 +269,14 @@ "林口","林口","Linkou","林口","林口","林口","林口","林口" "三芝","三芝","Sanzhi","三芝","三芝","三芝","三芝","三芝" "八里","八里","Bali","八里","八里","八里","八里","八里" -"大甲","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" +"大甲","大甲","Dajia","大甲","다자","大甲","大甲","大甲" "北門","北門","Beimen","北門","北門","北門","北門","北门" "安南","安南","Annan","安南","安南","安南","安南","安南" "蘆竹","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","芦竹" "龜山","龜山","Guishan","亀山","龜山","龜山","龜山","龟山" "復興","復興","Fuxing","復興","復興","復興","復興","复兴" -"東","東","East","東","東","東","東","东" -"西","西","West","西","西","西","西","西" +"東","東","East","東","둥","東","東","东" +"西","西","West","西","시","西","西","西" "達仁","達仁","Daren","達仁","達仁","達仁","達仁","达仁" "大武","大武","Dawu","大武","大武","大武","大武","大武" "關山","關山","Guanshan","関山","關山","關山","關山","关山" @@ -287,7 +287,7 @@ "卓溪","卓溪","Zhuoxi","卓渓","卓溪","卓溪","卓溪","卓溪" "頭份","頭份","Toufen","頭份","頭份","頭份","頭份","头份" "清水","清水","Qingshui","清水","清水","清水","清水","清水" -"南","南","South","南","南","南","南","南" +"南","南","South","南","난","南","南","南" "安平","安平","Anping","安平","安平","安平","安平","安平" "中西","中西","West Central","中西","中西","中西","中西","中西" "大溪","大溪","Dasi","大渓","大溪","大溪","大溪","大溪" @@ -324,14 +324,14 @@ "旗津","旗津","Qijin","旗津","旗津","旗津","旗津","旗津" "長濱","長濱","Changbin","長浜","長濱","長濱","長濱","长滨" "豐濱","豐濱","Fengbin","豊浜","豐濱","豐濱","豐濱","丰滨" -"霧峰","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","雾峰" -"大里","大里","Dali","大里","大里","大里","大里","大里" -"烏日","烏日","Wuri","烏日","烏日","烏日","烏日","乌日" -"中","中","Central","中","中","中","中","中" -"南屯","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" -"西屯","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" -"北屯","北屯","Beitun","北屯","北屯","北屯","北屯","北屯" -"潭子","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" +"霧峰","霧峰","Wufeng","霧峰","우펑","霧峰","霧峰","雾峰" +"大里","大里","Dali","大里","다리","大里","大里","大里" +"烏日","烏日","Wuri","烏日","우르","烏日","烏日","乌日" +"中","中","Central","中","중","中","中","中" +"南屯","南屯","Nantun","南屯","난툰","南屯","南屯","南屯" +"西屯","西屯","Xitun","西屯","시툰","西屯","西屯","西屯" +"北屯","北屯","Beitun","北屯","베이툰","北屯","北屯","北屯" +"潭子","潭子","Tanzi","潭子","탄쯔","潭子","潭子","潭子" "萬華","萬華","Wanhua","万華","萬華","萬華","萬華","万华" "松山","松山","Songshan","松山","松山","松山","松山","松山" "士林","士林","Shilin","士林","士林","士林","士林","士林" @@ -363,9 +363,9 @@ "金城","金城","Jincheng","金城","金城","金城","金城","金城" "尖石","尖石","Jianshi","尖石","尖石","尖石","尖石","尖石" "泰安","泰安","Tai-An","泰安","泰安","泰安","泰安","泰安" -"和平","和平","Heping","和平","和平","和平","和平","和平" -"縣","縣","County","県","縣","縣","縣","县" -"鄉","鄉","Township","郷","鄉","鄉","鄉","乡" -"鎮","鎮","Town","鎮","鎮","鎮","鎮","镇" -"市","市","City","市","市","市","市","市" -"區","區","District","区","區","區","區","区" +"和平","和平","Heping","和平","허핑","和平","和平","和平" +"縣","縣","County","県","현","縣","縣","县" +"鄉","鄉","Township","郷","향","鄉","鄉","乡" +"鎮","鎮","Town","鎮","진","鎮","鎮","镇" +"市","市","City","市","시","市","市","市" +"區","區","District","区","구","區","區","区" diff --git a/assets/translations/weather_station_names.csv b/assets/translations/weather_station_names.csv index c0a3fa75f..3f35d3d58 100644 --- a/assets/translations/weather_station_names.csv +++ b/assets/translations/weather_station_names.csv @@ -1,41 +1,41 @@ "key","zh-Hant","en","ja","ko","ru","vi","zh-Hans" -"466850","五分山雷達站","Wufenshan","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷达站" -"466881","新北","New Taipei","新北","新北","新北","新北","新北" +"466850","五分山雷達站","Wufenshan","五分山レーダー局","五分山雷達站","五分山雷達站","五分山雷達站","五分山雷达站" +"466881","新北","New Taipei","新北","신베이","新北","新北","新北" "466900","淡水","Tamsui","淡水","淡水","淡水","淡水","淡水" "466910","鞍部","Anbu","鞍部","鞍部","鞍部","鞍部","鞍部" -"466920","臺北","Taipei","台北","臺北","臺北","臺北","台北" +"466920","臺北","Taipei","台北","타이베이","臺北","臺北","台北" "466930","竹子湖","Zhuzihu","竹子湖","竹子湖","竹子湖","竹子湖","竹子湖" -"466940","基隆","Keelung","基隆","基隆","基隆","基隆","基隆" +"466940","基隆","Keelung","基隆","지룽","基隆","基隆","基隆" "466950","彭佳嶼","Pengjiayu","彭佳嶼","彭佳嶼","彭佳嶼","彭佳嶼","彭佳屿" -"466990","花蓮","Hualien","花蓮","花蓮","花蓮","花蓮","花莲" +"466990","花蓮","Hualien","花蓮","화롄","花蓮","花蓮","花莲" "467050","新屋","Xinwu","新屋","新屋","新屋","新屋","新屋" -"467080","宜蘭","Yilan","宜蘭","宜蘭","宜蘭","宜蘭","宜兰" -"467110","金門","Kinmen","金門","金門","金門","金門","金门" +"467080","宜蘭","Yilan","宜蘭","이란","宜蘭","宜蘭","宜兰" +"467110","金門","Kinmen","金門","진먼","金門","金門","金门" "467270","田中","Tianzhong","田中","田中","田中","田中","田中" "467280","後龍","Houlong","後龍","後龍","後龍","後龍","后龙" "467290","古坑","Gukeng","古坑","古坑","古坑","古坑","古坑" "467300","東吉島","Dongjidao","東吉島","東吉島","東吉島","東吉島","东吉岛" -"467350","澎湖","Penghu","澎湖","澎湖","澎湖","澎湖","澎湖" -"467410","臺南","Tainan","台南","臺南","臺南","臺南","台南" +"467350","澎湖","Penghu","澎湖","펑후","澎湖","澎湖","澎湖" +"467410","臺南","Tainan","台南","타이난","臺南","臺南","台南" "467420","永康","Yongkang","永康","永康","永康","永康","永康" -"467441","高雄","Kaohsiung","高雄","高雄","高雄","高雄","高雄" -"467480","嘉義","Chiayi","嘉義","嘉義","嘉義","嘉義","嘉义" -"467490","臺中","Taichung","台中","臺中","臺中","臺中","台中" +"467441","高雄","Kaohsiung","高雄","가오슝","高雄","高雄","高雄" +"467480","嘉義","Chiayi","嘉義","자이","嘉義","嘉義","嘉义" +"467490","臺中","Taichung","台中","타이중","臺中","臺中","台中" "467530","阿里山","Alishan","阿里山","阿里山","阿里山","阿里山","阿里山" "467540","大武","Dawu","大武","大武","大武","大武","大武" "467550","玉山","Yushan","玉山","玉山","玉山","玉山","玉山" -"467571","新竹","Hsinchu","新竹","新竹","新竹","新竹","新竹" +"467571","新竹","Hsinchu","新竹","신주","新竹","新竹","新竹" "467590","恆春","Hengchun","恒春","恆春","恆春","恆春","恒春" "467610","成功","Chenggong","成功","成功","成功","成功","成功" "467620","蘭嶼","Lanyu","蘭嶼","蘭嶼","蘭嶼","蘭嶼","兰屿" "467650","日月潭","Sun Moon Lake","日月潭","日月潭","日月潭","日月潭","日月潭" -"467660","臺東","Taitung","台東","臺東","臺東","臺東","台东" -"467790","墾丁雷達站","Kenting","墾丁雷達站","墾丁雷達站","墾丁雷達站","墾丁雷達站","垦丁雷达站" +"467660","臺東","Taitung","台東","타이둥","臺東","臺東","台东" +"467790","墾丁雷達站","Kenting","墾丁レーダー局","墾丁雷達站","墾丁雷達站","墾丁雷達站","垦丁雷达站" "467990","馬祖","Matsu","馬祖","馬祖","馬祖","馬祖","马祖" "12J990","口湖工作站","Kouhu Branch Station","口湖工作站","口湖工作站","口湖工作站","口湖工作站","口湖工作站" "12Q970","東港工作站","Donggang Branch","東港工作站","東港工作站","東港工作站","東港工作站","东港工作站" "12Q980","恆春工作站","Hengchun Branch","恆春工作站","恆春工作站","恆春工作站","恆春工作站","恒春工作站" -"42HA10","萬大發電廠","Wanta Hydro","萬大發電廠","萬大發電廠","萬大發電廠","萬大發電廠","万大发电厂" +"42HA10","萬大發電廠","Wanta Hydro","萬大発電所","萬大發電廠","萬大發電廠","萬大發電廠","万大发电厂" "72AI40","桃改樹林分場","Shulin Sub-station Of Taoyuan ARES","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改樹林分場","桃改树林分场" "72C440","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃園農改場","桃园农改场" "72D080","桃改五峰分場","Wufeng Sub-station Of Taoyuan ARES","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分場","桃改五峰分场" @@ -59,11 +59,11 @@ "82H840","茶改南部分場","South Branch Of TBRS","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分場","茶改南部分场" "82S580","茶改東部分場","East Branch Of TBRS","茶改東部分場","茶改東部分場","茶改東部分場","茶改東部分場","茶改东部分场" "A2C560","農工中心","農工中心","農工中心","農工中心","農工中心","農工中心","农工中心" -"A2K360","水試臺西試驗場","Taixi Experimental Fishing Ground","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水改台西试验场" -"A2K630","臺大雲林校區","Yunlin Branch Of NTU","臺大雲林校區","臺大雲林校區","臺大雲林校區","臺大雲林校區","台大云林校区" +"A2K360","水試臺西試驗場","Taixi Experimental Fishing Ground","水試臺西実験場","水試臺西試驗場","水試臺西試驗場","水試臺西試驗場","水改台西试验场" +"A2K630","臺大雲林校區","Yunlin Branch Of NTU","台大雲林校区","臺大雲林校區","臺大雲林校區","臺大雲林校區","台大云林校区" "A2N290","臺南蘭花園區","Taiwan Orchid","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","臺南蘭花園區","台南兰花园区" "B2E890","畜試北區分所","North Branch Of TLRI","畜試北區分所","畜試北區分所","畜試北區分所","畜試北區分所","蓄试北区分所" -"B2N890","畜產試驗所","Hsin Hua","畜產試驗所","畜產試驗所","畜產試驗所","畜產試驗所","畜产试验所" +"B2N890","畜產試驗所","Hsin Hua","畜產実験所","畜產試驗所","畜產試驗所","畜產試驗所","畜产试验所" "B2Q810","畜試南區分所","South Branch Of TLRI","畜試南區分所","畜試南區分所","畜試南區分所","畜試南區分所","蓄试南区分所" "B2U990","畜試東區分所","East Branch Of TLRI","畜試東區分所","畜試東區分所","畜試東區分所","畜試東區分所","蓄试东区分所" "C2A540","四堵","Sihdu","四堵","四堵","四堵","四堵","四堵" @@ -73,16 +73,16 @@ "C2A880","福隆","Fulong","福隆","福隆","福隆","福隆","福隆" "C2A920","富貴角","Fugueijiao","富貴角","富貴角","富貴角","富貴角","富贵角" "C2C410","中央大學","Ncu","中央大学","中央大學","中央大學","中央大學","中央大学" -"C2D720","關西工作站","Guanxi Experiment Station","關西工作站","關西工作站","關西工作站","關西工作站","关西工作站" -"C2D730","寶山農場","Baoshan Farm","寶山農場","寶山農場","寶山農場","寶山農場","宝山农场" +"C2D720","關西工作站","Guanxi Experiment Station","関西工作站","關西工作站","關西工作站","關西工作站","关西工作站" +"C2D730","寶山農場","Baoshan Farm","宝山農場","寶山農場","寶山農場","寶山農場","宝山农场" "C2D740","屯原","Tunyuan","屯原","屯原","屯原","屯原","屯原" "C2E520","大湖","Dahu","大湖","大湖","大湖","大湖","大湖" "C2E540","龍溪","Longxi","龍溪","龍溪","龍溪","龍溪","龙溪" "C2E880","三義","Sanyi","三義","三義","三義","三義","三义" "C2E970","八甲","Bajia","八甲","八甲","八甲","八甲","八甲" -"C2F000","大肚","Dadu","大肚","大肚","大肚","大肚","大肚" +"C2F000","大肚","Dadu","大肚","다두","大肚","大肚","大肚" "C2F860","梨山","Lishan","梨山","梨山","梨山","梨山","梨山" -"C2F930","大甲","Dajia","大甲","大甲","大甲","大甲","大甲" +"C2F930","大甲","Dajia","大甲","다자","大甲","大甲","大甲" "C2F990","摩天嶺","Motianling","摩天嶺","摩天嶺","摩天嶺","摩天嶺","摩天岭" "C2F9A0","中竹林","Zhongzhulin","中竹林","中竹林","中竹林","中竹林","中竹林" "C2FA00","烏石坑","Wushihkeng","烏石坑","烏石坑","烏石坑","烏石坑","乌石坑" @@ -95,7 +95,7 @@ "C2G9A0","畜試所彰化","Changhua Branch Of TLRI","畜試所彰化","畜試所彰化","畜試所彰化","畜試所彰化","蓄试所彰化" "C2H950","中寮","Zhongliao","中寮","中寮","中寮","中寮","中寮" "C2H9D0","三隻寮","Sanziliao","三隻寮","三隻寮","三隻寮","三隻寮","三只寮" -"C2H9E0","國姓南港","Guoxing Nangang","國姓南港","國姓南港","國姓南港","國姓南港","国姓南港" +"C2H9E0","國姓南港","Guoxing Nangang","国姓南港","國姓南港","國姓南港","國姓南港","国姓南港" "C2H9F0","柑林","Ganlin","柑林","柑林","柑林","柑林","柑林" "C2H9G0","百勝","Bosheng","百勝","百勝","百勝","百勝","百胜" "C2H9H0","苗改南投蜂場","Nantou Bee Farm Of Miaoli TARI","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂場","苗改南投蜂场" @@ -125,10 +125,10 @@ "C2M960","外寮","Wailiao","外寮","外寮","外寮","外寮","外寮" "C2M970","碧湖","Bihu","碧湖","碧湖","碧湖","碧湖","碧湖" "C2N160","西拉雅風管處","Siraya NSAH","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅風管處","西拉雅风管处" -"C2O810","曾文","Cengwen","曾文","曾文","曾文","曾文","曾文" +"C2O810","曾文","Cengwen","曽文","曾文","曾文","曾文","曾文" "C2O930","玉井","Yujing","玉井","玉井","玉井","玉井","玉井" "C2O950","安南","Annan","安南","安南","安南","安南","安南" -"C2R170","屏東","Pingdong","屏東","屏東","屏東","屏東","屏东" +"C2R170","屏東","Pingdong","屏東","핑둥","屏東","屏東","屏东" "C2R970","屏科大","National Pingtung University","屏科大","屏科大","屏科大","屏科大","屏科大" "C2V250","甲仙","Jiaxian","甲仙","甲仙","甲仙","甲仙","甲仙" "C2V260","月眉","Yuemei","月眉","月眉","月眉","月眉","月眉" @@ -216,11 +216,12 @@ "C0AK30","硬漢嶺","Yinghanling","硬漢嶺","硬漢嶺","硬漢嶺","硬漢嶺","硬汉岭" "C0B010","七堵","Qidu","七堵","七堵","七堵","七堵","七堵" "C0B020","基隆嶼","Keelung Islet","基隆嶼","基隆嶼","基隆嶼","基隆嶼","基隆屿" -"C0B040","大武崙","Dawulun","大武崙","大武崙","大武崙","大武崙","大武仑" +"C0B040","大武崙","Dawulun","大武崙","大武崙","大武崙","大武崙","大武仑 +" "C0B050","八斗子","Badouzi","八斗子","八斗子","八斗子","八斗子","八斗子" "C0B060","暖暖","Nuannuan","暖暖","暖暖","暖暖","暖暖","暖暖" "C0C460","復興","Fuxing","復興","復興","復興","復興","复兴" -"C0C480","桃園","Taoyuan","桃園","桃園","桃園","桃園","桃园" +"C0C480","桃園","Taoyuan","桃園","타오위안","桃園","桃園","桃园" "C0C490","八德","Bade","八徳","八德","八德","八德","八德" "C0C590","觀音","Guanyin","観音","觀音","觀音","觀音","观音" "C0C620","蘆竹","Luzhu","蘆竹","蘆竹","蘆竹","蘆竹","芦竹" @@ -261,7 +262,7 @@ "C0E610","馬都安","Madu-An","馬都安","馬都安","馬都安","馬都安","马都安" "C0E730","頭份","Toufen","頭份","頭份","頭份","頭份","头份" "C0E740","造橋","Zaoqiao","造橋","造橋","造橋","造橋","造桥" -"C0E750","苗栗","Miaoli","苗栗","苗栗","苗栗","苗栗","苗栗" +"C0E750","苗栗","Miaoli","苗栗","먀오리","苗栗","苗栗","苗栗" "C0E780","銅鑼","Tongluo","銅鑼","銅鑼","銅鑼","銅鑼","铜锣" "C0E791","卓蘭","Zhuolan","卓蘭","卓蘭","卓蘭","卓蘭","卓兰" "C0E810","西湖","Xihu","西湖","西湖","西湖","西湖","西湖" @@ -276,33 +277,33 @@ "C0E950","松安","Songan","松安","松安","松安","松安","松安" "C0E960","觀霧分站","Guanwu","觀霧分站","觀霧分站","觀霧分站","觀霧分站","观雾分站" "C0F0A0","雪山圈谷","Xueshanjuangu","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷","雪山圈谷" -"C0F0B0","石岡","Shigang","石岡","石岡","石岡","石岡","石冈" +"C0F0B0","石岡","Shigang","石岡","스강","石岡","石岡","石冈" "C0F0C0","中坑","Zhongkeng","中坑","中坑","中坑","中坑","中坑" "C0F0D0","審馬陣","Shenmazhen","審馬陣","審馬陣","審馬陣","審馬陣","审马阵" "C0F0E0","南湖圈谷","Nanhuquangu","南湖圈谷","南湖圈谷","南湖圈谷","南湖圈谷","南胡圈谷" -"C0F850","東勢","Dongshi","東勢","東勢","東勢","東勢","东势" +"C0F850","東勢","Dongshi","東勢","둥스","東勢","東勢","东势" "C0F970","大坑","Dakeng","大坑","大坑","大坑","大坑","大坑" -"C0F9I0","神岡","Shengang","神岡","神岡","神岡","神岡","神冈" -"C0F9K0","大安","Da-An","大安","大安","大安","大安","大安" -"C0F9L0","后里","Houli","后里","后里","后里","后里","后里" -"C0F9M0","豐原","Fengyuan","豊原","豐原","豐原","豐原","丰原" -"C0F9N0","大里","Dali","大里","大里","大里","大里","大里" -"C0F9O0","潭子","Tanzi","潭子","潭子","潭子","潭子","潭子" +"C0F9I0","神岡","Shengang","神岡","룽징","神岡","神岡","神冈" +"C0F9K0","大安","Da-An","大安","다안","大安","大安","大安" +"C0F9L0","后里","Houli","后里","허우리","后里","后里","后里" +"C0F9M0","豐原","Fengyuan","豊原","펑위안","豐原","豐原","丰原" +"C0F9N0","大里","Dali","大里","다리","大里","大里","大里" +"C0F9O0","潭子","Tanzi","潭子","탄쯔","潭子","潭子","潭子" "C0F9P0","清水","Qingshui","清水","清水","清水","清水","清水" -"C0F9Q0","外埔","Waipu","外埔","外埔","外埔","外埔","外埔" -"C0F9R0","龍井","Longjing","龍井","龍井","龍井","龍井","龙井" -"C0F9S0","烏日","Wuri","烏日","烏日","烏日","烏日","乌日" -"C0F9T0","西屯","Xitun","西屯","西屯","西屯","西屯","西屯" -"C0F9U0","南屯","Nantun","南屯","南屯","南屯","南屯","南屯" -"C0F9V0","新社","Xinshe","新社","新社","新社","新社","新社" +"C0F9Q0","外埔","Waipu","外埔","와이푸","外埔","外埔","外埔" +"C0F9R0","龍井","Longjing","龍井","룽징","龍井","龍井","龙井" +"C0F9S0","烏日","Wuri","烏日","우르","烏日","烏日","乌日" +"C0F9T0","西屯","Xitun","西屯","시툰","西屯","西屯","西屯" +"C0F9U0","南屯","Nantun","南屯","난툰","南屯","南屯","南屯" +"C0F9V0","新社","Xinshe","新社","신서","新社","新社","新社" "C0F9X0","大雅(中科園區)","Daya","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科園區)","大雅(中科园区)" "C0F9Y0","桃山","Taoshan","桃山","桃山","桃山","桃山","桃山" "C0F9Z0","雪山東峰","Xueshandongfeng","雪山東峰","雪山東峰","雪山東峰","雪山東峰","雪山东峰" "C0FA10","松柏","Songbai","松柏","松柏","松柏","松柏","松柏" "C0FA20","溫寮","Wunliao","溫寮","溫寮","溫寮","溫寮","温寮" -"C0FA30","梧棲","Wuqi","梧棲","梧棲","梧棲","梧棲","梧栖" +"C0FA30","梧棲","Wuqi","梧棲","우치","梧棲","梧棲","梧栖" "C0FA40","臺中電廠","Taichung?Power Plant","臺中電廠","臺中電廠","臺中電廠","臺中電廠","台中电厂" -"C0FA50","霧峰","Wufeng","霧峰","霧峰","霧峰","霧峰","雾峰" +"C0FA50","霧峰","Wufeng","霧峰","우펑","霧峰","霧峰","雾峰" "C0FA60","鞍馬山工作站","Anmashan Office","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍馬山工作站","鞍马山工作站" "C0FA70","大雪山埡口","Dashiueshan Yakou","大雪山埡口","大雪山埡口","大雪山埡口","大雪山埡口","大雪山哑口" "C0FA80","小雪山天池","Shiaushiueshan Tianchr","小雪山天池","小雪山天池","小雪山天池","小雪山天池","小雪山天池" @@ -350,7 +351,7 @@ "C0I390","仁愛","Ren'Ai","仁愛","仁愛","仁愛","仁愛","仁爱" "C0I410","名間","Mingjian","名間","名間","名間","名間","名间" "C0I420","國姓","Guoxing","国姓","國姓","國姓","國姓","国姓" -"C0I460","南投","Nantou","南投","南投","南投","南投","南投" +"C0I460","南投","Nantou","南投","난터우","南投","南投","南投" "C0I480","梅峰","Meifeng","梅峰","梅峰","梅峰","梅峰","梅峰" "C0I490","萬大林道","Wandalindao","萬大林道","萬大林道","萬大林道","萬大林道","万大林道" "C0I520","玉山風口","Yushanfengkou","玉山風口","玉山風口","玉山風口","玉山風口","玉山风口" @@ -405,18 +406,18 @@ "C0N010","鯤鯓國小","Kunshen Elementary School","鯤鯓國小","鯤鯓國小","鯤鯓國小","鯤鯓國小","鲲鯓国小" "C0N020","城西","Chengsi","城西","城西","城西","城西","城西" "C0N030","四草","Sihtsao","四草","四草","四草","四草","四草" -"C0N040","蘆竹溝","Lujhugou","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝" +"C0N040","蘆竹溝","Lujhugou","蘆竹溝","蘆竹溝","蘆竹溝","蘆竹溝","芦竹沟" "C0N050","蚵寮","Eliao","蚵寮","蚵寮","蚵寮","蚵寮","蚵寮" "C0O830","北寮","Beiliao","北寮","北寮","北寮","北寮","北寮" -"C0O840","王爺宮","Wangyegong","王爺宮","王爺宮","王爺宮","王爺宮","王爺宮" +"C0O840","王爺宮","Wangyegong","王爺宮","王爺宮","王爺宮","王爺宮","王爷宫" "C0O860","大內","Danei","大内","大內","大內","大內","大内" "C0O900","善化","Shanhua","善化","善化","善化","善化","善化" -"C0O960","崎頂","Qiding","崎頂","崎頂","崎頂","崎頂","崎頂" -"C0O970","虎頭埤","Hutoupi","虎頭埤","虎頭埤","虎頭埤","虎頭埤","虎頭埤" +"C0O960","崎頂","Qiding","崎頂","崎頂","崎頂","崎頂","崎顶" +"C0O970","虎頭埤","Hutoupi","虎頭埤","虎頭埤","虎頭埤","虎頭埤","虎头埤" "C0O980","新市","Xinshi","新市","新市","新市","新市","新市" -"C0O990","媽廟","Mamiao","媽廟","媽廟","媽廟","媽廟","媽廟" +"C0O990","媽廟","Mamiao","媽廟","媽廟","媽廟","媽廟","妈庙" "C0R100","尾寮山","Weiliaoshan","尾寮山","尾寮山","尾寮山","尾寮山","尾寮山" -"C0R130","阿禮","Ali","阿禮","阿禮","阿禮","阿禮","阿禮" +"C0R130","阿禮","Ali","阿禮","阿禮","阿禮","阿禮","阿礼" "C0R140","瑪家","Majia","瑪家","瑪家","瑪家","瑪家","玛家" "C0R150","三地門","Sandimen","三地門","三地門","三地門","三地門","三地门" "C0R160","鹽埔","Yanpuxinwei","塩埔","鹽埔","鹽埔","鹽埔","盐埔" @@ -424,8 +425,8 @@ "C0R220","潮州","Chaojhou","潮州","潮州","潮州","潮州","潮州" "C0R240","來義","Laiyi","来義","來義","來義","來義","来义" "C0R260","春日","Chunri","春日","春日","春日","春日","春日" -"C0R270","琉球嶼","Liouciouyu","琉球嶼","琉球嶼","琉球嶼","琉球嶼","琉球嶼" -"C0R280","檳榔","Binlang","檳榔","檳榔","檳榔","檳榔","檳榔" +"C0R270","琉球嶼","Liouciouyu","琉球嶼","琉球嶼","琉球嶼","琉球嶼","琉球屿" +"C0R280","檳榔","Binlang","檳榔","檳榔","檳榔","檳榔","槟榔" "C0R320","車城","Checheng","車城","車城","車城","車城","车城" "C0R341","牡丹","Mudan","牡丹","牡丹","牡丹","牡丹","牡丹" "C0R350","貓鼻頭","Maobitou","貓鼻頭","貓鼻頭","貓鼻頭","貓鼻頭","猫鼻头" @@ -491,33 +492,33 @@ "C0S890","關山","Guanshan","関山","關山","關山","關山","关山" "C0S900","蘭嶼高中","Lanyu High School","蘭嶼高中","蘭嶼高中","蘭嶼高中","蘭嶼高中","兰屿高中" "C0S910","蘭嶼燈塔","Lanyu Lighthouse","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","蘭嶼燈塔","兰屿灯塔" -"C0S920","金峰嘉蘭","Jialan Jinfeng","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭" +"C0S920","金峰嘉蘭","Jialan Jinfeng","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉蘭","金峰嘉兰" "C0S930","延平","Yanping","延平","延平","延平","延平","延平" -"C0S940","石寧山","Shiningshan","石寧山","石寧山","石寧山","石寧山","石寧山" -"C0S950","七塊厝","Qikuaicuo","七塊厝","七塊厝","七塊厝","七塊厝","七塊厝" -"C0S960","香蘭","Xianglan","香蘭","香蘭","香蘭","香蘭","香蘭" +"C0S940","石寧山","Shiningshan","石寧山","石寧山","石寧山","石寧山","石宁山" +"C0S950","七塊厝","Qikuaicuo","七塊厝","七塊厝","七塊厝","七塊厝","七块厝" +"C0S960","香蘭","Xianglan","香蘭","香蘭","香蘭","香蘭","香兰" "C0S970","加津林","Jiajinlin","加津林","加津林","加津林","加津林","加津林" -"C0S980","勝林山","Shenglinshan","勝林山","勝林山","勝林山","勝林山","勝林山" -"C0S990","山豬窟","Shanzhuku","山豬窟","山豬窟","山豬窟","山豬窟","山豬窟" -"C0SA00","歷坵","Liqiu","歷坵","歷坵","歷坵","歷坵","歷坵" -"C0SA10","檳榔四格山","Binlangsigeshan","檳榔四格山","檳榔四格山","檳榔四格山","檳榔四格山","檳榔四格山" -"C0SA20","金崙山","Jinlunshan","金崙山","金崙山","金崙山","金崙山","金崙山" -"C0SA30","都歷","Duli","都歷","都歷","都歷","都歷","都歷" +"C0S980","勝林山","Shenglinshan","勝林山","勝林山","勝林山","勝林山","胜林山" +"C0S990","山豬窟","Shanzhuku","山豬窟","山豬窟","山豬窟","山豬窟","山猪窟" +"C0SA00","歷坵","Liqiu","歷坵","歷坵","歷坵","歷坵","历坵" +"C0SA10","檳榔四格山","Binlangsigeshan","檳榔四格山","檳榔四格山","檳榔四格山","檳榔四格山","槟榔四格山" +"C0SA20","金崙山","Jinlunshan","金崙山","金崙山","金崙山","金崙山","金仑山" +"C0SA30","都歷","Duli","都歷","都歷","都歷","都歷","都历" "C0SA40","瑞和","Ruihe","瑞和","瑞和","瑞和","瑞和","瑞和" -"C0SA60","知本(水試所)","Zhiben (FRI)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水試所)" +"C0SA60","知本(水試所)","Zhiben (FRI)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水試所)","知本(水试所)" "C0SA80","土坂","Tuban","土坂","土坂","土坂","土坂","土坂" -"C0SA90","達仁林場","Darenlinchang","達仁林場","達仁林場","達仁林場","達仁林場","達仁林場" +"C0SA90","達仁林場","Darenlinchang","達仁林場","達仁林場","達仁林場","達仁林場","达仁林场" "C0SB10","美和","Meihe","美和","美和","美和","美和","美和" -"C0SB20","富岡","Fugang","富岡","富岡","富岡","富岡","富岡" -"C0SB30","新蘭","Dulan Fire Brigade","新蘭","新蘭","新蘭","新蘭","新蘭" -"C0SB40","興隆"," Xinglong","興隆","興隆","興隆","興隆","興隆" +"C0SB20","富岡","Fugang","富岡","富岡","富岡","富岡","富冈" +"C0SB30","新蘭","Dulan Fire Brigade","新蘭","新蘭","新蘭","新蘭","新兰" +"C0SB40","興隆"," Xinglong","興隆","興隆","興隆","興隆","兴隆" "C0SB50","叭嗡嗡","Baweng","叭嗡嗡","叭嗡嗡","叭嗡嗡","叭嗡嗡","叭嗡嗡" -"C0SB60","白守蓮","Baishoulian","白守蓮","白守蓮","白守蓮","白守蓮","白守蓮" -"C0SB70","小港漁港","Xiaogang Fishing Harbor","小港漁港","小港漁港","小港漁港","小港漁港","小港漁港" -"C0SB80","長濱漁港","Changbin Fishing Harbor","長濱漁港","長濱漁港","長濱漁港","長濱漁港","長濱漁港" -"C0T790","大禹嶺","Dayuling","大禹嶺","大禹嶺","大禹嶺","大禹嶺","大禹嶺" +"C0SB60","白守蓮","Baishoulian","白守蓮","白守蓮","白守蓮","白守蓮","白守莲" +"C0SB70","小港漁港","Xiaogang Fishing Harbor","小港漁港","小港漁港","小港漁港","小港漁港","小港渔港" +"C0SB80","長濱漁港","Changbin Fishing Harbor","長濱漁港","長濱漁港","長濱漁港","長濱漁港","长滨渔港" +"C0T790","大禹嶺","Dayuling","大禹嶺","大禹嶺","大禹嶺","大禹嶺","大禹岭" "C0T820","天祥","Tianxiang","天祥","天祥","天祥","天祥","天祥" -"C0T870","鯉魚潭","Liyutan","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭" +"C0T870","鯉魚潭","Liyutan","鯉魚潭","鯉魚潭","鯉魚潭","鯉魚潭","鲤鱼潭" "C0T900","西林","Xilin","西林","西林","西林","西林","西林" "C0T960","光復","Guangfu","光復","光復","光復","光復","光复" "C0T9A0","月眉山","Yuemeishan","月眉山","月眉山","月眉山","月眉山","月眉山" @@ -660,27 +661,27 @@ "C0Z200","萬榮","Wanrong","万栄","萬榮","萬榮","萬榮","万荣" "C0Z210","瑞穗","Ruisui","瑞穂","瑞穗","瑞穗","瑞穗","瑞穗" "C0Z220","和平林道","Hepinglindao","和平林道","和平林道","和平林道","和平林道","和平林道" -"C0Z230","和平","Heping","和平","和平","和平","和平","和平" +"C0Z230","和平","Heping","和平","허핑","和平","和平","和平" "C0Z250","瑞穗林道","Ruisuilindao","瑞穗林道","瑞穗林道","瑞穗林道","瑞穗林道","瑞穗林道" "C0Z270","蕃薯寮","Fanshuliao","蕃薯寮","蕃薯寮","蕃薯寮","蕃薯寮","蕃薯寮" "C0Z280","德武","Dewu","德武","德武","德武","德武","德武" "C0Z290","赤柯山","Chikeshan","赤柯山","赤柯山","赤柯山","赤柯山","赤柯山" -"C0Z300","東里","Dongli","東里","東里","東里","東里","東里" -"C0Z310","清水斷崖","Qingshui Cliff","清水斷崖","清水斷崖","清水斷崖","清水斷崖","清水斷崖" +"C0Z300","東里","Dongli","東里","東里","東里","東里","东里" +"C0Z310","清水斷崖","Qingshui Cliff","清水斷崖","清水斷崖","清水斷崖","清水斷崖","清水断崖" "C0Z320","清水林道","Qingshuilindao","清水林道","清水林道","清水林道","清水林道","清水林道" "C0Z330","安通山","Antongshan","安通山","安通山","安通山","安通山","安通山" "C1A630","下盆","Siapen","下盆","下盆","下盆","下盆","下盆" -"C1A750","石碇服務區","Shiding Service Area","石碇服務區","石碇服務區","石碇服務區","石碇服務區","石碇服務區" +"C1A750","石碇服務區","Shiding Service Area","石碇服務區","石碇服務區","石碇服務區","石碇服務區","石碇服务区" "C1A760","坪林交控","Pinglin Traffic Control Center","坪林交控","坪林交控","坪林交控","坪林交控","坪林交控" "C1A9N0","四十份","Sihshihfen","四十份","四十份","四十份","四十份","四十份" "C1AC50","關渡","Guandu","關渡","關渡","關渡","關渡","关渡" -"C1AI50","國三N016K","Freeway No. 3 - Rain - N016k","國三N016K","國三N016K","國三N016K","國三N016K","國三N016K" -"C1AI60","國一39K邊坡","Freeway No. 1 - Rain – N039k","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡" +"C1AI50","國三N016K","Freeway No. 3 - Rain - N016k","國三N016K","國三N016K","國三N016K","國三N016K","国三N016K" +"C1AI60","國一39K邊坡","Freeway No. 1 - Rain – N039k","國一39K邊坡","國一39K邊坡","國一39K邊坡","國一39K邊坡","国一39K边坡" "C1C510","水尾","Shueiwei","水尾","水尾","水尾","水尾","水尾" "C1D380","新埔","Sinpu","新埔","新埔","新埔","新埔","新埔" -"C1D400","鳥嘴山","Niaozueishan","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山" -"C1D410","白蘭","Bailan","白蘭","白蘭","白蘭","白蘭","白蘭" -"C1D420","太閣南","Taigenan","太閣南","太閣南","太閣南","太閣南","太閣南" +"C1D400","鳥嘴山","Niaozueishan","鳥嘴山","鳥嘴山","鳥嘴山","鳥嘴山","鸟嘴山" +"C1D410","白蘭","Bailan","白蘭","白蘭","白蘭","白蘭","白兰" +"C1D420","太閣南","Taigenan","太閣南","太閣南","太閣南","太閣南","太阁南" "C1D630","飛鳳山","Fei Feng Mountain","飛鳳山","飛鳳山","飛鳳山","飛鳳山","飞凤山" "C1D640","外坪(五指山)","Waiping(Wuzhihshan)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)","外坪(五指山)" "C1E451","象鼻","Xiangbi","象鼻","象鼻","象鼻","象鼻","象鼻" @@ -735,58 +736,58 @@ "C1I250","鯉潭","Litan","鯉潭","鯉潭","鯉潭","鯉潭","鲤潭" "C1I260","北坑","Beikeng","北坑","北坑","北坑","北坑","北坑" "C1I280","埔中","Puzhong","埔中","埔中","埔中","埔中","埔中" -"C1I290","豐丘","Fengqiu","豐丘","豐丘","豐丘","豐丘","豐丘" -"C1I310","西巒","Xiluan","西巒","西巒","西巒","西巒","西巒" -"C1I320","奧萬大","Aowanda","奧萬大","奧萬大","奧萬大","奧萬大","奧萬大" -"C1I330","楓樹林","Fengshulin","楓樹林","楓樹林","楓樹林","楓樹林","楓樹林" -"C1I340","新興橋","Xinxingqiao","新興橋","新興橋","新興橋","新興橋","新興橋" +"C1I290","豐丘","Fengqiu","豐丘","豐丘","豐丘","豐丘","丰丘" +"C1I310","西巒","Xiluan","西巒","西巒","西巒","西巒","西峦" +"C1I320","奧萬大","Aowanda","奧萬大","奧萬大","奧萬大","奧萬大","奥万大" +"C1I330","楓樹林","Fengshulin","楓樹林","楓樹林","楓樹林","楓樹林","枫树林" +"C1I340","新興橋","Xinxingqiao","新興橋","新興橋","新興橋","新興橋","新兴桥" "C1I400","凌霄","Lingxiao","凌霄","凌霄","凌霄","凌霄","凌霄" -"C1I430","翠華","Cuihua","翠華","翠華","翠華","翠華","翠華" +"C1I430","翠華","Cuihua","翠華","翠華","翠華","翠華","翠华" "C1I440","新高口","Xingaokou","新高口","新高口","新高口","新高口","新高口" -"C1I450","望鄉山","Wangxiangshan","望鄉山","望鄉山","望鄉山","望鄉山","望鄉山" +"C1I450","望鄉山","Wangxiangshan","望鄉山","望鄉山","望鄉山","望鄉山","望乡山" "C1I470","杉林溪","Shanlinxi","杉林溪","杉林溪","杉林溪","杉林溪","杉林溪" "C1I500","大尖山","Dajianshan","大尖山","大尖山","大尖山","大尖山","大尖山" -"C1I510","線浸林道","Xianjinlindao","線浸林道","線浸林道","線浸林道","線浸林道","線浸林道" -"C1I550","國六W023K","Freeway No. 6 - Rain – W023k","國六W023K","國六W023K","國六W023K","國六W023K","國六W023K" +"C1I510","線浸林道","Xianjinlindao","線浸林道","線浸林道","線浸林道","線浸林道","线浸林道" +"C1I550","國六W023K","Freeway No. 6 - Rain – W023k","國六W023K","國六W023K","國六W023K","國六W023K","国六W023K" "C1K540","口湖","Kouhu","口湖","口湖","口湖","口湖","口湖" -"C1M390","龍美","Longmei","龍美","龍美","龍美","龍美","龍美" +"C1M390","龍美","Longmei","龍美","龍美","龍美","龍美","龙美" "C1M400","菜瓜坪","Caiguaping","菜瓜坪","菜瓜坪","菜瓜坪","菜瓜坪","菜瓜坪" -"C1M480","獨立山","Dulishan","獨立山","獨立山","獨立山","獨立山","獨立山" -"C1M600","頭凍","Toudong","頭凍","頭凍","頭凍","頭凍","頭凍" -"C1M610","石磐龍","Shipanlong","石磐龍","石磐龍","石磐龍","石磐龍","石磐龍" +"C1M480","獨立山","Dulishan","獨立山","獨立山","獨立山","獨立山","独立山" +"C1M600","頭凍","Toudong","頭凍","頭凍","頭凍","頭凍","头冻" +"C1M610","石磐龍","Shipanlong","石磐龍","石磐龍","石磐龍","石磐龍","石磐龙" "C1M640","十字","Shizi","十字","十字","十字","十字","十字" -"C1M870","國三N285K","Freeway No. 3 - Rain –N285k","國三N285K","國三N285K","國三N285K","國三N285K","國三N285K" -"C1N001","沙崙","Shalun","沙崙","沙崙","沙崙","沙崙","沙崙" -"C1O850","環湖","Huanhu","環湖","環湖","環湖","環湖","環湖" -"C1O870","大棟山","Dadongshan","大棟山","大棟山","大棟山","大棟山","大棟山" +"C1M870","國三N285K","Freeway No. 3 - Rain –N285k","國三N285K","國三N285K","國三N285K","國三N285K","国三N285K" +"C1N001","沙崙","Shalun","沙崙","沙崙","沙崙","沙崙","沙仑" +"C1O850","環湖","Huanhu","環湖","環湖","環湖","環湖","环湖" +"C1O870","大棟山","Dadongshan","大棟山","大棟山","大棟山","大棟山","大栋山" "C1O880","關山","Guanshan","関山","關山","關山","關山","关山" "C1O921","楠西","Nanxi","楠西","楠西","楠西","楠西","楠西" -"C1O940","東山服務區","Dongshan Service Area","東山服務區","東山服務區","東山服務區","東山服務區","東山服務區" +"C1O940","東山服務區","Dongshan Service Area","東山服務區","東山服務區","東山服務區","東山服務區","东山服务区" "C1R110","口社","Gusia","口社","口社","口社","口社","口社" "C1R120","上德文","Shangdewun","上德文","上德文","上德文","上德文","上德文" "C1R250","力里","Lili","力里","力里","力里","力里","力里" -"C1R290","石門山","Shihmenshan","石門山","石門山","石門山","石門山","石門山" +"C1R290","石門山","Shihmenshan","石門山","石門山","石門山","石門山","石门山" "C1R610","西大武山","Xidawushan","西大武山","西大武山","西大武山","西大武山","西大武山" -"C1R630","龍泉","Longquan","龍泉","龍泉","龍泉","龍泉","龍泉" +"C1R630","龍泉","Longquan","龍泉","龍泉","龍泉","龍泉","龙泉" "C1S670","摩天","Motian","摩天","摩天","摩天","摩天","摩天" -"C1S800","華源","Huayuan","華源","華源","華源","華源","華源" +"C1S800","華源","Huayuan","華源","華源","華源","華源","华源" "C1S820","金峰","Jinfeng","金峰","金峰","金峰","金峰","金峰" -"C1S850","豐南","Funan","豐南","豐南","豐南","豐南","豐南" +"C1S850","豐南","Funan","豐南","豐南","豐南","豐南","丰南" "C1S860","利嘉","Lichai","利嘉","利嘉","利嘉","利嘉","利嘉" "C1S870","南美山","Nanmaisan","南美山","南美山","南美山","南美山","南美山" -"C1S880","壽卡","Shouka","壽卡","壽卡","壽卡","壽卡","壽卡" +"C1S880","壽卡","Shouka","壽卡","壽卡","壽卡","壽卡","寿卡" "C1SA50","利嘉林道","Lijialindao","利嘉林道","利嘉林道","利嘉林道","利嘉林道","利嘉林道" -"C1SA70","都蘭","Dulan","都蘭","都蘭","都蘭","都蘭","都蘭" +"C1SA70","都蘭","Dulan","都蘭","都蘭","都蘭","都蘭","都兰" "C1T800","洛韶","Luoshao","洛韶","洛韶","洛韶","洛韶","洛韶" "C1T810","慈恩","Ci-En","慈恩","慈恩","慈恩","慈恩","慈恩" -"C1T830","布洛灣","Buluowan","布洛灣","布洛灣","布洛灣","布洛灣","布洛灣" -"C1T920","中興","Zhongxing","中興","中興","中興","中興","中興" -"C1T940","大觀","Daguan","大觀","大觀","大觀","大觀","大觀" +"C1T830","布洛灣","Buluowan","布洛灣","布洛灣","布洛灣","布洛灣","布洛湾" +"C1T920","中興","Zhongxing","中興","中興","中興","中興","中兴" +"C1T940","大觀","Daguan","大觀","大觀","大觀","大觀","大观" "C1T950","太安","Tai-An","太安","太安","太安","太安","太安" -"C1T970","大農","Danong","大農","大農","大農","大農","大農" -"C1T980","龍澗","Longjian","龍澗","龍澗","龍澗","龍澗","龍澗" +"C1T970","大農","Danong","大農","大農","大農","大農","大农" +"C1T980","龍澗","Longjian","龍澗","龍澗","龍澗","龍澗","龙涧" "C1T990","高寮","Gaoliao","高寮","高寮","高寮","高寮","高寮" -"C1TA00","太魯閣","Taroko","太魯閣","太魯閣","太魯閣","太魯閣","太魯閣" +"C1TA00","太魯閣","Taroko","太魯閣","太魯閣","太魯閣","太魯閣","太鲁阁" "C1U501","牛鬥","Nioudou","牛鬥","牛鬥","牛鬥","牛鬥","牛斗" "C1U670","寒溪","Hanxi","寒溪","寒溪","寒溪","寒溪","寒溪" "C1U840","東澳嶺","Dongaoling","東澳嶺","東澳嶺","東澳嶺","東澳嶺","东澳岭" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index eebcabf6a..ba8bc614c 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2025-08-15 01:20\n" +"PO-Revision-Date: 2025-08-15 04:19\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -502,19 +502,19 @@ msgstr "自动定位功能需要您允许 DPIP 使用通知权限才能正常运 #: ./lib/app/settings/location/page.dart:86 msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。" -msgstr "" +msgstr "自动定位功能需要您允许 DPIP 使用位置权限才能正常运作。请您到应用程式设定中找到并允许「位置」权限后再试一次。" #: ./lib/app/settings/location/page.dart:89 msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。" -msgstr "" +msgstr "自动定位功能需要您永远允许 DPIP 使用位置权限才能正常运作。请您到应用程式设定中找到位置权限设定并选择「永远」后再试一次。" #: ./lib/app/settings/location/page.dart:90 msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。" -msgstr "" +msgstr "自动定位功能需要您一律允许 DPIP 使用位置权限才能正常运作。请您到应用程式设定中找到位置权限设定并选择「一律允许」后再试一次。" #: ./lib/app/settings/location/page.dart:91 msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。" -msgstr "" +msgstr "为了获得更好的自动定位体验,您需要给予「自启动权限」以便让 DPIP 在背景自动设定所在地资讯。" #: ./lib/app/settings/location/page.dart:92 msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。" @@ -522,7 +522,7 @@ msgstr "为了获得更好的自动定位体验,您需要授予「无限制」 #: ./lib/app/settings/location/page.dart:93 msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。" -msgstr "" +msgstr "自动定位功能需要您允许 DPIP 使用权限才能正常运作。请您到应用程式设定中找到并允许「权限」后再试一次。" #: ./lib/route/image_viewer/image_viewer.dart:64 msgid "取消" @@ -534,11 +534,11 @@ msgstr "自动启动" #: ./lib/app/settings/location/page.dart:164 msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" -msgstr "" +msgstr "为了获得更好的 DPIP 体验,请依照步骤启用自动启动功能,以便让 DPIP 在背景能正常接收资讯以及更新所在地。" #: ./lib/app/settings/location/page.dart:186 msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。" -msgstr "" +msgstr "为了获得更好的 DPIP 体验,请依照步骤关闭省电策略,以便让 DPIP 在背景能正常接收资讯以及更新所在地。" #: ./lib/app/settings/location/page.dart:220 msgid "一律允許" From 1a27561ccf1a9949c5992c3a00801aa5c6db0b67 Mon Sep 17 00:00:00 2001 From: Lingling Date: Sat, 30 Aug 2025 16:53:24 +0800 Subject: [PATCH 47/59] chore: organize code (#372) * chore * revert * revert * remove(pubspec): pub.dev * fix: function name --- ios/Runner.xcodeproj/project.pbxproj | 4 --- ios/Runner/en.lproj/InfoPlist.strings | 0 ios/Runner/vi.lproj/InfoPlist.strings | 0 lib/app/map/_lib/managers/radar.dart | 39 +++++++++------------- lib/app/map/_lib/managers/report.dart | 2 +- lib/app/settings/notify/page.dart | 3 +- lib/core/notify.dart | 2 +- lib/utils/depth_color.dart | 41 ++++++++++------------- pubspec.lock | 48 --------------------------- pubspec.yaml | 2 -- 10 files changed, 37 insertions(+), 104 deletions(-) delete mode 100644 ios/Runner/en.lproj/InfoPlist.strings delete mode 100644 ios/Runner/vi.lproj/InfoPlist.strings diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 92a922e97..0eb7ef800 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -65,8 +65,6 @@ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 4B4531DD011F7A688ACAA691 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 5228AD5A2C2EE45D007635F5 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; - 522D48FF2DFD33EF0030AB0C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 522D49002DFD33F20030AB0C /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; 529C27C92C93F7B900AAFAB6 /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/InfoPlist.strings; sourceTree = ""; }; 529C27CC2C93F7BC00AAFAB6 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; 529C27CF2C947EFB00AAFAB6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -491,8 +489,6 @@ 529C27CC2C93F7BC00AAFAB6 /* ko */, 529C27CF2C947EFB00AAFAB6 /* ja */, 529C27DC2C97019E00AAFAB6 /* zh_TW */, - 522D48FF2DFD33EF0030AB0C /* en */, - 522D49002DFD33F20030AB0C /* vi */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/ios/Runner/en.lproj/InfoPlist.strings b/ios/Runner/en.lproj/InfoPlist.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/ios/Runner/vi.lproj/InfoPlist.strings b/ios/Runner/vi.lproj/InfoPlist.strings deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/app/map/_lib/managers/radar.dart b/lib/app/map/_lib/managers/radar.dart index 51c25a517..1f5a3e245 100644 --- a/lib/app/map/_lib/managers/radar.dart +++ b/lib/app/map/_lib/managers/radar.dart @@ -793,35 +793,28 @@ class _AutoScrollingTimeListState extends State<_AutoScrollingTimeList> { final key = _chipKeys[widget.currentTime]; if (key?.currentContext == null) return; - try { - final RenderBox? renderBox = key!.currentContext!.findRenderObject() as RenderBox?; - if (renderBox == null) return; + final RenderBox? renderBox = key!.currentContext!.findRenderObject() as RenderBox?; + if (renderBox == null) return; - final RenderBox? scrollViewBox = - _scrollController.position.context.storageContext.findRenderObject() as RenderBox?; - if (scrollViewBox == null) return; + final RenderBox? scrollViewBox = _scrollController.position.context.storageContext.findRenderObject() as RenderBox?; + if (scrollViewBox == null) return; - if (!renderBox.attached) return; + if (!renderBox.attached) return; - final position = renderBox.localToGlobal(Offset.zero); - final localPosition = scrollViewBox.globalToLocal(position); + final position = renderBox.localToGlobal(Offset.zero); + final localPosition = scrollViewBox.globalToLocal(position); - final targetOffset = - _scrollController.offset + localPosition.dx - (scrollViewBox.size.width / 2) + (renderBox.size.width / 2); + final targetOffset = + _scrollController.offset + localPosition.dx - (scrollViewBox.size.width / 2) + (renderBox.size.width / 2); - final clampedOffset = targetOffset.clamp( - _scrollController.position.minScrollExtent, - _scrollController.position.maxScrollExtent, - ); + final clampedOffset = targetOffset.clamp( + _scrollController.position.minScrollExtent, + _scrollController.position.maxScrollExtent, + ); - if ((clampedOffset - _scrollController.offset).abs() > 20) { - _scrollController.animateTo( - clampedOffset, - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - ); - } - } catch (e) {} + if ((clampedOffset - _scrollController.offset).abs() > 20) { + _scrollController.animateTo(clampedOffset, duration: const Duration(milliseconds: 300), curve: Curves.easeInOut); + } } @override diff --git a/lib/app/map/_lib/managers/report.dart b/lib/app/map/_lib/managers/report.dart index e906e46c9..fb71fa5ce 100644 --- a/lib/app/map/_lib/managers/report.dart +++ b/lib/app/map/_lib/managers/report.dart @@ -684,7 +684,7 @@ class _ReportMapLayerSheetState extends State { margin: const EdgeInsets.only(right: 6), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: DepthColor.depth(report.depth), + color: getDepthColor(report.depth), ), ), Text( diff --git a/lib/app/settings/notify/page.dart b/lib/app/settings/notify/page.dart index 82378cfdd..a65356b9f 100644 --- a/lib/app/settings/notify/page.dart +++ b/lib/app/settings/notify/page.dart @@ -15,6 +15,7 @@ import 'package:dpip/core/providers.dart'; import 'package:dpip/models/settings/location.dart'; import 'package:dpip/models/settings/notify.dart'; import 'package:dpip/utils/extensions/build_context.dart'; +import 'package:dpip/utils/log.dart'; import 'package:dpip/widgets/list/list_section.dart'; import 'package:dpip/widgets/list/list_tile.dart'; import 'package:flutter/material.dart'; @@ -97,7 +98,7 @@ class _SettingsNotifyPageState extends State { } }) .catchError((updateError) { - print('Failed to update location: $updateError'); + TalkerManager.instance.error('Failed to update location: $updateError'); }); }); } diff --git a/lib/core/notify.dart b/lib/core/notify.dart index d7bfc22d0..fb5b715c8 100644 --- a/lib/core/notify.dart +++ b/lib/core/notify.dart @@ -12,7 +12,7 @@ String? _pendingChannelKey; @pragma('vm:entry-point') Future onActionReceivedMethod(ReceivedAction receivedAction) async { - print(receivedAction); + TalkerManager.instance.debug('Received action: $receivedAction'); final context = router.routerDelegate.navigatorKey.currentContext; if (context == null) { _pendingChannelKey = receivedAction.channelKey; diff --git a/lib/utils/depth_color.dart b/lib/utils/depth_color.dart index 2349ee7d7..5e538355b 100644 --- a/lib/utils/depth_color.dart +++ b/lib/utils/depth_color.dart @@ -1,33 +1,26 @@ import 'dart:ui'; -class DepthColor { - static const depth0 = Color(0xFF000000); - static const depth1 = Color(0xFFFF0000); - static const depth2 = Color(0xFFFF6400); - static const depth3 = Color(0xFFFFC800); - static const depth4 = Color(0xFF00C800); - static const depth5 = Color(0xFF00C8C8); - static const depth6 = Color(0xFF0000C8); +const kDepthColor0 = Color(0xFF000000); +const kDepthColor1 = Color(0xFFFF0000); +const kDepthColor2 = Color(0xFFFF6400); +const kDepthColor3 = Color(0xFFFFC800); +const kDepthColor4 = Color(0xFF00C800); +const kDepthColor5 = Color(0xFF00C8C8); +const kDepthColor6 = Color(0xFF0000C8); - static Color depth(double depth) { - final depthList = [5, 15, 30, 50, 100, 150]; - final colorList = [depth1, depth2, depth3, depth4, depth5, depth6]; +Color getDepthColor(double depth) { + final depthList = [5, 15, 30, 50, 100, 150]; + final colorList = [kDepthColor1, kDepthColor2, kDepthColor3, kDepthColor4, kDepthColor5, kDepthColor6]; - if (depth <= depthList.first) { - return colorList.first; - } + if (depth <= depthList.first) return colorList.first; - if (depth >= depthList.last) { - return colorList.last; - } + if (depth >= depthList.last) return colorList.last; - for (int i = 0; i < depthList.length - 1; i++) { - if (depth >= depthList[i] && depth < depthList[i + 1]) { - final double localT = (depth - depthList[i]) / (depthList[i + 1] - depthList[i]); - return Color.lerp(colorList[i], colorList[i + 1], localT)!; - } + for (int i = 0; i < depthList.length - 1; i++) { + if (depth >= depthList[i] && depth < depthList[i + 1]) { + final double localT = (depth - depthList[i]) / (depthList[i + 1] - depthList[i]); + return Color.lerp(colorList[i], colorList[i + 1], localT)!; } - - return depth0; } + return kDepthColor0; } diff --git a/pubspec.lock b/pubspec.lock index f7ee0821e..8a44d7553 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -520,14 +520,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.7" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 - url: "https://pub.dev" - source: hosted - version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -971,14 +963,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.dev" - source: hosted - version: "1.1.0" path_provider: dependency: "direct main" description: @@ -1432,14 +1416,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - tutorial_coach_mark: - dependency: "direct main" - description: - name: tutorial_coach_mark - sha256: "9cdb721165d1cfb6e9b1910a1af1b3570fa6caa5059cf1506fcbd00bf7102abf" - url: "https://pub.dev" - source: hosted - version: "1.3.0" typed_data: dependency: transitive description: @@ -1520,30 +1496,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" - url: "https://pub.dev" - source: hosted - version: "1.1.18" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" - url: "https://pub.dev" - source: hosted - version: "1.1.13" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" - url: "https://pub.dev" - source: hosted - version: "1.1.16" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 2f1fc03a4..8a2804ef2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,7 +34,6 @@ dependencies: flutter_localizations: sdk: flutter flutter_markdown: ^0.7.7 - flutter_svg: ^2.1.0 fluttertoast: 8.2.12 freezed_annotation: ^3.0.0 gal: ^2.3.0 @@ -63,7 +62,6 @@ dependencies: styled_text: ^8.1.0 talker_flutter: ^4.7.2 timezone: ^0.10.0 - tutorial_coach_mark: ^1.3.0 url_launcher: ^6.3.1 ip_country_lookup: ^1.0.0 flutter_icmp_ping: ^3.1.3 From f80c7a811ddb48d73ea260293a494c3fdf71db2a Mon Sep 17 00:00:00 2001 From: Lingling Date: Sat, 30 Aug 2025 17:03:04 +0800 Subject: [PATCH 48/59] fix: eew (#395) * fix: eew * fix: initialize eew * revert --- lib/app/map/_lib/managers/monitor.dart | 5 ++++- lib/core/eew.dart | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 5a04022ff..5c824393f 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -36,7 +36,7 @@ class MonitorMapLayerManager extends MapLayerManager { super.context, super.controller, { this.isReplayMode = false, - this.replayTimestamp = 0, //1751918230855, + this.replayTimestamp = 0, //1756300288424, }) { if (isReplayMode) { GlobalProviders.data.setReplayMode(true, replayTimestamp); @@ -951,6 +951,9 @@ class _MonitorMapLayerSheetState extends State { localIntensity = intensityFloatToInt(info.i); localArrivalTime = (data.info.time + sWaveTimeByDistance(data.info.depth, info.dist)).floor(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _updateCountdown(); + }); _timer ??= Timer.periodic(const Duration(seconds: 1), (_) => _updateCountdown()); if (_isCollapsed) { diff --git a/lib/core/eew.dart b/lib/core/eew.dart index 5f7e617ba..9b6057631 100644 --- a/lib/core/eew.dart +++ b/lib/core/eew.dart @@ -232,7 +232,7 @@ WaveTime calculateWaveTime(double depth, double distance) { double userLat, double userLon, ) { - final distSurface = LatLng(eqLat, eqLng).to(LatLng(userLat, userLon)); + final distSurface = LatLng(eqLat, eqLng).to(LatLng(userLat, userLon)) /1000; final dist = sqrt(pow(distSurface, 2) + pow(depth, 2)); final pga = 1.657 * exp(1.533 * mag) * pow(dist, -1.607); var intensity = pgaToFloat(pga); From 5c246a8f3019eff607327b8c12c87fc47d1f6afa Mon Sep 17 00:00:00 2001 From: Lingling Date: Sun, 31 Aug 2025 08:23:13 +0800 Subject: [PATCH 49/59] Flutter 3.35 (#391) * Flutter 3.35 * pubspec * pubspec * Update pubspec.lock * Revert "pubspec" This reverts commit a0bf85dc079ceed5114730f8d1ea48d91e966ec2. * pubspec * pubspec * build: Sdk 36 --- README.md | 8 ++++---- android/app/build.gradle | 2 +- ios/Podfile.lock | 2 +- macos/Flutter/GeneratedPluginRegistrant.swift | 4 ---- pubspec.lock | 12 ++++++------ pubspec.yaml | 3 ++- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 2b11f6c9a..0b021362e 100644 --- a/README.md +++ b/README.md @@ -86,10 +86,10 @@ DPIP 支援多語言,我們正在 Crowdin 平台上進行翻譯。如果你願 - _\*可選\*_ [**Git**](https://git-scm.com/): 用於複製存儲庫 ```console -Flutter 3.33.0-0.2.pre • channel beta • https://github.com/flutter/flutter.git -Framework • revision 1db45f7408 • 2025-05-29 10:05:06 -0700 -Engine • revision 308a517184 • 2025-05-23 15:32:17 -0700 -Tools • Dart 3.9.0 (build 3.9.0-100.2.beta) • DevTools 2.46.0 +Flutter 3.35.1 • channel stable • https://github.com/flutter/flutter.git +Framework • revision 20f8274939 • 2025-08-14 10:53:09 -0700 +Engine • hash 6cd51c08a88e7bbe848a762c20ad3ecb8b063c0e • 2025-08-13 23:35:25.000Z +Tools • Dart 3.9.0 • DevTools 2.48.0 ``` ### 建置步驟 diff --git a/android/app/build.gradle b/android/app/build.gradle index dafb2da7a..880419fc0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -48,7 +48,7 @@ android { defaultConfig { applicationId "com.exptech.dpip" minSdkVersion 26 - targetSdkVersion 35 + targetSdkVersion 36 versionCode 300100001 versionName flutterVersionName multiDexEnabled true diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ba7d51999..dc2e37211 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -221,7 +221,7 @@ SPEC CHECKSUMS: FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09 - Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 flutter_icmp_ping: 2b159955eee0c487c766ad83fec224ae35e7c935 fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f gal: 6a522c75909f1244732d4596d11d6a2f86ff37a5 diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 4c19660fa..af8a49964 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -10,10 +10,8 @@ import awesome_notifications_core import device_info_plus import dynamic_system_colors import firebase_core -import firebase_crashlytics import firebase_messaging import gal -import geolocator_apple import in_app_purchase_storekit import package_info_plus import path_provider_foundation @@ -28,10 +26,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) - FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin")) - GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 8a44d7553..17e541ee0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1396,10 +1396,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" timezone: dependency: "direct main" description: @@ -1500,10 +1500,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: @@ -1593,5 +1593,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0 <4.0.0" - flutter: ">=3.31.0-0.0.pre" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.35.1" diff --git a/pubspec.yaml b/pubspec.yaml index 8a2804ef2..a835446d7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,8 @@ publish_to: 'none' version: 3.1.0 environment: - sdk: '>=3.7.0 <4.0.0' + sdk: '>=3.8.0 <4.0.0' + flutter: '>=3.35.1' dependencies: autostarter: 0.0.2 From 617cebb7d02c2011b3fc1dc40bc191121010014b Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sun, 31 Aug 2025 19:38:49 +0800 Subject: [PATCH 50/59] New Crowdin updates (#396) * New translations strings.pot (Korean) * New translations strings.pot (English) * New translations strings.pot (English) --- assets/translations/en.po | 12 ++++++------ assets/translations/ko.po | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index bf2686743..c05684ca0 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: English\n" "Language: en_US\n" -"PO-Revision-Date: 2025-08-16 08:56\n" +"PO-Revision-Date: 2025-08-31 06:51\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" @@ -691,11 +691,11 @@ msgstr "Location not set" #: ./lib/app/map/_lib/managers/monitor.dart:1086 msgid "第 {serial} 報" -msgstr "{serial} report" +msgstr "of {serial}" #: ./lib/app/map/_lib/managers/monitor.dart:1100 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" -msgstr "At around {time}, a felt earthquake near {location} had an estimated magnitude of M{magnitude} and a max intensity of {intensity}." +msgstr "Around {time}, felt earthquake near {location} estimated M{magnitude} and max intensity {intensity}." #: ./lib/app/map/_lib/managers/monitor.dart:926 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" @@ -703,11 +703,11 @@ msgstr "" #: ./lib/app/map/_lib/managers/monitor.dart:1134 msgid "所在地預估" -msgstr "Estimated intensity at current location" +msgstr "Estimated" #: ./lib/app/map/_lib/managers/monitor.dart:1168 msgid "震波" -msgstr "The earthquake" +msgstr "Waves" #: ./lib/app/map/_lib/managers/monitor.dart:1188 msgid " 秒" @@ -931,7 +931,7 @@ msgstr "Estimated M{magnitude}, max intensity {intensity} Date: Mon, 1 Sep 2025 11:04:02 +0800 Subject: [PATCH 51/59] fix: text size (#397) * fix: text size * fix: text * fix: size --- lib/app/home/_widgets/eew_card.dart | 3 ++- lib/app/map/_lib/managers/monitor.dart | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/app/home/_widgets/eew_card.dart b/lib/app/home/_widgets/eew_card.dart index d515d1f3f..138299d40 100644 --- a/lib/app/home/_widgets/eew_card.dart +++ b/lib/app/home/_widgets/eew_card.dart @@ -100,7 +100,7 @@ class _EewCardState extends State { children: [ Icon(Symbols.crisis_alert_rounded, color: context.colors.onError, weight: 700, size: 22), Text( - '緊急地震速報'.i18n, + 'EEW'.i18n, style: context.textTheme.labelLarge!.copyWith( color: context.colors.onError, fontWeight: FontWeight.bold, @@ -233,6 +233,7 @@ class _EewCardState extends State { : Text( '抵達'.i18n, style: context.textTheme.displayMedium!.copyWith( + fontSize: context.textTheme.displayMedium!.fontSize! * 0.92, fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, height: 1, diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 5c824393f..b3357352e 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -899,7 +899,7 @@ class _MonitorMapLayerSheetState extends State { size: 22, ), Text( - '緊急地震速報'.i18n, + 'EEW'.i18n, style: context.textTheme.labelLarge!.copyWith( color: context.colors.onError, fontWeight: FontWeight.bold, @@ -1076,7 +1076,7 @@ class _MonitorMapLayerSheetState extends State { size: 22, ), Text( - '緊急地震速報'.i18n, + 'EEW'.i18n, style: context.textTheme.labelLarge!.copyWith( color: context.colors.onError, fontWeight: FontWeight.bold, @@ -1206,6 +1206,7 @@ class _MonitorMapLayerSheetState extends State { : Text( '抵達'.i18n, style: context.textTheme.displayMedium!.copyWith( + fontSize: context.textTheme.displayMedium!.fontSize! * 0.81, fontWeight: FontWeight.bold, color: context.colors.onErrorContainer, height: 1, From afa923d862b933c24712828da6bed4b0459d5915 Mon Sep 17 00:00:00 2001 From: lowrt Date: Mon, 1 Sep 2025 11:10:07 +0800 Subject: [PATCH 52/59] Update strings.pot --- .crowdin/strings.pot | 70 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/.crowdin/strings.pot b/.crowdin/strings.pot index 3d66edba2..a0d88da51 100644 --- a/.crowdin/strings.pot +++ b/.crowdin/strings.pot @@ -2,6 +2,10 @@ msgid "所在地" msgstr "" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "" @@ -22,7 +26,7 @@ msgstr "" msgid "通知" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "" @@ -34,7 +38,7 @@ msgstr "" msgid "地震報告" msgstr "" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "" @@ -42,11 +46,11 @@ msgstr "" msgid "雷雨即時訊息" msgstr "" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "" @@ -66,11 +70,11 @@ msgstr "" msgid "設定" msgstr "" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "" @@ -78,23 +82,23 @@ msgstr "" msgid "接收類別" msgstr "" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "" @@ -110,11 +114,11 @@ msgstr "" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "" @@ -122,7 +126,7 @@ msgstr "" msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "" @@ -130,7 +134,7 @@ msgstr "" msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "" @@ -566,10 +570,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "" @@ -598,8 +598,8 @@ msgstr "" msgid "風向/風速" msgstr "" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" msgstr "" #: ./lib/app/settings/map/page.dart:57 @@ -682,11 +682,15 @@ msgstr "" msgid "尚未設定所在地" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" @@ -698,19 +702,19 @@ msgid "" "M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "" @@ -828,10 +832,6 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "" @@ -856,7 +856,7 @@ msgstr "" msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "" @@ -924,15 +924,15 @@ msgstr "" msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "" From bb88211c2291053026f74d07a6c3ed513d4d071b Mon Sep 17 00:00:00 2001 From: lowrt Date: Mon, 1 Sep 2025 11:43:31 +0800 Subject: [PATCH 53/59] Update zh-Hant.po --- assets/translations/zh-Hant.po | 72 +++++++++++++++++----------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/assets/translations/zh-Hant.po b/assets/translations/zh-Hant.po index 0b900a8d1..e222f1ca7 100644 --- a/assets/translations/zh-Hant.po +++ b/assets/translations/zh-Hant.po @@ -15,6 +15,10 @@ msgstr "" msgid "所在地" msgstr "所在地" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "新增地點" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "主題" @@ -35,7 +39,7 @@ msgstr "地圖" msgid "通知" msgstr "通知" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "緊急地震速報" @@ -47,7 +51,7 @@ msgstr "強震監視器" msgid "地震報告" msgstr "地震報告" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "震度速報" @@ -55,11 +59,11 @@ msgstr "震度速報" msgid "雷雨即時訊息" msgstr "雷雨即時訊息" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "天氣警特報" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "防災資訊" @@ -79,11 +83,11 @@ msgstr "贊助我們" msgid "設定" msgstr "設定" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "接收全部" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "關閉" @@ -91,23 +95,23 @@ msgstr "關閉" msgid "接收類別" msgstr "接收類別" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "所在地震度1以上" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "海嘯消息、海嘯警報" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "只接收海嘯警報" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "接收所在地" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "所在地震度4以上" @@ -123,11 +127,11 @@ msgstr "發送公告時" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "請先設定所在地來使用通知功能" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "地震速報" @@ -135,7 +139,7 @@ msgstr "地震速報" msgid "地震" msgstr "地震" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "天氣" @@ -143,7 +147,7 @@ msgstr "天氣" msgid "海嘯" msgstr "海嘯" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "其他" @@ -595,10 +599,6 @@ msgstr "省電策略已被拒絕,請移至設定允許權限。" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "設定所在地時發生錯誤,請稍候再試一次。" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "新增地點" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "縣市" @@ -627,9 +627,9 @@ msgstr "降水" msgid "風向/風速" msgstr "風向/風速" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" -msgstr "線條" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "簡單" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" @@ -711,11 +711,15 @@ msgstr "體感約 {apparent}°" msgid "尚未設定所在地" msgstr "尚未設定所在地" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "EEW" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "第 {serial} 報" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、所在地最大震度{intensity}。" @@ -731,19 +735,19 @@ msgstr "" "{time} 左右,{location}附近發生有感地震,預估規模 " "M{magnitude}、深度{depth}公里。" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "所在地預估" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "震波" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr " 秒" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "抵達" @@ -863,10 +867,6 @@ msgstr "地圖圖層" msgid "選擇要顯示的地圖圖層" msgstr "選擇要顯示的地圖圖層" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "簡單" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "報告" @@ -891,7 +891,7 @@ msgstr "目前時間" msgid "播放起點" msgstr "播放起點" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "播放進度" @@ -959,15 +959,15 @@ msgstr "目前沒有生效中的地震速報" msgid "規模 M{magnitude},深度{depth}公里" msgstr "規模 M{magnitude},深度{depth}公里" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "規模 M{magnitude},所在地預估{intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "{countdown}秒後抵達" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "已抵達" From 2ea25b0b38634fc6bdd0f07e13f408fe849adce9 Mon Sep 17 00:00:00 2001 From: Lingling Date: Tue, 2 Sep 2025 16:10:30 +0800 Subject: [PATCH 54/59] rm: autostarter (#399) --- lib/app/settings/location/page.dart | 11 +++++------ lib/app/welcome/4-permissions/page.dart | 25 ++++++++++++------------- pubspec.lock | 16 ---------------- pubspec.yaml | 1 - 4 files changed, 17 insertions(+), 36 deletions(-) diff --git a/lib/app/settings/location/page.dart b/lib/app/settings/location/page.dart index dd2476c6b..01e9a48ae 100644 --- a/lib/app/settings/location/page.dart +++ b/lib/app/settings/location/page.dart @@ -6,7 +6,6 @@ import 'package:dpip/utils/toast.dart'; import 'package:dpip/widgets/ui/loading_icon.dart'; import 'package:flutter/material.dart'; -import 'package:autostarter/autostarter.dart'; import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:go_router/go_router.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; @@ -51,7 +50,7 @@ class _SettingsLocationPageState extends State with Widget Permission.notification.status, Permission.location.status, Permission.locationAlways.status, - if (Platform.isAndroid) Autostarter.checkAutoStartState(), + // if (Platform.isAndroid) Autostarter.checkAutoStartState(), if (Platform.isAndroid) DisableBatteryOptimization.isBatteryOptimizationDisabled, ]); @@ -150,8 +149,8 @@ class _SettingsLocationPageState extends State with Widget autoStart: { - final available = await Autostarter.isAutoStartPermissionAvailable(); - if (available == null) break autoStart; + // final available = await Autostarter.isAutoStartPermissionAvailable(); + // if (available == null) break autoStart; final status = await DisableBatteryOptimization.isAutoStartEnabled; if (status == null || status) { @@ -308,7 +307,7 @@ class _SettingsLocationPageState extends State with Widget ); }, ), - if (Platform.isAndroid) + /* if (Platform.isAndroid) Selector( selector: (context, model) => model.auto, builder: (context, auto, child) { @@ -333,7 +332,7 @@ class _SettingsLocationPageState extends State with Widget ), ); }, - ), + ),*/ if (Platform.isAndroid) Selector( selector: (context, model) => model.auto, diff --git a/lib/app/welcome/4-permissions/page.dart b/lib/app/welcome/4-permissions/page.dart index 322447162..8491b8212 100644 --- a/lib/app/welcome/4-permissions/page.dart +++ b/lib/app/welcome/4-permissions/page.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:autostarter/autostarter.dart'; import 'package:awesome_notifications/awesome_notifications.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:dpip/app/home/page.dart'; @@ -56,19 +55,19 @@ class _WelcomePermissionPageState extends State with Widg super.initState(); WidgetsBinding.instance.addObserver(this); _permissionsFuture = _initializePermissions(); - if (Platform.isAndroid) { - _autoStartStatusCheck(); - } + // if (Platform.isAndroid) { + // _autoStartStatusCheck(); + // } WidgetsBinding.instance.addPostFrameCallback((_) async { await _checkNotificationPermission(); setState(() {}); }); } - Future _autoStartStatusCheck() async { - _autoStartStatus = await Autostarter.checkAutoStartState() ?? true; - _autoStartPermission = Future.value(_autoStartStatus); - } + // Future _autoStartStatusCheck() async { + // _autoStartStatus = await Autostarter.checkAutoStartState() ?? true; + // _autoStartPermission = Future.value(_autoStartStatus); + // } Future _checkNotificationPermission() async { if (Platform.isAndroid) { @@ -88,12 +87,12 @@ class _WelcomePermissionPageState extends State with Widg @override void didChangeAppLifecycleState(AppLifecycleState state) { if (state == AppLifecycleState.resumed) { - setState(() async { + setState(() { _permissionsFuture = _initializePermissions(); - if (Platform.isAndroid) { - _autoStartStatus = (await Autostarter.checkAutoStartState())!; - _autoStartPermission = Future.value(_autoStartStatus); - } + // if (Platform.isAndroid) { + // _autoStartStatus = (await Autostarter.checkAutoStartState())!; + // _autoStartPermission = Future.value(_autoStartStatus); + // } }); } } diff --git a/pubspec.lock b/pubspec.lock index 17e541ee0..ad8d81e62 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -57,14 +57,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.0" - autostarter: - dependency: "direct main" - description: - name: autostarter - sha256: "7aac4cbf4fba208eefbcd5046e716b3c86387da82b319b4fc7cb8db0c7153ec3" - url: "https://pub.dev" - source: hosted - version: "0.0.2" awesome_notifications: dependency: "direct main" description: @@ -1051,14 +1043,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - permission_handler_windows: - dependency: transitive - description: - name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" - source: hosted - version: "0.2.1" petitparser: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a835446d7..750ecde9b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,6 @@ environment: flutter: '>=3.35.1' dependencies: - autostarter: 0.0.2 awesome_notifications: 0.10.1 awesome_notifications_core: 0.10.1 awesome_notifications_fcm: 0.10.1 From 2a7548f6b658b9e9b558b78a8dccc92e28fd2cec Mon Sep 17 00:00:00 2001 From: Kamiya Date: Tue, 2 Sep 2025 16:14:04 +0800 Subject: [PATCH 55/59] New Crowdin updates (#398) * New translations strings.pot (English) * New translations strings.pot (Korean) * New translations strings.pot (Japanese) * New translations strings.pot (Russian) * New translations strings.pot (Chinese Simplified) * New translations strings.pot (Vietnamese) * New translations strings.pot (English) --- assets/translations/en.po | 80 +++++++++++++++++----------------- assets/translations/ja.po | 74 +++++++++++++++---------------- assets/translations/ko.po | 74 +++++++++++++++---------------- assets/translations/ru.po | 72 +++++++++++++++--------------- assets/translations/vi.po | 72 +++++++++++++++--------------- assets/translations/zh-Hans.po | 74 +++++++++++++++---------------- 6 files changed, 223 insertions(+), 223 deletions(-) diff --git a/assets/translations/en.po b/assets/translations/en.po index c05684ca0..b4ec4ef30 100644 --- a/assets/translations/en.po +++ b/assets/translations/en.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: English\n" "Language: en_US\n" -"PO-Revision-Date: 2025-08-31 06:51\n" +"PO-Revision-Date: 2025-09-01 04:13\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Current Location" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "Add a new location" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "Theme" @@ -36,7 +40,7 @@ msgstr "Map" msgid "通知" msgstr "Notifications" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "Earthquake Early Warning" @@ -48,7 +52,7 @@ msgstr "Earthquake Monitor" msgid "地震報告" msgstr "Reports" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "Earthquake Intensity Report" @@ -56,11 +60,11 @@ msgstr "Earthquake Intensity Report" msgid "雷雨即時訊息" msgstr "Thunderstorm Advisory" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "Weather Advisory" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "Emergency information" @@ -80,11 +84,11 @@ msgstr "Support Us" msgid "設定" msgstr "Settings" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "Receive All" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "Off" @@ -92,23 +96,23 @@ msgstr "Off" msgid "接收類別" msgstr "Category" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "Intensity 1 or higher at current location" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "Tsunami information, Tsunami warning" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "Tsunami warning only" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "Receive for current location" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "Intensity 4 or higher at current location" @@ -124,11 +128,11 @@ msgstr "When sending an announcement" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "Please set your current location to enable notifications" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "Earthquake Warning" @@ -136,7 +140,7 @@ msgstr "Earthquake Warning" msgid "地震" msgstr "Earthquake" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "Weather" @@ -144,7 +148,7 @@ msgstr "Weather" msgid "海嘯" msgstr "Tsunami" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "Other" @@ -154,7 +158,7 @@ msgstr "Severe" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:33 msgid "海嘯警報發布時" -msgstr "" +msgstr "When a tsunami warning is issued" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:39 msgid "一般" @@ -162,7 +166,7 @@ msgstr "General" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:34 msgid "海嘯消息發布時" -msgstr "" +msgstr "When a tsunami message is issued" #: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:35 msgid "太平洋海嘯消息(無聲通知)" @@ -293,11 +297,11 @@ msgstr "The location (township) where the above-mentioned exceptions are issued\ #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:35 msgid "所在地(鄉鎮)發布山區暴雨時" -msgstr "" +msgstr "The location (township) issues rainstorm alert in the mountains" #: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:40 msgid "所在地(鄉鎮)發布雷雨即時訊息時" -msgstr "" +msgstr "The location (township) issues instant thunderstorm information" #: ./lib/app/settings/unit/page.dart:28 msgid "使用華氏度" @@ -573,10 +577,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "Add a new location" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "Special Municipalities/County" @@ -605,8 +605,8 @@ msgstr "Precipitation" msgid "風向/風速" msgstr "Wind/Gust" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" msgstr "Simple" #: ./lib/app/settings/map/page.dart:57 @@ -689,11 +689,15 @@ msgstr "Apparent {apparent}°" msgid "尚未設定所在地" msgstr "Location not set" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "of {serial}" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "Around {time}, felt earthquake near {location} estimated M{magnitude} and max intensity {intensity}." @@ -701,19 +705,19 @@ msgstr "Around {time}, felt earthquake near {location} estimated {location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "Estimated" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "Waves" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr " Seconds" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "Arrived" @@ -829,10 +833,6 @@ msgstr "Map Layers" msgid "選擇要顯示的地圖圖層" msgstr "Select the layer you want to display" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "Simple" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "Reports" @@ -857,7 +857,7 @@ msgstr "Current time" msgid "播放起點" msgstr "Play start" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "" @@ -925,15 +925,15 @@ msgstr "There are currently no active earthquake early warnings" msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "Estimated M{magnitude}, max intensity {intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "in {countdown}s" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "Arrived" diff --git a/assets/translations/ja.po b/assets/translations/ja.po index 815640b9f..17dfebdad 100644 --- a/assets/translations/ja.po +++ b/assets/translations/ja.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Japanese\n" "Language: ja_JP\n" -"PO-Revision-Date: 2025-08-15 04:19\n" +"PO-Revision-Date: 2025-09-01 03:15\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "現在地" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "新しい場所を追加" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "テーマ" @@ -36,7 +40,7 @@ msgstr "地図" msgid "通知" msgstr "通知" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "緊急地震速報" @@ -48,7 +52,7 @@ msgstr "強震モニター" msgid "地震報告" msgstr "地震情報" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "地震速報" @@ -56,11 +60,11 @@ msgstr "地震速報" msgid "雷雨即時訊息" msgstr "雷雨注意情報" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "天気警報" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "防災インフォメーション" @@ -80,11 +84,11 @@ msgstr "応援する" msgid "設定" msgstr "設定" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "すべて受信" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "オフ" @@ -92,23 +96,23 @@ msgstr "オフ" msgid "接收類別" msgstr "受信カテゴリ" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "現在地震度 1 以上で受信" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "津波警報・情報" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "津波警報のみ受信" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "現地のみ受信" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "現在地震度 4 以上で受信" @@ -124,11 +128,11 @@ msgstr "通知受信時" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "サウンドテストはこのデバイス上でのみ実行されるテストです、通知受信時にデバイスが効果音を正常に再生できるかどうかを確認するためにのみ使用されます" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "通知機能を使用する為に現在地を設定してください" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "地震速報" @@ -136,7 +140,7 @@ msgstr "地震速報" msgid "地震" msgstr "地震" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "天気" @@ -144,7 +148,7 @@ msgstr "天気" msgid "海嘯" msgstr "津波" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "その他" @@ -575,10 +579,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "新しい場所を追加" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "県/市" @@ -607,9 +607,9 @@ msgstr "降水量" msgid "風向/風速" msgstr "風向・風速" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" -msgstr "線" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "シンプル" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" @@ -691,11 +691,15 @@ msgstr "体感温度 {apparent}°" msgid "尚未設定所在地" msgstr "現在地が設定されていません" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "第{serial}報" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、最大震度{intensity}。" @@ -703,19 +707,19 @@ msgstr "{time}ごろ、{location}付近で地震。推定M{ma msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "{time}ごろ、{location}付近で地震。推定M{magnitude}、深さ{depth}キロメートル。" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "現在地の予想" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "地震波" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr " 秒" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "到達" @@ -831,10 +835,6 @@ msgstr "地図レイヤー" msgid "選擇要顯示的地圖圖層" msgstr "表示する地図のレイヤーを選択してください" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "シンプル" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "地震情報" @@ -859,7 +859,7 @@ msgstr "表示中の時刻" msgid "播放起點" msgstr "再生の起点" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "再生中" @@ -927,15 +927,15 @@ msgstr "緊急地震速報は発表されていません" msgid "規模 M{magnitude},深度{depth}公里" msgstr "M{magnitude}、深さ{depth}キロメートル" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "M{magnitude}、最大震度{intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "到達まであと{countdown}秒" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "到達し" diff --git a/assets/translations/ko.po b/assets/translations/ko.po index e1915ea49..11d13b4b3 100644 --- a/assets/translations/ko.po +++ b/assets/translations/ko.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Korean\n" "Language: ko_KR\n" -"PO-Revision-Date: 2025-08-30 12:00\n" +"PO-Revision-Date: 2025-09-01 03:15\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "현재 지역" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "주제" @@ -36,7 +40,7 @@ msgstr "지도" msgid "通知" msgstr "알림" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "긴급 지진 속보" @@ -48,7 +52,7 @@ msgstr "강진 모니터" msgid "地震報告" msgstr "지진 보고" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "진도 속보" @@ -56,11 +60,11 @@ msgstr "진도 속보" msgid "雷雨即時訊息" msgstr "실시간 뇌우 정보" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "기상특보" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "방재 정보" @@ -80,11 +84,11 @@ msgstr "저희를 후원해주세요" msgid "設定" msgstr "설정" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "모두 수신" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "닫기" @@ -92,23 +96,23 @@ msgstr "닫기" msgid "接收類別" msgstr "수신 카테고리" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "현재 위치 진도 1 이상" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "해일 정보, 해일 경보" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "해일 경보만 수신" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "현재 위치 수신" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "현재 위치 진도 4 이상" @@ -124,11 +128,11 @@ msgstr "공지 발송 시" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "사운드 테스트는 기기에서 수행되는 로컬 알림입니다. 기기가 알림을 수신했을 때 음향 효과를 정상적으로 재생할 수 있는지 확인하는 데만 사용됩니다. 이 테스트는 요청을 서버에 전송하지 않습니다" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "알림 기능을 사용하시려면 먼저 위치를 설정해 주세요" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "지진 속보" @@ -136,7 +140,7 @@ msgstr "지진 속보" msgid "地震" msgstr "지진" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "날씨" @@ -144,7 +148,7 @@ msgstr "날씨" msgid "海嘯" msgstr "해일" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "기타" @@ -571,10 +575,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "현/시" @@ -603,9 +603,9 @@ msgstr "강우" msgid "風向/風速" msgstr "풍향/풍속" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" -msgstr "선" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" @@ -687,11 +687,15 @@ msgstr "체감 온도 {apparent}" msgid "尚未設定所在地" msgstr "현재 위치가 설정되지 않았습니다" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "제 {serial} 보" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 규모 M{magnitude}, 현재 위치 최대 진도 {intensity}." @@ -699,19 +703,19 @@ msgstr "{time}경, {location} 부근 체감 지진 발생. 예상 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "현재 위치 예상" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "지진파" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr " 초" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "도착" @@ -827,10 +831,6 @@ msgstr "지도 레이어" msgid "選擇要顯示的地圖圖層" msgstr "표시 지도 레이더 선택" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "" @@ -855,7 +855,7 @@ msgstr "현재 시간" msgid "播放起點" msgstr "재생 시작 지점" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "재생 진행도" @@ -923,15 +923,15 @@ msgstr "현재 유효 지진 속보 없음" msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "규모 M{magnitude}, 현재 위치 예상 진도 {intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "{countdown}초 후 도착" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "도착" diff --git a/assets/translations/ru.po b/assets/translations/ru.po index 966d49ce3..6f61915ca 100644 --- a/assets/translations/ru.po +++ b/assets/translations/ru.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Russian\n" "Language: ru_RU\n" -"PO-Revision-Date: 2025-08-15 01:20\n" +"PO-Revision-Date: 2025-09-01 03:16\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "" @@ -36,7 +40,7 @@ msgstr "" msgid "通知" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "" @@ -48,7 +52,7 @@ msgstr "" msgid "地震報告" msgstr "" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "" @@ -56,11 +60,11 @@ msgstr "" msgid "雷雨即時訊息" msgstr "" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "" @@ -80,11 +84,11 @@ msgstr "" msgid "設定" msgstr "" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "" @@ -92,23 +96,23 @@ msgstr "" msgid "接收類別" msgstr "" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "" @@ -124,11 +128,11 @@ msgstr "" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "" @@ -136,7 +140,7 @@ msgstr "" msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "" @@ -144,7 +148,7 @@ msgstr "" msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "" @@ -570,10 +574,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "" @@ -602,8 +602,8 @@ msgstr "" msgid "風向/風速" msgstr "" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" msgstr "" #: ./lib/app/settings/map/page.dart:57 @@ -686,11 +686,15 @@ msgstr "" msgid "尚未設定所在地" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" @@ -698,19 +702,19 @@ msgstr "" msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "" @@ -826,10 +830,6 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "" @@ -854,7 +854,7 @@ msgstr "" msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "" @@ -922,15 +922,15 @@ msgstr "" msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "" diff --git a/assets/translations/vi.po b/assets/translations/vi.po index 783ea1632..ad1a067f7 100644 --- a/assets/translations/vi.po +++ b/assets/translations/vi.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" -"PO-Revision-Date: 2025-08-15 01:20\n" +"PO-Revision-Date: 2025-09-01 03:16\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "Vị Trí Hiện Tại" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "" @@ -36,7 +40,7 @@ msgstr "Bản đồ" msgid "通知" msgstr "Thông báo đẩy" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "Cảnh báo động đất sớm" @@ -48,7 +52,7 @@ msgstr "giám sát động đất" msgid "地震報告" msgstr "Báo cáo động đất" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "Cảnh báo nhanh về cường độ địa chấn" @@ -56,11 +60,11 @@ msgstr "Cảnh báo nhanh về cường độ địa chấn" msgid "雷雨即時訊息" msgstr "Thông báo giông sét" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "Cảnh báo thời tiết" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "" @@ -80,11 +84,11 @@ msgstr "quyên tặng" msgid "設定" msgstr "Cài đặt" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "" @@ -92,23 +96,23 @@ msgstr "" msgid "接收類別" msgstr "" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "Cường độ tại địa phương từ 1 trở lên" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "Cường độ tại địa phương từ 4 trở lên" @@ -124,11 +128,11 @@ msgstr "Khi gửi thông báo" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "Cảnh báo động đất sớm" @@ -136,7 +140,7 @@ msgstr "Cảnh báo động đất sớm" msgid "地震" msgstr "" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "" @@ -144,7 +148,7 @@ msgstr "" msgid "海嘯" msgstr "" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "Khác" @@ -573,10 +577,6 @@ msgstr "" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "Quận" @@ -605,8 +605,8 @@ msgstr "Lượng mưa" msgid "風向/風速" msgstr "Hướng gió/Tốc độ gió" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" msgstr "" #: ./lib/app/settings/map/page.dart:57 @@ -689,11 +689,15 @@ msgstr "" msgid "尚未設定所在地" msgstr "Bạn chưa thiết lập vị trí của mình" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "" @@ -701,19 +705,19 @@ msgstr "" msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "" @@ -829,10 +833,6 @@ msgstr "" msgid "選擇要顯示的地圖圖層" msgstr "" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "" @@ -857,7 +857,7 @@ msgstr "" msgid "播放起點" msgstr "" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "" @@ -925,15 +925,15 @@ msgstr "" msgid "規模 M{magnitude},深度{depth}公里" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "" diff --git a/assets/translations/zh-Hans.po b/assets/translations/zh-Hans.po index ba8bc614c..0dbb5675b 100644 --- a/assets/translations/zh-Hans.po +++ b/assets/translations/zh-Hans.po @@ -10,12 +10,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2025-08-15 04:19\n" +"PO-Revision-Date: 2025-09-01 03:16\n" #: ./lib/app/settings/location/page.dart:372 msgid "所在地" msgstr "所在地" +#: ./lib/app/settings/location/page.dart:421 +msgid "新增地點" +msgstr "新增地点" + #: ./lib/app/settings/page.dart:52 msgid "主題" msgstr "主题" @@ -36,7 +40,7 @@ msgstr "地图" msgid "通知" msgstr "通知" -#: ./lib/app/map/_lib/managers/monitor.dart:1076 +#: ./lib/app/settings/notify/page.dart:148 msgid "緊急地震速報" msgstr "紧急地震预警" @@ -48,7 +52,7 @@ msgstr "强震监视器" msgid "地震報告" msgstr "地震报告" -#: ./lib/app/settings/notify/page.dart:191 +#: ./lib/app/settings/notify/page.dart:192 msgid "震度速報" msgstr "震度速报" @@ -56,11 +60,11 @@ msgstr "震度速报" msgid "雷雨即時訊息" msgstr "雷雨即时信息" -#: ./lib/app/settings/notify/page.dart:222 +#: ./lib/app/settings/notify/page.dart:223 msgid "天氣警特報" msgstr "天气警特报" -#: ./lib/app/settings/notify/page.dart:235 +#: ./lib/app/settings/notify/page.dart:236 msgid "防災資訊" msgstr "防灾资讯" @@ -80,11 +84,11 @@ msgstr "赞助我们" msgid "設定" msgstr "设置" -#: ./lib/app/settings/notify/page.dart:60 +#: ./lib/app/settings/notify/page.dart:61 msgid "接收全部" msgstr "接收全部" -#: ./lib/app/settings/notify/page.dart:59 +#: ./lib/app/settings/notify/page.dart:60 msgid "關閉" msgstr "关闭" @@ -92,23 +96,23 @@ msgstr "关闭" msgid "接收類別" msgstr "接收类别" -#: ./lib/app/settings/notify/page.dart:44 +#: ./lib/app/settings/notify/page.dart:45 msgid "所在地震度1以上" msgstr "所在地震度1以上" -#: ./lib/app/settings/notify/page.dart:55 +#: ./lib/app/settings/notify/page.dart:56 msgid "海嘯消息、海嘯警報" msgstr "海啸信息、海啸警报" -#: ./lib/app/settings/notify/page.dart:54 +#: ./lib/app/settings/notify/page.dart:55 msgid "只接收海嘯警報" msgstr "只接收海啸警报" -#: ./lib/app/settings/notify/page.dart:50 +#: ./lib/app/settings/notify/page.dart:51 msgid "接收所在地" msgstr "接收所在地" -#: ./lib/app/settings/notify/page.dart:37 +#: ./lib/app/settings/notify/page.dart:38 msgid "所在地震度4以上" msgstr "所在地震度4以上" @@ -124,11 +128,11 @@ msgstr "发送公告时" msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求" msgstr "音效测试是在设备上执行的本地通知,仅用于确认设备在接收通知时是否能正常播放音效。此测试不会向服务器发送任何请求" -#: ./lib/app/settings/notify/page.dart:134 +#: ./lib/app/settings/notify/page.dart:135 msgid "請先設定所在地來使用通知功能" msgstr "请先设置所在地以使用通知功能" -#: ./lib/app/settings/notify/page.dart:141 +#: ./lib/app/settings/notify/page.dart:142 msgid "地震速報" msgstr "地震预警" @@ -136,7 +140,7 @@ msgstr "地震预警" msgid "地震" msgstr "地震" -#: ./lib/app/settings/notify/page.dart:203 +#: ./lib/app/settings/notify/page.dart:204 msgid "天氣" msgstr "天气" @@ -144,7 +148,7 @@ msgstr "天气" msgid "海嘯" msgstr "海啸" -#: ./lib/app/settings/notify/page.dart:265 +#: ./lib/app/settings/notify/page.dart:266 msgid "其他" msgstr "其他" @@ -576,10 +580,6 @@ msgstr "省电策略被拒绝,请前往设置允许权限。" msgid "設定所在地時發生錯誤,請稍候再試一次。" msgstr "设置所在地时发生错误,请稍后再试。" -#: ./lib/app/settings/location/page.dart:421 -msgid "新增地點" -msgstr "新增地点" - #: ./lib/app/settings/location/select/page.dart:38 msgid "縣市" msgstr "县市" @@ -608,9 +608,9 @@ msgstr "降水" msgid "風向/風速" msgstr "风向/风速" -#: ./lib/app/settings/map/page.dart:56 -msgid "線條" -msgstr "线条" +#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 +msgid "簡單" +msgstr "简单" #: ./lib/app/settings/map/page.dart:57 msgid "OpenStreetMap" @@ -692,11 +692,15 @@ msgstr "体感约 {apparent}°" msgid "尚未設定所在地" msgstr "尚未设定所在地" -#: ./lib/app/map/_lib/managers/monitor.dart:1086 +#: ./lib/app/map/_lib/managers/monitor.dart:1079 +msgid "EEW" +msgstr "" + +#: ./lib/app/map/_lib/managers/monitor.dart:1089 msgid "第 {serial} 報" msgstr "第 {serial} 报" -#: ./lib/app/map/_lib/managers/monitor.dart:1100 +#: ./lib/app/map/_lib/managers/monitor.dart:1103 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、所在地最大震度{intensity}。" msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、所在地最大震度{intensity}。" @@ -704,19 +708,19 @@ msgstr "{time} 左右,{location}附近发生有感地震,预计 msgid "{time} 左右,{location}附近發生有感地震,預估規模 M{magnitude}、深度{depth}公里。" msgstr "{time} 左右,{location}附近发生有感地震,预计规模 M{magnitude}、深度{depth}公里。" -#: ./lib/app/map/_lib/managers/monitor.dart:1134 +#: ./lib/app/map/_lib/managers/monitor.dart:1137 msgid "所在地預估" msgstr "所在地预估" -#: ./lib/app/map/_lib/managers/monitor.dart:1168 +#: ./lib/app/map/_lib/managers/monitor.dart:1171 msgid "震波" msgstr "震波" -#: ./lib/app/map/_lib/managers/monitor.dart:1188 +#: ./lib/app/map/_lib/managers/monitor.dart:1191 msgid " 秒" msgstr " 秒" -#: ./lib/app/map/_lib/managers/monitor.dart:1204 +#: ./lib/app/map/_lib/managers/monitor.dart:1207 msgid "抵達" msgstr "抵达" @@ -832,10 +836,6 @@ msgstr "地图图层" msgid "選擇要顯示的地圖圖層" msgstr "选择要显示的地图图层" -#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:112 -msgid "簡單" -msgstr "简单" - #: ./lib/app/map/_widgets/layer_toggle_sheet.dart:139 msgid "報告" msgstr "报告" @@ -860,7 +860,7 @@ msgstr "目前时间" msgid "播放起點" msgstr "播放起点" -#: ./lib/app/map/_lib/managers/radar.dart:945 +#: ./lib/app/map/_lib/managers/radar.dart:938 msgid "播放進度" msgstr "播放进度" @@ -928,15 +928,15 @@ msgstr "目前没有生效中的地震预警" msgid "規模 M{magnitude},深度{depth}公里" msgstr "规模 M{magnitude}、深度{depth}公里" -#: ./lib/app/map/_lib/managers/monitor.dart:1027 +#: ./lib/app/map/_lib/managers/monitor.dart:1030 msgid "規模 M{magnitude},所在地預估{intensity}" msgstr "规模 M{magnitude},所在地预估{intensity}" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "{countdown}秒後抵達" msgstr "{countdown}秒后抵达" -#: ./lib/app/map/_lib/managers/monitor.dart:1036 +#: ./lib/app/map/_lib/managers/monitor.dart:1039 msgid "已抵達" msgstr "已抵达" From a14a8261d89fbad0278938a2abe819f109d7ea17 Mon Sep 17 00:00:00 2001 From: lowrt Date: Tue, 2 Sep 2025 16:19:11 +0800 Subject: [PATCH 56/59] Build: 3.1.1 --- android/app/build.gradle | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 880419fc0..5f728a1ea 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 36 - versionCode 300100001 + versionCode 300100100 versionName flutterVersionName multiDexEnabled true } diff --git a/pubspec.yaml b/pubspec.yaml index 750ecde9b..ca28c51f0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: dpip description: "Disaster Prevention Information Platform" publish_to: 'none' -version: 3.1.0 +version: 3.1.1 environment: sdk: '>=3.8.0 <4.0.0' From 57c08cd5ef18756412e42b98dc4becc0ef4c683c Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sat, 13 Sep 2025 17:02:42 +0800 Subject: [PATCH 57/59] fix: update website url in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b021362e..b4c1203cb 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Crowdin Localization Greater Good GitHub License -website +website TREM Discord From db44ce3893747140c56e96af3fe7e99261014afc Mon Sep 17 00:00:00 2001 From: Kamiya Date: Sat, 13 Sep 2025 17:16:04 +0800 Subject: [PATCH 58/59] fix: city town with level (#402) * fix: city town with level * Build: 3.1.101 --------- Co-authored-by: lowrt --- android/app/build.gradle | 2 +- lib/models/data.dart | 4 ++-- lib/route/event_viewer/intensity.dart | 4 ++-- lib/route/event_viewer/thunderstorm.dart | 4 ++-- pubspec.yaml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 5f728a1ea..b332b9f2c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,7 +49,7 @@ android { applicationId "com.exptech.dpip" minSdkVersion 26 targetSdkVersion 36 - versionCode 300100100 + versionCode 300100101 versionName flutterVersionName multiDexEnabled true } diff --git a/lib/models/data.dart b/lib/models/data.dart index add02d777..a3ddfb663 100644 --- a/lib/models/data.dart +++ b/lib/models/data.dart @@ -320,8 +320,8 @@ class DpipDataModel extends _DpipDataModel { final location = Global.location['${s.info.last.code}']; if (location != null) { feature - ..setProperty('city', location.city) - ..setProperty('town', location.town); + ..setProperty('city', location.cityWithLevel) + ..setProperty('town', location.townWithLevel); } builder.addFeature(feature); diff --git a/lib/route/event_viewer/intensity.dart b/lib/route/event_viewer/intensity.dart index 7bd09e038..41b6df762 100644 --- a/lib/route/event_viewer/intensity.dart +++ b/lib/route/event_viewer/intensity.dart @@ -337,7 +337,7 @@ class _IntensityPageState extends State { } Widget _buildAffectedAreas() { - final grouped = groupBy(data.area.map((e) => Global.location[e.toString()]!), (e) => e.city); + final grouped = groupBy(data.area.map((e) => Global.location[e.toString()]!), (e) => e.cityWithLevel); final List areas = []; for (final MapEntry(key: city, value: locations) in grouped.entries) { @@ -365,7 +365,7 @@ class _IntensityPageState extends State { side: BorderSide(color: context.colors.outline), backgroundColor: context.colors.surfaceContainerHigh, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - label: Text(e.town), + label: Text(e.townWithLevel), ); }).toList(), ), diff --git a/lib/route/event_viewer/thunderstorm.dart b/lib/route/event_viewer/thunderstorm.dart index 65aefb3a1..d8c3de40c 100644 --- a/lib/route/event_viewer/thunderstorm.dart +++ b/lib/route/event_viewer/thunderstorm.dart @@ -395,7 +395,7 @@ class _ThunderstormPageState extends State { } Widget _buildAffectedAreas() { - final grouped = groupBy(widget.item.area.map((e) => Global.location[e.toString()]!), (e) => e.city); + final grouped = groupBy(widget.item.area.map((e) => Global.location[e.toString()]!), (e) => e.cityWithLevel); final List areas = []; for (final MapEntry(key: city, value: locations) in grouped.entries) { @@ -423,7 +423,7 @@ class _ThunderstormPageState extends State { side: BorderSide(color: context.colors.outline), backgroundColor: context.colors.surfaceContainerHigh, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - label: Text(e.town), + label: Text(e.townWithLevel), ); }).toList(), ), diff --git a/pubspec.yaml b/pubspec.yaml index ca28c51f0..12446987d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: dpip description: "Disaster Prevention Information Platform" publish_to: 'none' -version: 3.1.1 +version: 3.1.101 environment: sdk: '>=3.8.0 <4.0.0' From 667d0d25f569e10a97445e1936c3c8c0656feecc Mon Sep 17 00:00:00 2001 From: Lingling Date: Sun, 14 Sep 2025 07:48:21 +0800 Subject: [PATCH 59/59] ci: storage cache (#403) * Update android.yml * Update ios.yml --- .github/workflows/android.yml | 26 ++++++++++++++++++++------ .github/workflows/ios.yml | 23 +++++++++-------------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 699ab307f..4954ac06f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -41,22 +41,36 @@ jobs: with: path: ~/.pub-cache key: ubuntu-pub-${{ hashFiles('**/pubspec.lock') }} - restore-keys: | - ubuntu-pub- + restore-keys: ubuntu-pub- - name: Cache build_runner (Optional) uses: actions/cache@v3 with: path: .dart_tool/build - key: ubuntu-build-runner-${{ hashFiles('**/*.dart') }} - restore-keys: | - ubuntu-build-runner- + key: ubuntu-build-runner-${{ hashFiles('lib/api/model/**/*.dart') }} + restore-keys: ubuntu-build-runner- + + - name: Cache Gradle + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ubuntu-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: ubuntu-gradle- + + - name: Cache CMake + uses: actions/cache@v3 + with: + path: /usr/local/lib/android/sdk/cmake + key: ubuntu-android-cmake + restore-keys: ubuntu-android-cmake- - name: Install dependencies run: flutter pub get - name: Prebuild with build_runner - run: dart run build_runner build --delete-conflicting-outputs + run: dart run build_runner build - name: Build apk run: | diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 613ba3a1f..bbf64ee53 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -31,29 +31,24 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Switch Xcode - run: sudo xcode-select -s /Applications/Xcode_16.4.app + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.FLUTTER_VERSION }} - - name: Cache Flutter SDK + - name: Cache Pub Packages uses: actions/cache@v3 with: path: ~/.pub-cache key: macos-pub-${{ hashFiles('**/pubspec.lock') }} - restore-keys: | - macos-pub- - - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - flutter-version: ${{ env.FLUTTER_VERSION }} + restore-keys: macos-pub- - name: Cache build_runner (Optional) uses: actions/cache@v3 with: path: .dart_tool/build - key: macos-build-runner-${{ hashFiles('**/*.dart') }} - restore-keys: | - macos-build-runner- + key: macos-build-runner-${{ hashFiles('lib/api/model/**/*.dart') }} + restore-keys: macos-build-runner- - name: Cache CocoaPods Pods uses: actions/cache@v3 @@ -78,7 +73,7 @@ jobs: pod install - name: Prebuild with build_runner - run: dart run build_runner build --delete-conflicting-outputs + run: dart run build_runner build - name: Build iOS App and IPA run: |