International text retrieval has been optimized
This commit is contained in:
parent
24da723629
commit
9686a74244
3 changed files with 56 additions and 26 deletions
|
|
@ -3,6 +3,7 @@
|
|||
- fixed #9759: Delete Entry Button missing in Data Form
|
||||
- fixed #9767: FileAsset breaks 'null' rule for FileAsset table
|
||||
- fixed defaultValues of undef cause mysql5.1 to complain about columns that are set to be NOT NULL. 5.0 doesn't care.
|
||||
- International text retrieval has been optimized
|
||||
|
||||
7.6.12
|
||||
- fixed: During postback on a recurring transaction, the routine could error out instead of catching an error.
|
||||
|
|
|
|||
|
|
@ -79,50 +79,74 @@ An integer that relates to a message in the international table in the WebGUI da
|
|||
=head3 namespace
|
||||
|
||||
A string that relates to the namespace field in the international table in the WebGUI database. Defaults to 'WebGUI'.
|
||||
This parameter is deprecated and will be removed in the future.
|
||||
|
||||
=head3 language
|
||||
|
||||
A string that specifies the language that the user should see. Defaults to the user's defined language. If the user hasn't specified a default language it defaults to 'English'.
|
||||
This parameter is deprecated and will be removed in the future.
|
||||
|
||||
=cut
|
||||
|
||||
my $safeRe = qr/[^\.:\w\d\s\/\^\;\?%><\]\[]/;
|
||||
|
||||
sub get {
|
||||
my ($self, $id, $namespace, $language) = @_;
|
||||
my $session = $self->session;
|
||||
$namespace = $namespace || $self->{_namespace} || "WebGUI";
|
||||
$language = $language || $self->{_language} || $session->user->profileField("language") || "English";
|
||||
$id =~ s/$safeRe//g;
|
||||
$language =~ s/$safeRe//g;
|
||||
$namespace =~ s/$safeRe//g;
|
||||
my $cmd = "WebGUI::i18n::".$language."::".$namespace;
|
||||
my ($self, $id, $namespace, $language) = @_;
|
||||
my $table = $self->{_table};
|
||||
$namespace = $namespace || $self->{_namespace};
|
||||
$language = $language || $self->{_language};
|
||||
|
||||
# if the requested namespace and language don't match our init params,
|
||||
# we don't have its table readily available, so we need to load it.
|
||||
if ( $namespace ne $self->{_namespace} || $language ne $self->{_language} ) {
|
||||
$table = $self->_loadNamespace($language, $namespace);
|
||||
my $message = $table->{$id}{message};
|
||||
if ($message eq "" && $language ne 'English') {
|
||||
$table = $self->_loadNamespace('English', $namespace);
|
||||
return $table->{$id}{message};
|
||||
}
|
||||
return $message;
|
||||
}
|
||||
my $message = $table->{$id}{message};
|
||||
|
||||
# if there is a missing message in a translation, load and cache the
|
||||
# english table, and get the message from there.
|
||||
if ($message eq "" && $language ne 'English') {
|
||||
$self->{_englishTable} ||= $self->_loadNamespace('English', $namespace);
|
||||
return $self->{_englishTable}{$id}{message};
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
sub _loadNamespace {
|
||||
my ($self, $language, $namespace) = @_;
|
||||
$language =~ s/\W//g;
|
||||
$namespace =~ s/\W//g;
|
||||
my $package = "WebGUI::i18n::".$language."::".$namespace;
|
||||
# with preload, everything should already be in memory, so go directly for the
|
||||
# variable first
|
||||
my $table = do {
|
||||
no strict 'refs';
|
||||
${"$cmd\::I18N"};
|
||||
${"$package\::I18N"};
|
||||
};
|
||||
|
||||
# if it wasn't there it may not be loaded or it may not be available.
|
||||
if (! $table) {
|
||||
eval { WebGUI::Pluggable::load($cmd); };
|
||||
eval { WebGUI::Pluggable::load($package); };
|
||||
if ($@) {
|
||||
if ($language eq 'English') {
|
||||
$session->log->error("Unable to load $cmd");
|
||||
return '';
|
||||
$self->session->log->error("Unable to load $package");
|
||||
return {};
|
||||
}
|
||||
else {
|
||||
my $output = $self->get($id, $namespace, 'English');
|
||||
return $output;
|
||||
return $self->_loadNamespace('English', $namespace);
|
||||
}
|
||||
}
|
||||
no strict 'refs';
|
||||
$table = ${"$cmd\::I18N"};
|
||||
$table = ${"$package\::I18N"};
|
||||
}
|
||||
my $output = $table->{$id}->{message};
|
||||
$output = $self->get($id, $namespace, "English")
|
||||
if ($output eq "" && $language ne "English");
|
||||
return $output;
|
||||
return $table;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getLanguage ( [ language , propertyName] )
|
||||
|
|
@ -141,7 +165,7 @@ If this is specified, only the value of the property will be returned, instead o
|
|||
|
||||
sub getLanguage {
|
||||
my ($self, $language, $property) = @_;
|
||||
$language = $language || $self->{_language} || "English";
|
||||
$language ||= $self->{_language};
|
||||
my $pack = "WebGUI::i18n::" . $language;
|
||||
WebGUI::Pluggable::load($pack);
|
||||
my $langInfo = do {
|
||||
|
|
@ -231,6 +255,8 @@ The namespace to make the new default.
|
|||
sub setNamespace {
|
||||
my ($self, $namespace) = @_;
|
||||
$self->{_namespace} = $namespace;
|
||||
$self->{_table} = $self->_loadNamespace($self->{_language}, $namespace);
|
||||
return $namespace;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -257,12 +283,15 @@ Specify a default language. Defaults to user preference or "English".
|
|||
|
||||
sub new {
|
||||
my ($class, $session, $namespace, $language) = @_;
|
||||
$namespace ||= 'WebGUI';
|
||||
$language ||= $session->user->profileField('language');
|
||||
my $self =
|
||||
bless {
|
||||
_session => $session,
|
||||
_namespace => $namespace,
|
||||
_language => ($language || $session->user->profileField('language')),
|
||||
_language => $language,
|
||||
}, $class;
|
||||
$self->{_table} = $self->_loadNamespace($language, $namespace);
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
|
@ -275,7 +304,7 @@ Returns the internally stored session variable
|
|||
=cut
|
||||
|
||||
sub session {
|
||||
return $_[0]->{_session};
|
||||
return $_[0]->{_session};
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ our $I18N = {
|
|||
lastUpdated => 0,
|
||||
},
|
||||
|
||||
'helpvar file_' => {
|
||||
'helpvar file_*' => {
|
||||
message => 'The current file being viewed in the thumbnails page. All the
|
||||
common variables for this file are available by prefixing "file_".',
|
||||
lastUpdated => 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue