Skip to content

Commit 38ac02d

Browse files
committed
Squashed commit
1 parent ba119d7 commit 38ac02d

40 files changed

+555
-470
lines changed

pkgs/messages/example_json/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
# Conventional directory for build output.
66
build/
7+
bin/example/

pkgs/messages/example_json/bin/example.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44

55
// ignore_for_file: prefer_function_declarations_over_variables
66

7-
import 'dart:io';
8-
9-
import 'package:example_json/testarbctx2.g.dart';
7+
import 'package:example_json/messages.g.dart';
108

119
Future<void> main(List<String> arguments) async {
12-
final messages =
13-
AboutPageMessages((String id) async => File(id).readAsString());
10+
final messages = AboutPageMessages();
1411
// final index = AboutPageMessagesEnum.aboutMessage;
1512

1613
await messages.loadLocale('en');
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:messages_builder/hook.dart';
6+
import 'package:native_assets_cli/native_assets_cli.dart';
7+
8+
void main(List<String> args) {
9+
build(args, (config, output) async {
10+
// final builder = MessagesDataBuilder.fromFiles(
11+
// [
12+
// 'assets/l10n/testarb.arb',
13+
// 'assets/l10n/testarb_de.arb',
14+
// 'assets/l10n/testarbctx2.arb',
15+
// 'assets/l10n/testarbctx2_fr.arb',
16+
// ],
17+
// );
18+
final builder = MessagesDataBuilder.fromFolder('assets/l10n/');
19+
20+
await builder.run(config: config, output: output, logger: null);
21+
});
22+
}

pkgs/messages/example_json/lib/l10n.messages

Whitespace-only changes.
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
// Generated by package:messages_builder.
2+
3+
import 'dart:ffi';
4+
5+
import 'package:intl4x/intl4x.dart';
6+
import 'package:messages/messages_json.dart';
7+
8+
class AboutPageMessages {
9+
AboutPageMessages();
10+
11+
String _currentLocale = 'en';
12+
13+
final Map<String, MessageList> _messages = {};
14+
15+
static const _dataFiles = {
16+
'fr': ('package:example_json/assets/l10n/testarbctx2_fr.json', 'EyPjEJJU'),
17+
'en': ('package:example_json/assets/l10n/testarbctx2.json', 'QrwRSsOy')
18+
};
19+
20+
String get currentLocale => _currentLocale;
21+
22+
MessageList get _currentMessages => _messages[currentLocale]!;
23+
24+
static Iterable<String> get knownLocales => _dataFiles.keys;
25+
26+
Future<void> loadLocale(String locale) async {
27+
if (!_messages.containsKey(locale)) {
28+
final info = _dataFiles[locale];
29+
final carb = info?.$1;
30+
if (carb == null) {
31+
throw ArgumentError('Locale $locale is not in $knownLocales');
32+
}
33+
final data = await AssetBundle.loadString(carb);
34+
final messageList = MessageListJson.fromString(data, _pluralSelector);
35+
if (messageList.preamble.hash != info?.$2) {
36+
throw ArgumentError('''
37+
Messages file for locale $locale has different hash "${messageList.preamble.hash}" than generated code "${info?.$2}".''');
38+
}
39+
_messages[locale] = messageList;
40+
}
41+
_currentLocale = locale;
42+
}
43+
44+
void loadAllLocales() {
45+
for (final locale in knownLocales) {
46+
loadLocale(locale);
47+
}
48+
}
49+
50+
String aboutMessage(String websitename) =>
51+
_currentMessages.generateStringAtIndex(0, [websitename]);
52+
53+
String helloAndWelcome(
54+
String firstName,
55+
int lastName,
56+
) =>
57+
_currentMessages.generateStringAtIndex(1, [firstName, lastName]);
58+
59+
String newMessages(int newMessages) =>
60+
_currentMessages.generateStringAtIndex(2, [newMessages]);
61+
62+
String newMessages2(
63+
String gender,
64+
int newVar,
65+
) =>
66+
_currentMessages.generateStringAtIndex(3, [gender, newVar]);
67+
68+
String get otherMsg => _currentMessages.generateStringAtIndex(4, []);
69+
}
70+
71+
class HomePageMessages {
72+
HomePageMessages();
73+
74+
String _currentLocale = 'en';
75+
76+
final Map<String, MessageList> _messages = {};
77+
78+
static const _dataFiles = {
79+
'de': ('package:example_json/assets/l10n/testarb_de.json', 'hbDN1MhX'),
80+
'en': ('package:example_json/assets/l10n/testarb.json', 'dr9Md951')
81+
};
82+
83+
String get currentLocale => _currentLocale;
84+
85+
MessageList get _currentMessages => _messages[currentLocale]!;
86+
87+
static Iterable<String> get knownLocales => _dataFiles.keys;
88+
89+
Future<void> loadLocale(String locale) async {
90+
if (!_messages.containsKey(locale)) {
91+
final info = _dataFiles[locale];
92+
final carb = info?.$1;
93+
if (carb == null) {
94+
throw ArgumentError('Locale $locale is not in $knownLocales');
95+
}
96+
final data = await AssetBundle.loadString(carb);
97+
final messageList = MessageListJson.fromString(data, _pluralSelector);
98+
if (messageList.preamble.hash != info?.$2) {
99+
throw ArgumentError('''
100+
Messages file for locale $locale has different hash "${messageList.preamble.hash}" than generated code "${info?.$2}".''');
101+
}
102+
_messages[locale] = messageList;
103+
}
104+
_currentLocale = locale;
105+
}
106+
107+
void loadAllLocales() {
108+
for (final locale in knownLocales) {
109+
loadLocale(locale);
110+
}
111+
}
112+
113+
String helloAndWelcome(
114+
String firstName,
115+
String lastName,
116+
) =>
117+
_currentMessages.generateStringAtIndex(0, [firstName, lastName]);
118+
119+
String helloAndWelcome2(
120+
String firstName,
121+
String lastName,
122+
) =>
123+
_currentMessages.generateStringAtIndex(1, [firstName, lastName]);
124+
125+
String newMessages(int newMessages) =>
126+
_currentMessages.generateStringAtIndex(2, [newMessages]);
127+
128+
String newMessages2(
129+
String gender,
130+
int newVar,
131+
) =>
132+
_currentMessages.generateStringAtIndex(3, [gender, newVar]);
133+
}
134+
135+
Message _pluralSelector(
136+
num howMany,
137+
String locale, {
138+
required Message other,
139+
Message? few,
140+
Message? many,
141+
Map<int, Message>? numberCases,
142+
Map<int, Message>? wordCases,
143+
}) {
144+
Message getCase(int i) => numberCases?[i] ?? wordCases?[i] ?? other;
145+
return switch (Intl(locale: Locale.parse(locale)).plural().select(howMany)) {
146+
PluralCategory.zero => getCase(0),
147+
PluralCategory.one => getCase(1),
148+
PluralCategory.two => getCase(2),
149+
PluralCategory.few => few ?? other,
150+
PluralCategory.many => many ?? other,
151+
PluralCategory.other => other,
152+
};
153+
}

pkgs/messages/example_json/lib/testarb.g.dart

Lines changed: 0 additions & 90 deletions
This file was deleted.

0 commit comments

Comments
 (0)