class ILocaleTimeZone(Interface): """Represents and defines various timezone information. It mainly manages all the various names for a timezone and the cities contained in it. Important: ILocaleTimeZone objects are not intended to provide implementations for the standard datetime module timezone support. They are merily used for Locale support. """ type = TextLine( title=u"Time Zone Type", description=u"Standard name of the timezone for unique referencing.", required=True, readonly=True) cities = List(title=u"Cities", description=u"Cities in Timezone", value_type=TextLine(title=u"City Name"), required=True, readonly=True) names = Dict(title=u"Time Zone Names", description=u"Various names of the timezone.", key_type=Choice(title=u"Time Zone Name Type", values=(u'generic', u'standard', u'daylight')), value_type=Tuple(title=u"Time Zone Name and Abbreviation", min_length=2, max_length=2), required=True, readonly=True)
class ILocaleIdentity(Interface): """Identity information class for ILocale objects. Three pieces of information are required to identify a locale: o language -- Language in which all of the locale text information are returned. o script -- Script in which all of the locale text information are returned. o territory -- Territory for which the locale's information are appropriate. None means all territories in which language is spoken. o variant -- Sometimes there are regional or historical differences even in a certain country. For these cases we use the variant field. A good example is the time before the Euro in Germany for example. Therefore a valid variant would be 'PREEURO'. Note that all of these attributes are read-only once they are set (usually done in the constructor)! This object is also used to uniquely identify a locale. """ language = TextLine( title=u"Language Type", description=u"The language for which a locale is applicable.", constraint=re.compile(r'[a-z]{2}').match, required=True, readonly=True) script = TextLine( title=u"Script Type", description=u"""The script for which the language/locale is applicable.""", constraint=re.compile(r'[a-z]*').match) territory = TextLine( title=u"Territory Type", description=u"The territory for which a locale is applicable.", constraint=re.compile(r'[A-Z]{2}').match, required=True, readonly=True) variant = TextLine( title=u"Variant Type", description=u"The variant for which a locale is applicable.", constraint=re.compile(r'[a-zA-Z]*').match, required=True, readonly=True) version = Field( title=u"Locale Version", description=u"The value of this field is an ILocaleVersion object.", readonly=True) def __repr__(self): """Defines the representation of the id, which should be a compact
class ILocaleCurrency(Interface): """Defines a particular currency.""" type = TextLine(title=u'Type') symbol = TextLine(title=u'Symbol') displayName = TextLine(title=u'Official Name') symbolChoice = Bool(title=u'Symbol Choice')
class INumberFormat(IFormat): u"""Specific number formatting interface. Here are the formatting rules (I modified the rules from ICU a bit, since I think they did not agree well with the real world XML formatting strings): posNegPattern := ({subpattern};{subpattern} | {subpattern}) subpattern := {padding}{prefix}{padding}{integer}{fraction} {exponential}{padding}{suffix}{padding} prefix := '\u0000'..'\uFFFD' - specialCharacters * suffix := '\u0000'..'\uFFFD' - specialCharacters * integer := {digitField}'0' fraction := {decimalPoint}{digitField} exponential := E integer digitField := ( {digitField} {groupingSeparator} | {digitField} '0'* | '0'* | {optionalDigitField} ) optionalDigitField := ( {digitField} {groupingSeparator} | {digitField} '#'* | '#'* ) groupingSeparator := , decimalPoint := . padding := * '\u0000'..'\uFFFD' Possible pattern symbols: 0 A digit. Always show this digit even if the value is zero. # A digit, suppressed if zero . Placeholder for decimal separator , Placeholder for grouping separator E Separates mantissa and exponent for exponential formats ; Separates formats (that is, a positive number format verses a negative number format) - Default negative prefix. Note that the locale's minus sign character is used. + If this symbol is specified the locale's plus sign character is used. % Multiply by 100, as percentage ? Multiply by 1000, as per mille \u00A4 This is the currency sign. it will be replaced by a currency symbol. If it is present in a pattern, the monetary decimal separator is used instead of the decimal separator. \u00A4\u00A4 This is the international currency sign. It will be replaced by an international currency symbol. If it is present in a pattern, the monetary decimal separator is used instead of the decimal separator. X Any other characters can be used in the prefix or suffix ' Used to quote special characters in a prefix or suffix """ symbols = Dict( title=u"Number Symbols", key_type=Choice( title=u"Dictionary Class", values=(u'decimal', u'group', u'list', u'percentSign', u'nativeZeroDigit', u'patternDigit', u'plusSign', u'minusSign', u'exponential', u'perMille', u'infinity', u'nan')), value_type=TextLine(title=u"Symbol"))
class ITestSchema(Interface): """A test schema""" foo = TextLine( title=_(u"Foo"), description=_(u"Foo description"), default=u"", required=True) bar = TextLine( title=_(u"Bar"), description=_(u"Bar description"), default=u"", required=False) attribute = Attribute("Test attribute, an attribute can't be validated.")
class IMessageCatalog(Interface): """A catalog (mapping) of message ids to message text strings. This interface provides a method for translating a message or message id, including text with interpolation. The message catalog basically serves as a fairly simple mapping object. A single message catalog represents a specific language and domain. Therefore you will have the following constructor arguments: language -- The language of the returned messages. This is a read-only attribute. domain -- The translation domain for these messages. This is a read-only attribute. See ITranslationService. When we refer to text here, we mean text that follows the standard Zope 3 text representation. Note: The IReadMessageCatalog is the absolut minimal version required for the TranslationService to function. """ def getMessage(msgid): """Get the appropriate text for the given message id. An exception is raised if the message id is not found. """ def queryMessage(msgid, default=None): """Look for the appropriate text for the given message id. If the message id is not found, default is returned. """ language = TextLine( title=u"Language", description=u"The language the catalog translates to.", required=True) domain = TextLine( title=u"Domain", description=u"The domain the catalog is registered for.", required=True) def getIdentifier(): """Return a identifier for this message catalog. Note that this
class ILocaleFormatLength(Interface): """The format length describes a class of formats.""" type = Choice(title=u"Format Length Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')) default = TextLine(title=u"Default Format", description=u"The name of the defaulkt format.") formats = Dict(title=u"Formats", description=u"Maps format types to format objects", key_type=TextLine(title=u"Format Type"), value_type=Field( title=u"Format Object", description=u"Values are ILocaleFormat objects."), required=True, readonly=True)
class ILocaleFormat(Interface): """Specifies a format for a particular type of data.""" type = TextLine(title=u"Format Type", description=u"The name of the format", required=False, readonly=True) displayName = TextLine( title=u"Display Name", description=u"Name of the calendar, for example 'gregorian'.", required=False, readonly=True) pattern = TextLine( title=u"Format Pattern", description=u"The pattern that is used to format the object.", required=True, readonly=True)
class ILocaleDates(Interface): """This object contains various data about dates, times and time zones.""" localizedPatternChars = TextLine( title=u"Localized Pattern Characters", description=u"Localized pattern characters used in dates and times") calendars = Dict( title=u"Calendar type to ILocaleCalendar", key_type=Choice(title=u"Calendar Type", values=(u'gregorian', u'arabic', u'chinese', u'civil-arabic', u'hebrew', u'japanese', u'thai-buddhist')), value_type=Field(title=u"Calendar", description=u"This is a ILocaleCalendar object.")) timezones = Dict(title=u"Time zone type to ILocaleTimezone", key_type=TextLine(title=u"Time Zone type"), value_type=Field( title=u"Time Zone", description=u"This is a ILocaleTimeZone object.")) def getFormatter(category, length=None, name=None, calendar=u'gregorian'): """Get a date/time formatter.
class ILocaleInheritance(Interface): """Locale inheritance support. Locale-related objects implementing this interface are able to ask for its inherited self. For example, 'en_US.dates.monthNames' can call on itself 'getInheritedSelf()' and get the value for 'en.dates.monthNames'. """ __parent__ = Attribute("The parent in the location hierarchy") __name__ = TextLine( title=u"The name within the parent", description=u"""The parent can be traversed with this name to get the object.""") def getInheritedSelf(): """Return itself but in the next higher up Locale."""
class ITranslationDomain(Interface): """The Translation Domain utility This interface provides methods for translating text, including text with interpolation. When we refer to text here, we mean text that follows the standard Zope 3 text representation. The domain is used to specify which translation to use. Different products will often use a specific domain naming translations supplied with the product. A favorite example is: How do you translate 'Sun'? Is it our star, the abbreviation of Sunday or the company? Specifying the domain, such as 'Stars' or 'DaysOfWeek' will solve this problem for us. Standard arguments in the methods described below: msgid -- The id of the message that should be translated. This may be an implicit or an explicit message id. mapping -- The object to get the interpolation data from. target_language -- The language to translate to. context -- An object that provides contextual information for determining client language preferences. It must implement or have an adapter that implements IUserPreferredLanguages. It will be to determine the language to translate to if target_language is not specified explicitly. Also note that language tags are defined by RFC 1766. """ domain = TextLine( title=u"Domain Name", description=u"The name of the domain this object represents.", required=True) def translate(msgid, mapping=None, context=None, target_language=None, default=None): """Return the translation for the message referred to by msgid.
class ILocaleVersion(Interface): """Represents the version of a locale. The locale version is part of the ILocaleIdentity object. """ number = TextLine(title=u"Version Number", description=u"The version number of the locale.", constraint=re.compile(r'^([0-9].)*[0-9]$').match, required=True, readonly=True) generationDate = Date( title=u"Generation Date", description=u"Specifies the creation date of the locale.", constraint=lambda date: date < datetime.now(), readonly=True) notes = Text( title=u"Notes", description=u"Some release notes for the version of this locale.", readonly=True)
class ILocaleNumbers(Interface): """This object contains various data about numbers and currencies.""" symbols = Dict(title=u"Number Symbols", key_type=Choice(title=u"Format Name", values=(u'decimal', u'group', u'list', u'percentSign', u'nativeZeroDigit', u'patternDigit', u'plusSign', u'minusSign', u'exponential', u'perMille', u'infinity', u'nan')), value_type=TextLine(title=u"Symbol")) defaultDecimalFormat = TextLine(title=u"Default Decimal Format Type") decimalFormats = Dict( title=u"Decimal Formats", description=u"Contains various Decimal Formats.", key_type=Choice(title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) defaultScientificFormat = TextLine(title=u"Default Scientific Format Type") scientificFormats = Dict( title=u"Scientific Formats", description=u"Contains various Scientific Formats.", key_type=Choice(title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) defaultPercentFormat = TextLine(title=u"Default Percent Format Type") percentFormats = Dict( title=u"Percent Formats", description=u"Contains various Percent Formats.", key_type=Choice(title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) defaultCurrencyFormat = TextLine(title=u"Default Currency Format Type") currencyFormats = Dict( title=u"Currency Formats", description=u"Contains various Currency Formats.", key_type=Choice(title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) currencies = Dict(title=u"Currencies", description=u"Contains various Currency data.", key_type=TextLine( title=u"Type", description=u"Name of the format length"), value_type=Field(title=u"ILocaleCurrency object")) def getFormatter(category, length=None, name=u''): """Get the NumberFormat based on the category, length and name of the format. The 'category' specifies the type of number format you would like to have. The available options are: 'decimal', 'percent', 'scientific', 'currency'. The 'length' specifies the output length of the number. The allowed values are: 'short', 'medium', 'long' and 'full'. If no length was specified, the default length is chosen. Every length can have actually several formats. In this case these formats are named and you can specify the name here. If no name was specified, the first unnamed format is chosen. """ def getDefaultCurrency(): """Get the default currency."""
class ILocaleCalendar(Interface): """There is a massive amount of information contained in the calendar, which made it attractive to be added.""" type = TextLine( title=u"Calendar Type", description=u"Name of the calendar, for example 'gregorian'.") months = Dict( title=u"Month Names", description=u"A mapping of all month names and abbreviations", key_type=Int(title=u"Type", min=1, max=12), value_type=Tuple(title=u"Month Name and Abbreviation", min_length=2, max_length=2)) days = Dict(title=u"Weekdays Names", description=u"A mapping of all month names and abbreviations", key_type=Choice(title=u"Type", values=(u'sun', u'mon', u'tue', u'wed', u'thu', u'fri', u'sat')), value_type=Tuple(title=u"Weekdays Name and Abbreviation", min_length=2, max_length=2)) week = Dict(title=u"Week Information", description=u"Contains various week information", key_type=Choice(title=u"Type", description=u""" Varies Week information: - 'minDays' is just an integer between 1 and 7. - 'firstDay' specifies the first day of the week by integer. - The 'weekendStart' and 'weekendEnd' are tuples of the form (weekDayNumber, datetime.time) """, values=(u'minDays', u'firstDay', u'weekendStart', u'weekendEnd'))) am = TextLine(title=u"AM String") pm = TextLine(title=u"PM String") eras = Dict(title=u"Era Names", key_type=Int(title=u"Type", min=0), value_type=Tuple(title=u"Era Name and Abbreviation", min_length=2, max_length=2)) defaultDateFormat = TextLine(title=u"Default Date Format Type") dateFormats = Dict(title=u"Date Formats", description=u"Contains various Date Formats.", key_type=Choice( title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) defaultTimeFormat = TextLine(title=u"Default Time Format Type") timeFormats = Dict(title=u"Time Formats", description=u"Contains various Time Formats.", key_type=Choice( title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) defaultDateTimeFormat = TextLine(title=u"Default Date-Time Format Type") dateTimeFormats = Dict( title=u"Date-Time Formats", description=u"Contains various Date-Time Formats.", key_type=Choice(title=u"Type", description=u"Name of the format length", values=(u'full', u'long', u'medium', u'short')), value_type=Field(title=u"ILocaleFormatLength object")) def getMonthNames(): """Return a list of month names.""" def getMonthTypeFromName(name): """Return the type of the month with the right name.""" def getMonthAbbreviations(): """Return a list of month abbreviations.""" def getMonthTypeFromAbbreviation(abbr): """Return the type of the month with the right abbreviation.""" def getDayNames(): """Return a list of weekday names.""" def getDayTypeFromName(name): """Return the id of the weekday with the right name.""" def getDayAbbr(): """Return a list of weekday abbreviations.""" def getDayTypeFromAbbr(abbr): """Return the id of the weekday with the right abbr.""" def isWeekend(datetime): """Determines whether a the argument lies in a weekend.""" def getFirstDayName(): """Return the the type of the first day in the week."""
class ILocaleDisplayNames(Interface): """Localized Names of common text strings. This object contains localized strings for many terms, including language, script and territory names. But also keys and types used throughout the locale object are localized here. """ languages = Dict(title=u"Language type to translated name", key_type=TextLine(title=u"Language Type"), value_type=TextLine(title=u"Language Name")) scripts = Dict(title=u"Script type to script name", key_type=TextLine(title=u"Script Type"), value_type=TextLine(title=u"Script Name")) territories = Dict(title=u"Territory type to translated territory name", key_type=TextLine(title=u"Territory Type"), value_type=TextLine(title=u"Territory Name")) variants = Dict(title=u"Variant type to name", key_type=TextLine(title=u"Variant Type"), value_type=TextLine(title=u"Variant Name")) keys = Dict(title=u"Key type to name", key_type=TextLine(title=u"Key Type"), value_type=TextLine(title=u"Key Name")) types = Dict(title=u"Type type and key to localized name", key_type=Tuple(title=u"Type Type and Key"), value_type=TextLine(title=u"Type Name"))