You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Konrad Windszus (JIRA)" <ji...@apache.org> on 2017/03/29 13:42:42 UTC
[jira] [Updated] (SLING-517) Improve i18n node types
[ https://issues.apache.org/jira/browse/SLING-517?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Konrad Windszus updated SLING-517:
----------------------------------
Component/s: i18n
> Improve i18n node types
> -----------------------
>
> Key: SLING-517
> URL: https://issues.apache.org/jira/browse/SLING-517
> Project: Sling
> Issue Type: Improvement
> Components: Extensions, i18n
> Affects Versions: I18n 2.0.2
> Reporter: Alexander Klimetschek
> Assignee: Carsten Ziegeler
> Fix For: I18n 2.0.2
>
>
> As discussed on the mailing list http://markmail.org/message/dobbllzzimgtwssg, the current node types in the i18n bundle should be improved regarding naming and a more efficient and human-readable content structure.
> 1) Rename node type "sling:Language" to "sling:MessageBundle", because it is a container for messages, not a language.
> 2) "sling:MessageBundle" only contains "sling:Message"s - we don't want to mix it with other content if this structure is typically auto-generated (eg. XLIFF importer)
> 3) "sling:MessageBundle" extends nt:hierarchyNode to be able to place it inside a nt:folder.
> 4) "sling:Message" can be a node type, I don't see the case where one wants to mix it with an existing node type structure and needs a mixin. "sling:MessageEntry" can be removed then.
> 5) "sling:Message" does not need to inherit from nt:hierarchyNode anymore (it will only be use inside sling:MessageBundle, which can be put into an nt:folder)
> 6) The sling:key should be optional and only be used if the actual key (which would typically be the original, eg. english, source string) is not a valid JCR name. Otherwise the node name should be the key (no need for generating message1, message2, etc.)
> 7) If the key is not valid for the jcr name, we generate a valid name based on the key, to make the node structure more browsable.
> Here is a pseudo algorithm for generating the key:
> input: node name
> esc = cut off 50 char from key
> esc = escape esc (using org.apache.jackrabbit.util.Text.escapeIllegalJcrChars())
> if escaped == original key => put in node name
> else => put in sling:key property, use
> ensure unique name! append number
> 8) JcrResourceBundle must be changed that it always loads all entries from the sling:MessageBundle into a hashmap (as it does now already if one calls ResourceBundle.getKeys()). This way it knows the correct keys which are either in the node name or in the sling:key property because it loads them properly upon intial loading. The single key query that is done in ResourceBundle.handleGetObject() will be changed to access the hashmap only.
> The latter change should improve performance due to in-memory caching, albeit the first call to getObject() or getString() will be a bit slower.
> New node types
> =============
> [sling:MessageBundle] > nt:hierarchyNode, mix:language
> - basename (string)
> + * (sling:Message)
> [sling:Message] > nt:base
> - sling:key (string)
> - sling:message (undefined)
> Example (new) node tree
> ====================
> /libs/languages
> + Deutsch (sling:MessageBundle)
> - jcr:language = de-ch
> + Ok (sling:Message)
> - sling:message = "'sch Ok"
> + Lorem_Ipsum_001 (sling:Message)
> - sling:key = "Lorem Ipsum is simply [...]"
> - sling:message = "Mir doch egal."
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)