Skip to content

Commit f740f03

Browse files
committed
appearance: Support boardInnerRingSize
Change-Id: I48ab256d25d1853340011218d19f4a169c31f4cb
1 parent 42a45f6 commit f740f03

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+352
-72
lines changed

src/ui/flutter_app/lib/appearance_settings/models/display_settings.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class DisplaySettings {
9090
this.movesViewLayout = MovesViewLayout.medium,
9191
this.swipeToRevealTheDrawer = true,
9292
this.isScreenshotGameInfoShown = true,
93+
this.boardInnerRingSize = 1.0,
9394
});
9495

9596
/// Encodes a Json style map into a [DisplaySettings] object
@@ -230,6 +231,9 @@ class DisplaySettings {
230231
@HiveField(40, defaultValue: true)
231232
final bool isScreenshotGameInfoShown;
232233

234+
@HiveField(41, defaultValue: 1.0)
235+
final double boardInnerRingSize;
236+
233237
/// Decodes a Json from a [DisplaySettings] object
234238
Map<String, dynamic> toJson() => _$DisplaySettingsToJson(this);
235239
}

src/ui/flutter_app/lib/appearance_settings/widgets/appearance_settings_page.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ part 'package:sanmill/appearance_settings/widgets/pickers/piece_image_picker.dar
4444
part 'package:sanmill/appearance_settings/widgets/sliders/animation_duration_slider.dart';
4545
part 'package:sanmill/appearance_settings/widgets/sliders/board_boarder_line_width_slider.dart';
4646
part 'package:sanmill/appearance_settings/widgets/sliders/board_corner_radius_slider.dart';
47+
part 'package:sanmill/appearance_settings/widgets/sliders/board_inner_ring_size_slider.dart';
4748
part 'package:sanmill/appearance_settings/widgets/sliders/board_inner_line_width_slider.dart';
4849
part 'package:sanmill/appearance_settings/widgets/sliders/board_top_slider.dart';
4950
part 'package:sanmill/appearance_settings/widgets/sliders/font_size_slider.dart';
@@ -68,6 +69,11 @@ class AppearanceSettingsPage extends StatelessWidget {
6869
builder: (_) => const _BoardInnerLineWidthSlider(),
6970
);
7071

72+
void setBoardInnerRingSize(BuildContext context) => showModalBottomSheet(
73+
context: context,
74+
builder: (_) => const _BoardInnerRingSizeSlider(),
75+
);
76+
7177
void setPointPaintingStyle(
7278
BuildContext context, DisplaySettings displaySettings) {
7379
dynamic callback(PointPaintingStyle? pointPaintingStyle) {
@@ -740,6 +746,12 @@ class AppearanceSettingsPage extends StatelessWidget {
740746
titleString: S.of(context).boardInnerLineWidth,
741747
onTap: () => setBoardInnerLineWidth(context),
742748
),
749+
SettingsListTile(
750+
key: const Key(
751+
'display_settings_card_board_inner_ring_size_settings_list_tile'),
752+
titleString: S.of(context).boardInnerRingSize,
753+
onTap: () => setBoardInnerRingSize(context),
754+
),
743755
SettingsListTile(
744756
key:
745757
const Key('display_settings_card_point_style_settings_list_tile'),
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// SPDX-License-Identifier: GPL-3.0-or-later
2+
// Copyright (C) 2019-2025 The Sanmill developers (see AUTHORS file)
3+
4+
// board_inner_ring_size_slider.dart
5+
6+
part of 'package:sanmill/appearance_settings/widgets/appearance_settings_page.dart';
7+
8+
class _BoardInnerRingSizeSlider extends StatelessWidget {
9+
const _BoardInnerRingSizeSlider();
10+
11+
@override
12+
Widget build(BuildContext context) {
13+
return Semantics(
14+
key: const Key('board_inner_ring_size_semantics'),
15+
label: "Board Inner Ring Size",
16+
child: ValueListenableBuilder<Box<DisplaySettings>>(
17+
key: const Key('board_inner_ring_size_value_listenable_builder'),
18+
valueListenable: DB().listenDisplaySettings,
19+
builder: (BuildContext context, Box<DisplaySettings> box, _) {
20+
final DisplaySettings displaySettings = box.get(
21+
DB.displaySettingsKey,
22+
defaultValue: const DisplaySettings(),
23+
)!;
24+
25+
return Center(
26+
key: const Key('board_inner_ring_size_center'),
27+
child: SizedBox(
28+
key: const Key('board_inner_ring_size_sized_box'),
29+
width: MediaQuery.of(context).size.width * 0.8,
30+
child: Slider(
31+
key: const Key('board_inner_ring_size_slider'),
32+
value: displaySettings.boardInnerRingSize,
33+
min: 1.0,
34+
max: 1.5,
35+
divisions: 100,
36+
label: displaySettings.boardInnerRingSize.toStringAsFixed(2),
37+
onChanged: (double value) {
38+
// Round to nearest 0.05 increment
39+
final double roundedValue = (value * 20).round() / 20;
40+
logger.t("[config] BoardInnerRingSize value: $roundedValue");
41+
DB().displaySettings = displaySettings.copyWith(
42+
boardInnerRingSize: roundedValue);
43+
},
44+
),
45+
),
46+
);
47+
},
48+
),
49+
);
50+
}
51+
}

src/ui/flutter_app/lib/game_page/services/annotation/annotation_manager.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,8 @@ class _AnnotationOverlayState extends State<AnnotationOverlay> {
922922
Offset bestBoardLocal = boardLocalTap;
923923
double minDistance = double.infinity;
924924
for (final Offset boardLogicalPoint in points) {
925-
final Offset candidate = offsetFromPoint(boardLogicalPoint, boardSize);
925+
final Offset candidate =
926+
offsetFromPointWithInnerSize(boardLogicalPoint, boardSize);
926927
final double dist = (candidate - boardLocalTap).distance;
927928
if (dist < minDistance) {
928929
minDistance = dist;

src/ui/flutter_app/lib/game_page/services/painters/board_painter.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ class BoardPainter extends CustomPainter {
2828
_drawBackground(canvas, size, colorSettings);
2929
_drawOptionalElements(canvas, size, position);
3030

31-
final List<Offset> offset =
32-
points.map((Offset e) => offsetFromPoint(e, size)).toList();
31+
final List<Offset> offset = points
32+
.map((Offset e) => offsetFromPointWithInnerSize(e, size))
33+
.toList();
3334
_drawLines(offset, canvas, paint, size);
3435
_drawPoints(offset, canvas, paint);
3536
_drawMillLines(offset, canvas, paint, size);
@@ -395,8 +396,9 @@ class BoardPainter extends CustomPainter {
395396
const double dashLength = 10.0;
396397
const double spaceLength = 5.0;
397398

398-
final List<Offset> offset =
399-
points.map((Offset e) => offsetFromPoint2(e, size)).toList();
399+
final List<Offset> offset = points
400+
.map((Offset e) => offsetFromPointWithInnerSize(e, size))
401+
.toList();
400402

401403
_drawDashedRect(canvas, Rect.fromPoints(offset[0], offset[23]), colors,
402404
strokeWidth, dashLength, spaceLength);

src/ui/flutter_app/lib/game_page/services/painters/board_utils.dart

Lines changed: 88 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ double get boardMargin => AppTheme.boardPadding;
3434
Offset pointFromIndex(int index, Size size) {
3535
final double row = (index ~/ 7).toDouble();
3636
final double column = index % 7;
37-
return offsetFromPoint(Offset(column, row), size);
37+
return offsetFromPointWithInnerSize(Offset(column, row), size);
3838
}
3939

4040
/// Calculates the index of the given point
@@ -52,18 +52,102 @@ Offset pointFromSquare(int square, Size size) {
5252
}
5353

5454
/// Calculates the pressed point
55+
///
56+
/// Finds the nearest logical board point to the tap position taking the
57+
/// current inner-ring scaling into account. This guarantees correct hit
58+
/// detection even when the inner ring has been resized.
5559
Offset pointFromOffset(Offset offset, double dimension) {
56-
final Offset point = (offset - Offset(boardMargin, boardMargin)) /
57-
((dimension - boardMargin * 2) / 6);
60+
// Build a square Size as used for painting.
61+
final Size size = Size(dimension, dimension);
62+
63+
// One grid unit in canvas coordinates (outer ring reference).
64+
final double unitDistance = (dimension - boardMargin * 2) / 6;
65+
// Accept taps roughly within half a unit distance from a point.
66+
final double threshold = unitDistance * 0.5;
67+
68+
Offset? nearestPoint;
69+
double nearestDistance = double.infinity;
70+
71+
// Iterate over all 24 logical points, compute their canvas position with the
72+
// same scaling used for painting, then find the closest one.
73+
for (final Offset gridPt in points) {
74+
final Offset canvasPt = offsetFromPointWithInnerSize(gridPt, size);
75+
final double dist = (offset - canvasPt).distance;
76+
if (dist < nearestDistance) {
77+
nearestDistance = dist;
78+
nearestPoint = gridPt;
79+
}
80+
}
81+
82+
// If the tap is too far from any point, return an invalid value (e.g. Offset(-1,-1)).
83+
if (nearestPoint == null || nearestDistance > threshold) {
84+
return const Offset(-1, -1);
85+
}
5886

59-
return point.round();
87+
// Round to ensure integer grid coordinates.
88+
return nearestPoint.round();
6089
}
6190

6291
/// Calculates the offset for the given position
6392
Offset offsetFromPoint(Offset point, Size size) =>
6493
(point * (size.width - boardMargin * 2) / 6) +
6594
Offset(boardMargin, boardMargin);
6695

96+
/// Calculates the offset for the given position with adjustable inner ring size
97+
/// This function ensures equal distance between outer-middle and middle-inner rings
98+
Offset offsetFromPointWithInnerSize(Offset point, Size size) {
99+
// Inner ring size factor (distance from center relative to original inner distance which is 1 grid unit).
100+
// Range: 1.0-1.5 with 0.05 step increments.
101+
final double innerRingSize = DB().displaySettings.boardInnerRingSize;
102+
103+
// Center of the board in canvas coordinates.
104+
final Offset center = Offset(size.width / 2, size.height / 2);
105+
// One grid distance in canvas units.
106+
final double unitDistance = (size.width - boardMargin * 2) / 6;
107+
108+
// Convert board point to canvas position using the default mapping (no scaling).
109+
final Offset originalPos =
110+
(point * unitDistance) + Offset(boardMargin, boardMargin);
111+
final Offset vectorFromCenter = originalPos - center;
112+
113+
// Determine the ring index in the original 7×7 grid.
114+
final int ringOriginal = (point.dx - 3).abs().toInt().clamp(0, 3) >
115+
(point.dy - 3).abs().toInt().clamp(0, 3)
116+
? (point.dx - 3).abs().toInt()
117+
: (point.dy - 3).abs().toInt();
118+
// ringOriginal will be 0 (center), 1 (inner), 2 (middle) or 3 (outer).
119+
if (ringOriginal == 0) {
120+
// Center point (should not occur for valid board points) – return as-is.
121+
return originalPos;
122+
}
123+
124+
// Target radial lengths (in grid units) after scaling.
125+
const double targetOuter = 3.0; // keep outer ring unchanged
126+
final double targetInner = innerRingSize; // user-defined (1.0-1.5)
127+
final double targetMiddle =
128+
(targetOuter + targetInner) / 2.0; // ensure equal spacing
129+
130+
double targetLen;
131+
switch (ringOriginal) {
132+
case 1:
133+
targetLen = targetInner;
134+
break;
135+
case 2:
136+
targetLen = targetMiddle;
137+
break;
138+
case 3:
139+
default:
140+
targetLen = targetOuter;
141+
break;
142+
}
143+
144+
// Compute scale factor to convert original vector length (ringOriginal) to targetLen.
145+
final double scaleFactor = targetLen / ringOriginal;
146+
final Offset scaledVector = vectorFromCenter * scaleFactor;
147+
148+
return center + scaledVector;
149+
}
150+
67151
Offset offsetFromPoint2(Offset point, Size size) =>
68152
(point * (size.width - boardMargin * 2) / 6) +
69153
Offset(boardMargin, boardMargin);

src/ui/flutter_app/lib/l10n/intl_af.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "Wanneer geaktiveer, sal speletjie-uitslae in statistieke aangeteken word. Speletjies wat terugnames behels, sal egter nie aangeteken word nie. Wanneer gedeaktiveer, word die insameling van statistieke onderbreek.",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "Dit sal alle speletjiestatistieke terugstel. Hierdie aksie kan nie ongedaan gemaak word nie.",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "Binne-ringgrootte van die bord",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_am.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "ሲነቃ የጨዋታ ውጤቶች በስታቲስቲክስ ውስጥ ይመዘገባሉ። ሆኖም፣ ወደኋላ መመለስን የሚያካትቱ ጨዋታዎች አይመዘገቡም። ሲሰናከል የስታቲስቲክስ ስብስብ ይቆማል።",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "ይህ ሁሉንም የጨዋTA ስታቲስቲክስ ዳግም ያስጀምራል። ይህ እርምጃ ሊቀለበስ አይችልም።",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "የቦርዱ ውስጣዊ ቀለበት መጠን",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_ar.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "عند التمكين، سيتم تسجيل نتائج اللعبة في الإحصائيات. ومع ذلك، لن يتم تسجيل الألعاب التي تتضمن عمليات تراجع. عند التعطيل، يتم إيقاف جمع الإحصائيات مؤقتًا.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "سيؤدي هذا إلى إعادة تعيين جميع إحصائيات اللعبة. لا يمكن التراجع عن هذا الإجراء.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "حجم الحلقة الداخلية للوحة",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_az.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "Aktivləşdirildikdə oyun nəticələri statistikada qeyd olunacaq. Lakin geri almaların olduğu oyunlar qeydə alınmayacaq. Deaktivləşdirildikdə statistika toplanması dayandırılır.",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "Bu, bütün oyun statistikasını sıfırlayacaq. Bu əməliyyat geri qaytarıla bilməz.",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "Taxtanın daxili halqanın ölçüsü",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_be.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "Калі ўключана, вынікі гульняў будуць запісвацца ў статыстыку. Аднак гульні, якія ўключаюць вяртанне хадоў, не будуць запісвацца. Калі адключана, збор статыстыкі прыпыняецца.",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "Гэта скіне ўсю статыстыку гульні. Гэта дзеянне немагчыма адмяніць.",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "Памер унутранага кольца дошкі",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_bg.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "Когато е активирано, резултатите от игрите ще се записват в статистиката. Игрите, включващи връщане на ходове, обаче няма да се записват. Когато е деактивирано, събирането на статистика е на пауза.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "Това ще нулира цялата статистика на играта. Това действие не може да бъде отменено.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "Размер на вътрешния пръстен на дъската",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_bn.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "সক্রিয় করা হলে, খেলার ফলাফল পরিসংখ্যানে রেকর্ড করা হবে। তবে, টেক-ব্যাক জড়িত গেমগুলি রেকর্ড করা হবে না। নিষ্ক্রিয় করা হলে, পরিসংখ্যান সংগ্রহ সাময়িকভাবে বন্ধ হয়ে যায়।",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "এটি সমস্ত খেলার পরিসংখ্যান রিসেট করবে। এই ক্রিয়াটি আর ফেরানো যাবে না।",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "বোর্ডের অভ্যন্তরীণ বৃত্তের আকার",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_bo.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "འགོ་བཙུགས་ན་རྩེད་འབྲས་བསྡོམས་རྩིས་ནང་བཀོད་འཇུག་བྱེད་རྒྱུ་རེད། འོན་ཀྱང་ཕྱིར་འཐེན་བྱས་པའི་རྩེད་མོ་རྣམས་བཀོད་འཇུག་མི་བྱེད། གལ་ཏེ་སྤྱོད་མཚམས་བཞག་ན་བསྡོམས་རྩིས་བསྡུ་རུབ་བྱེད་མཚམས་འཇོག་རྒྱུ་རེད།",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "འདིས་རྩེད་མོའི་བསྡོམས་རྩིས་ཡོད་ཚད་སླར་སྒྲིག་བྱེད་རྒྱུ་རེད། བྱ་སྤྱོད་འདི་ཕྱིར་འཐེན་བྱེད་མི་ཐུབ།",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "སྒོ་སྦེལ་ནང་འཁོར་ཚད",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_bs.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "Kada je omogućeno, rezultati igre će biti zabilježeni u statistici. Međutim, igre koje uključuju vraćanje poteza neće biti zabilježene. Kada je onemogućeno, prikupljanje statistike je pauzirano.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "Ovo će resetovati svu statistiku igre. Ova radnja se ne može poništiti.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "Veličina unutarnog prstena ploče",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_ca.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2062,5 +2062,7 @@
20622062
"enableStatistics_Detail": "Quan estigui activat, els resultats de les partides es registraran a les estadístiques. No obstant això, les partides que impliquin retrocessos no es registraran. Quan estigui desactivat, la recollida d'estadístiques s'atura.",
20632063
"@enableStatistics_Detail": {},
20642064
"thisWillResetAllGameStatistics": "Això restablirà totes les estadístiques del joc. Aquesta acció no es pot desfer.",
2065-
"@thisWillResetAllGameStatistics": {}
2065+
"@thisWillResetAllGameStatistics": {},
2066+
"boardInnerRingSize": "Mida de l'anell interior del tauler",
2067+
"@boardInnerRingSize": {}
20662068
}

src/ui/flutter_app/lib/l10n/intl_cs.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "Pokud je povoleno, výsledky her se budou zaznamenávat do statistik. Hry zahrnující vrácení tahu se však zaznamenávat nebudou. Pokud je zakázáno, sběr statistik je pozastaven.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "Tímto resetujete všechny herní statistiky. Tuto akci nelze vrátit zpět.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "Velikost vnitřního kroužku hrací desky",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_da.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "Når det er aktiveret, vil spilresultater blive registreret i statistikken. Spil, der involverer tilbagetrækninger, vil dog ikke blive registreret. Når det er deaktiveret, sættes statistikindsamlingen på pause.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "Dette nulstiller al spilstatistik. Denne handling kan ikke fortrydes.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "Størrelse på den indre ring på brættet",
1966+
"@boardInnerRingSize": {}
19651967
}

src/ui/flutter_app/lib/l10n/intl_de.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,5 +1961,7 @@
19611961
"enableStatistics_Detail": "Wenn aktiviert, werden Spielergebnisse in den Statistiken erfasst. Spiele mit Zugrücknahmen werden jedoch nicht erfasst. Wenn deaktiviert, wird die Erfassung von Statistiken angehalten.",
19621962
"@enableStatistics_Detail": {},
19631963
"thisWillResetAllGameStatistics": "Dadurch werden alle Spielstatistiken zurückgesetzt. Diese Aktion kann nicht rückgängig gemacht werden.",
1964-
"@thisWillResetAllGameStatistics": {}
1964+
"@thisWillResetAllGameStatistics": {},
1965+
"boardInnerRingSize": "Größe des inneren Rings des Brettes",
1966+
"@boardInnerRingSize": {}
19651967
}

0 commit comments

Comments
 (0)