[ 
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)

Reply via email to