From b2728e27814134049ed9d2c92d8b8af8675860ab Mon Sep 17 00:00:00 2001 From: JT Smith Date: Fri, 18 Jun 2004 15:50:09 +0000 Subject: [PATCH] added utility methods to wobject and oo interface to international --- docs/changelog/6.x.x.txt | 4 +++ lib/WebGUI/International.pm | 65 ++++++++++++++++++++++++++++--------- lib/WebGUI/Wobject.pm | 54 ++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 16 deletions(-) diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 5814c0db9..a5395c0ab 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -19,6 +19,10 @@ performance at a cost of either memory or disk space or both. The gains here are primarily enjoyed by large heavy traffic sites that use lots of templates. + - Added convenience methods to Wobject superclass for internationalization, + wobject ID, and namespace. + - Added an object-oriented interface to the internationalization system. The + old procedural interface still works as well. 6.0.3 diff --git a/lib/WebGUI/International.pm b/lib/WebGUI/International.pm index 4847b2975..1db8aedd8 100644 --- a/lib/WebGUI/International.pm +++ b/lib/WebGUI/International.pm @@ -35,9 +35,15 @@ This package provides an interface to the internationalization system. $string = WebGUI::International::get($internationalId,$namespace); %languages = WebGUI::International::getLanguages(); +This package can also be used in object-oriented (OO) style. + + use WebGUI::International; + my $i = WebGUI::International->new($namespace); + $i->get($internationalId); + =head1 METHODS -These functions are available from this package: +These functions/methods are available from this package: =cut @@ -67,36 +73,34 @@ An integer that specifies the language that the user should see. Defaults to th =cut sub get { - my ($output, $language, $namespace, $cache); - if ($_[2] ne "") { - $language = $_[2]; - } elsif ($session{user}{language} ne "") { - $language = $session{user}{language}; + my ($id, $language, $namespace); + if (ref($_[0]) eq "WebGUI::International") { + $id = $_[1] || 0; + $namespace = $_[2] || $_[0]->{_namespace} || "WebGUI"; + $language = $_[3] || $_[0]->{_language} || $session{user}{language} || 1; } else { - $language = 1; - } - if ($_[1] ne "") { - $namespace = $_[1]; - } else { - $namespace = "WebGUI"; + $id = $_[0] || 0; + $namespace = $_[1] || "WebGUI"; + $language = $_[2] || $session{user}{language} || 1; } my $cachetag = $session{config}{configFile}."-International"; if ($session{config}{useSharedInternationalCache}) { $cachetag = "International"; } - $cache = WebGUI::Cache->new($language."_".$namespace."_".$_[0],$cachetag); - $output = $cache->get; + my $cache = WebGUI::Cache->new($language."_".$namespace."_".$id,$cachetag); + my $output = $cache->get; if (not defined $output) { ($output) = WebGUI::SQL->quickArray("select message from international - where internationalId=$_[0] and namespace='$namespace' and languageId='$language'"); + where internationalId=$id and namespace='$namespace' and languageId='$language'"); if ($output eq "" && $language ne 1) { - $output = get($_[0],$namespace,1); + $output = get($id,$namespace,1); } $cache->set($output, 3600); } return $output; } + #------------------------------------------------------------------- =head2 getLanguages ( ) @@ -111,5 +115,34 @@ sub getLanguages { return $hashRef; } + +#------------------------------------------------------------------- + +=head2 new ( [ namespace, languageId ] ) + +The constructor for the International function if using it in OO mode. + +=over + +=item namespace + +Specify a default namespace. Defaults to "WebGUI". + +=item languageId + +Specify a default language. Defaults to user preference. + +=back + +=cut + +sub new { + my $class = shift; + my $namespace = shift; + my $language = shift; + bless({_namespace=>$namespace,_language=>$language},$class); +} + + 1; diff --git a/lib/WebGUI/Wobject.pm b/lib/WebGUI/Wobject.pm index 6025fd1ef..a6e5c096e 100644 --- a/lib/WebGUI/Wobject.pm +++ b/lib/WebGUI/Wobject.pm @@ -420,6 +420,33 @@ sub getValue { +#------------------------------------------------------------------- + +=head2 i18n ( id [, namespace ]) { + +Returns an internationalized message. + +=over + +=item id + +The identifier for the internationalized message. + +=item namespace + +The namespace for the internationalized message. Defaults to the namespace of the wobject. + +=back + +=cut + +sub i18n { + my $self = shift; + my $id = shift; + my $namespace = shift || $self->get("namespace"); + return WebGUI::International::get($id,$namespace); +} + #------------------------------------------------------------------- =head2 inDateRange ( ) @@ -567,6 +594,20 @@ sub name { } +#------------------------------------------------------------------- + +=head2 namespace ( ) + +Returns the namespace of this wobject. This is a shortcut for $self->get("namespace"); + +=cut + +sub namespace { + my $self = shift; + return $self->get("namespace"); +} + + #------------------------------------------------------------------- =head2 new ( -properties, -extendedProperties [, -useDiscussion ] ) @@ -1056,6 +1097,19 @@ sub uiLevel { #------------------------------------------------------------------- +=head2 wid ( ) + +Returns the wobject id of this wobject. This is a shortcut for $self->get("wobjectId"); + +=cut + +sub wid { + my $self = shift; + return $self->get("wobjectId"); +} + +#------------------------------------------------------------------- + =head2 www_copy ( ) Copies this instance to the clipboard.