# HG changeset patch
# User cin
# Date 1385557958 -14400
# Node ID eff7f75a4408aab55f262d1de18f26748b744ad0
# Parent 39842eedd923304f6fdb24a65e7d28acd93b8900
added cookie support for the request language detection
diff -r 39842eedd923 -r eff7f75a4408 Lib/IMPL/Web/Handler/LocaleHandler.pm
--- a/Lib/IMPL/Web/Handler/LocaleHandler.pm Tue Nov 26 03:22:44 2013 +0400
+++ b/Lib/IMPL/Web/Handler/LocaleHandler.pm Wed Nov 27 17:12:38 2013 +0400
@@ -13,43 +13,51 @@
],
props => [
locales => PROP_RO | PROP_LIST,
- default => PROP_RO
+ default => PROP_RO,
+ cookie => PROP_RO
]
};
sub Invoke {
my ($this,$action,$nextHandler) = @_;
- my @matches;
-
- my $best = [$this->default,0];
+ my $locale;
- if(my $header = $action->header('Accept-Language')) {
- foreach my $part (split(/\s*,\s*/, $header)) {
- my ($lang,$quality) = ($part =~ /([a-z]+(?:\-[a-z]+)*)(?:\s*;\s*q=(0\.[\d]+|1))?/i );
-
- $quality ||=1;
-
- foreach my $tag ($this->locales) {
- if ( $tag =~ m/^$lang/i ) {
- push @matches, [$tag,$quality];
- }
- }
- }
-
- foreach my $match (@matches) {
- if ($match->[1] > $best->[1]) {
- $best = $match;
- }
- }
-
-
+ if ($this->cookie and my $cookie = $action->cookie($this->cookie)) {
+ ($locale) = grep /^$cookie/i, $this->locales;
}
- if (my $locale = $best->[0]) {
- Resources->SetLocale($locale);
+ unless($locale) {
+ my @matches;
+
+ my $best = [$this->default,0];
+
+ if(my $header = $action->header('Accept-Language')) {
+ foreach my $part (split(/\s*,\s*/, $header)) {
+ my ($lang,$quality) = ($part =~ /([a-z]+(?:\-[a-z]+)*)(?:\s*;\s*q=(0\.[\d]+|1))?/i );
+
+ $quality ||=1;
+
+ foreach my $tag ($this->locales) {
+ if ( $tag =~ m/^$lang/i ) {
+ push @matches, [$tag,$quality];
+ }
+ }
+ }
+
+ foreach my $match (@matches) {
+ if ($match->[1] > $best->[1]) {
+ $best = $match;
+ }
+ }
+
+ }
+
+ $locale = $best->[0];
}
+ Resources->SetLocale($locale) if $locale;
+
return $nextHandler->($action);
}
@@ -68,7 +76,14 @@
=begin code xml
-
+ -
+
+
- en-US
+ - ru-RU
+
+ en-US
+ lang
+
=end code xml
diff -r 39842eedd923 -r eff7f75a4408 _test/Resources/person.xsd
--- a/_test/Resources/person.xsd Tue Nov 26 03:22:44 2013 +0400
+++ b/_test/Resources/person.xsd Wed Nov 27 17:12:38 2013 +0400
@@ -3,9 +3,10 @@
targetNamespace="http://implab.org/person/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://implab.org/person/"
+ xmlns:impl="http://implab.org/schemas/impl-bindings"
elementFormDefault="qualified"
>
-
+