/** LabelLoader.java.
Purpose:
Description:
History:
5:26:48 PM Dec 25, 2013, Created by jumperchen
Copyright (C) 2013 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.util.resource.impl;
import java.util.Locale;
import java.util.Map;
import org.zkoss.util.resource.LabelLocator;
import org.zkoss.util.resource.LabelLocator2;
import org.zkoss.xel.VariableResolver;
/**
* The label loader interface.
*
* Used to implement for {@link org.zkoss.util.resource.Labels}.
*
* <p>Notice that the encoding of the Locale dependent file (*.properties)
* is assumed to be UTF-8. If it is not the case, please refer to
* <a href="http://books.zkoss.org/wiki/ZK_Configuration_Reference/zk.xml/The_library-property_Element/Library_Properties#org.zkoss.util.label.web.charset">ZK Configuration Reference</a>
* for more information.
* <p> Specify the library property of <code>org.zkoss.util.resource.LabelLoader.class</code>
* in zk.xml to provide a customized label loader for debugging purpose. (since 7.0.1)
* @author jumperchen
* @since 7.0.1
*/
public interface LabelLoader {
/** Returns the label of the specified key for the specified locale,
* or null if not found.
*/
public String getLabel(Locale locale, String key);
/** Returns the label of the specified key for the current locale,
* or null if not found.
* @see #getSegmentedLabels
*/
public String getLabel(String key);
/** Returns a map of segmented labels for the current locale (never null).
* Unlike {@link #getLabel}, if a key of the label contains dot, it will
* be split into multiple keys and then grouped into map. It is so-called
* segmented.
* <p>For example, the following property file will parsed into a couple of maps,
* and <code>getSegmentedLabels()</code> returns a map containing
* a single entry. The entry's key is <code>"a"</code> and the value
* is another map with two entries <code>"b"</code> and <code>"c"</code>.
* And, the value for <code>"b"</code> is another two-entries map (containing
* <code>"c"</code> and <code>"d"</code>).
* <pre><code>
* a.b.c=1
* a.b.d=2
* a.e=3</pre></code>
* <p>This method is designed to make labels easier to be accessed in
* EL expressions.
* <p>On the other hand, {@link #getLabel} does not split them, and
* you could access them by, say, <code>getLabel("a.b.d")</code>.
*/
public Map<String, Object> getSegmentedLabels();
/** Returns a map of segmented labels for the specified locale (never null).
* Refer to {@link #getSegmentedLabels()} for details.
*/
public Map<String, Object> getSegmentedLabels(Locale locale);
/** Resets all cached labels and next call to {@link #getLabel}
* will cause re-loading the Locale-dependent labels.
*/
public void reset();
/** Sets the variable resolver, which is used if an EL expression
* is specified.
*/
public VariableResolver setVariableResolver(VariableResolver resolv);
/** Registers a locator which is used to load the Locale-dependent labels
* from other resource, such as servlet contexts.
*/
public void register(LabelLocator locator);
/** Registers a locator which is used to load the Locale-dependent labels
* from other resource, such as database.
*/
public void register(LabelLocator2 locator);
}