tane/apps/app_seeds/lib/i18n/strings_ja.g.dart
vjrj fed0e8200e feat(sharing): make going online opt-in, and show what it unlocks
Tane dialled its four default relays at launch, before anyone had asked
for anything — an F-Droid reviewer spotted it, and they were right. The
seed book needs no network at all, so the app should not have one until
the person joins the sharing side.

- SocialSettings gains a three-state `sharingEnabled`. `null` means
  "never asked", which is what lets `migrateSharingEnabled` keep an
  existing install exactly as it was: anyone past the intro was on a
  build that connected at launch, so they keep messaging, device sync
  and offer alerts. A fresh install starts fully offline.
- bootstrap only starts the shared connection when sharing is on. The
  inbox/sync/plantaré/alert listeners are untouched: they react to a
  session, and none arrives.
- SharingSwitch is the single place that moves the stored choice, the
  live connection and the flag the UI listens to, so they cannot drift.
- Agreeing to the community rules is the opt-in — one consent surface,
  reached from the market or from the drawer's invitation.
- SocialConnection.start is now idempotent and gains stop(), so turning
  sharing off goes offline immediately instead of at the next launch.
- The social drawer entries stay visible but padlocked while sharing is
  off; tapping one explains what wakes up and offers to join. Hiding
  them would have kept the tool a secret. "Coming soon" is gone for
  good — everything it labelled is built.

Covered by tests for the migration in both directions, start/stop
lifecycle, the gate turning sharing on, the invitation, and the drawer
in all three states (no social layer / off / on).
2026-07-25 16:47:56 +02:00

173 lines
7 KiB
Dart

///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
// dart format off
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsJa extends Translations with BaseTranslations<AppLocale, Translations> {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsJa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ja,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ja>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsJa _root = this; // ignore: unused_field
@override
TranslationsJa $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsJa(meta: meta ?? this.$meta);
// Translations
@override late final _Translations$app$ja app = _Translations$app$ja._(_root);
@override late final _Translations$common$ja common = _Translations$common$ja._(_root);
@override late final _Translations$menu$ja menu = _Translations$menu$ja._(_root);
@override late final _Translations$settings$ja settings = _Translations$settings$ja._(_root);
@override late final _Translations$home$ja home = _Translations$home$ja._(_root);
}
// Path: app
class _Translations$app$ja extends Translations$app$en {
_Translations$app$ja._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get title => 'Tane';
}
// Path: common
class _Translations$common$ja extends Translations$common$en {
_Translations$common$ja._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get save => '保存';
@override String get cancel => 'キャンセル';
@override String get delete => '削除';
@override String get edit => '編集';
@override String get type => '種類';
@override String get offline => 'オフラインです — 共有を一時停止しています';
}
// Path: menu
class _Translations$menu$ja extends Translations$menu$en {
_Translations$menu$ja._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get tagline => 'あなたの種子バンク';
@override String get inventory => '在庫';
@override String get market => 'マーケット';
@override String get profile => 'プロフィール';
@override String get chat => 'チャット';
@override String get wishlist => 'お気に入り';
@override String get following => 'フォロー中';
@override String get calendar => 'カレンダー';
@override String get settings => '設定';
}
// Path: settings
class _Translations$settings$ja extends Translations$settings$en {
_Translations$settings$ja._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get language => '言語';
@override String get systemLanguage => 'システムの言語';
@override String get langEs => 'Español';
@override String get langEn => 'English';
@override String get langPt => 'Português';
@override String get langPtBr => 'Português (Brasil)';
@override String get langAst => 'Asturianu';
@override String get langFr => 'Français';
@override String get langDe => 'Deutsch';
@override String get langJa => '日本語';
@override String get about => 'このアプリについて';
@override String get aboutText => '在来種のためのローカルファースト・暗号化在庫管理。AGPL-3.0。';
@override String get aboutOpen => 'Tane について';
}
// Path: home
class _Translations$home$ja extends Translations$home$en {
_Translations$home$ja._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get tagline => '地域の種を分かち合い、育てよう';
@override String get openMarket => 'マーケット';
@override String get openMarketSubtitle => '近くの種を見つけて分かち合う';
@override String get yourInventory => 'あなたの在庫';
@override String get yourInventorySubtitle => '種を管理する';
}
/// The flat map containing all translations for locale <ja>.
/// Only for edge cases! For simple maps, use the map function of this library.
///
/// The Dart AOT compiler has issues with very large switch statements,
/// so the map is split into smaller functions (512 entries each).
extension on TranslationsJa {
dynamic _flatMapFunction(String path) {
return switch (path) {
'app.title' => 'Tane',
'common.save' => '保存',
'common.cancel' => 'キャンセル',
'common.delete' => '削除',
'common.edit' => '編集',
'common.type' => '種類',
'common.offline' => 'オフラインです — 共有を一時停止しています',
'menu.tagline' => 'あなたの種子バンク',
'menu.inventory' => '在庫',
'menu.market' => 'マーケット',
'menu.profile' => 'プロフィール',
'menu.chat' => 'チャット',
'menu.wishlist' => 'お気に入り',
'menu.following' => 'フォロー中',
'menu.calendar' => 'カレンダー',
'menu.settings' => '設定',
'settings.language' => '言語',
'settings.systemLanguage' => 'システムの言語',
'settings.langEs' => 'Español',
'settings.langEn' => 'English',
'settings.langPt' => 'Português',
'settings.langPtBr' => 'Português (Brasil)',
'settings.langAst' => 'Asturianu',
'settings.langFr' => 'Français',
'settings.langDe' => 'Deutsch',
'settings.langJa' => '日本語',
'settings.about' => 'このアプリについて',
'settings.aboutText' => '在来種のためのローカルファースト・暗号化在庫管理。AGPL-3.0。',
'settings.aboutOpen' => 'Tane について',
'home.tagline' => '地域の種を分かち合い、育てよう',
'home.openMarket' => 'マーケット',
'home.openMarketSubtitle' => '近くの種を見つけて分かち合う',
'home.yourInventory' => 'あなたの在庫',
'home.yourInventorySubtitle' => '種を管理する',
_ => null,
};
}
}