[Jifty-commit] r4341 - jifty/trunk/lib/Jifty/Plugin/I18N/Action

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Wed Oct 31 05:03:14 EDT 2007


Author: clkao
Date: Wed Oct 31 05:03:02 2007
New Revision: 4341

Modified:
   jifty/trunk/lib/Jifty/Plugin/I18N/Action/SetLang.pm

Log:
* I18N::Action::SetLang: scalar::defer is trigger some oddness,
  rewrite available languages as normal runtime code, and cached.


Modified: jifty/trunk/lib/Jifty/Plugin/I18N/Action/SetLang.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Plugin/I18N/Action/SetLang.pm	(original)
+++ jifty/trunk/lib/Jifty/Plugin/I18N/Action/SetLang.pm	Wed Oct 31 05:03:02 2007
@@ -2,17 +2,38 @@
 use strict;
 use DateTime::Locale ();
 
+use base 'Class::Data::Inheritable';
+__PACKAGE__->mk_classdata(_available_languages => undef);
+
 use Jifty::Param::Schema;
 use Jifty::Action schema {
 
-param lang =>
-    label is _('Language'),
+param
+    lang => label is _('Language'),
     render as 'select',
-    # XXX: complete_native_name is way too long
-    valid are defer {[ map { { display => DateTime::Locale->load($_)->native_name, value => $_ } } Jifty::I18N->available_languages ]},
     default is defer { Jifty::I18N->get_current_language };
 };
 
+sub available_languages {
+    my $class = shift;
+    return $class->_available_languages if $class->_available_languages;
+
+    $class->_available_languages(
+        [   map { {   display => DateTime::Locale->load($_)->native_name,
+                      value   => $_ } } Jifty::I18N->available_languages ] );
+    return $class->_available_languages;
+}
+
+sub arguments {
+    my $self = shift;
+    my $args = $self->SUPER::arguments;
+
+    # XXX: complete_native_name is way too long
+    $args->{lang}->{valid_values} = $self->available_languages;
+
+    return $args;
+}
+
 sub take_action {
     my $self = shift;
     my $lang = $self->argument_value('lang');


More information about the Jifty-commit mailing list