Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(796)

Unified Diff: samples/polymer_intl/web/localized.dart

Issue 105073003: Adds a sample for polymer internationalization/localization (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Changes from review Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « samples/polymer_intl/web/intl_messages.json ('k') | samples/polymer_intl/web/localized.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samples/polymer_intl/web/localized.dart
diff --git a/samples/polymer_intl/web/localized.dart b/samples/polymer_intl/web/localized.dart
new file mode 100644
index 0000000000000000000000000000000000000000..bd4600165678bf9227dfd182ee38da630fa1ec7e
--- /dev/null
+++ b/samples/polymer_intl/web/localized.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:polymer/polymer.dart';
+import 'package:intl/intl.dart';
+import 'messages_all.dart';
+
+/// This is an example polymer component that displays a message in one of
+/// a couple of different locales, based on the user's drop-down list
+/// selection.
+@CustomTag('localized-example')
+class LocalizedExampleElement extends PolymerElement {
+
+ // Polymer likes to use observable variables and doesn't really like
+ // observing getters, requiring us to do explicit notification when the
+ // values that the getter depends on change. So we will save the result
+ // of the message function in an observable variable. That will get
+ // a bit trickier if we have messages that have parameters.
+ @observable String selectedLocale;
+ @observable String helloWorld;
+
+ // It would be simpler to set [helloWorld] in an initializer, but we can't
+ // put a method call in an initializer, so do it in the constructor.
+ LocalizedExampleElement.created() : super.created() {
+ updateLocale(Intl.defaultLocale);
+ }
+
+ // Polymer should call this method automatically if the value of
+ // [selectedLocale] changes.
+ void selectedLocaleChanged() {
+ // We didn't provide en_US translations. We expect it to use the default
+ // text in the messages for en_US. But then we have to not try and
+ // initialize messages for the en_US locale. dartbug.com/15444
+ if (selectedLocale == 'en_US') {
+ updateLocale('en_US');
+ return;
+ }
+ // For the normal case we initialize the messages, wait for initialization
+ // to complete, then update all (all 1 of) our messages.
+ initializeMessages(selectedLocale).then(
+ (succeeded) => updateLocale(selectedLocale));
+ }
+
+ // When the user chooses a new locale, set the default locale for the
+ // whole program to that and update our messages. In a large program this
+ // could get to be a large method. Also, other components might want to
+ // observe the default locale and update accordingly.
+ void updateLocale(localeName) {
+ Intl.defaultLocale = selectedLocale;
+ helloWorld = helloFromDart();
+ }
+
+ // This is our message, a function that would take parameters if we have any
+ // and then gives us back the appropriate translated message.
+ // Of course, in order to make this happen we need to extract the messages
+ // from our program. We don't have an integration with a real translation
+ // system, but you can produce some custom JSON by running (assuming you have
+ // the full Intl package available somewhere, like in a built SDK).
+ // dart --package-root=<some-path-to-packages>
+ // <path-to-intl>/intl/test/message_extraction/extract_to_json.dart
+ // localized.dart
+ // That will produce intl_messages.json. We can then use whatever process
+ // we want to produce translation_fr.json and translation_pt.json. I used
+ // hand-editing, but that doesn't scale. Then
+ // dart --package-root=<some-path-to-packages>
+ // <path-to-intl>/intl/test/message_extraction/generate_from_json.dart
+ // localized.dart translation_fr.json translation_pt.json
+ // will produce messages_all.dart, messages_fr.dart and messages_pt.dart.
+ // We import messages_all.dart, and we're done.
+ helloFromDart() => Intl.message("Hello World from Dart!", name: 'helloWorld',
+ desc: "This is just a simple Hello World message that doesn't"
+ "take any parameters.",
+ args: [], // This would be required if we had any arguments.
+ examples: {"We could put examples of parameter values here for the "
+ "translators if we had any parameters" : 0});
+}
« no previous file with comments | « samples/polymer_intl/web/intl_messages.json ('k') | samples/polymer_intl/web/localized.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698