OK, since we're using a PF, the Box[ResourceBundle] really isn't necessary,
either.

On Fri, Feb 27, 2009 at 11:12 AM, Derek Chen-Becker
<[email protected]>wrote:

> Take 3. Change the factory application to:
>
>
> LiftRules.resourceBundleFactories.toList.find(_.isDefinedAt(locale)).toList.map(_.apply(locale))
>
> Derek
>
>
> On Fri, Feb 27, 2009 at 11:05 AM, Derek Chen-Becker <[email protected]
> > wrote:
>
>> Tim, I just noticed that the PF type should be:
>>
>> type ResourceBundleFactoryPF =
>> PartialFunction[(String,Locale),Box[ResourceBundle]]
>>
>> The reason we wanted to use PFs was to allow specialization for a specific
>> language. I'm wondering whether the string parameter is really necessary,
>> since really that's intended to look up a bundle name via
>> ResourceBundle.getBundle. That would change the proposed code to:
>>
>> type ResourceBundleFactoryPF = PartialFunction[Locale,Box[ResourceBundle]]
>> var resourceBundleFactories : RulesSeq[ResourceBundleFactory]
>>
>> // In S.scala
>> def resourceBundles : List[ResourceBundle] =
>> ...
>> case Nil => _resBundle.set(LiftRules.resourceNames.flatMap(name =>
>> tryo {
>>  List(ResourceBundle.getBundle(name, locale))
>> } openOr {
>>  // I think this is right...
>>  
>> LiftRules.resourceBundleFactories.toList.find(_.isDefinedAt(locale)).map(_.apply(locale))
>> openOr Nil
>> }))
>>
>>
>> Derek
>>
>>
>>
>> On Fri, Feb 27, 2009 at 9:58 AM, Tim Perrett <[email protected]>wrote:
>>
>>>
>>> Guys,
>>>
>>> Me and Derek have just been chatting over IM debating the whole
>>> resource bundle loading mech in Lift. As you know, im working on this
>>> database localization stuff right now as I need it for work.
>>>
>>> Right now, were loading bundles using the normal
>>> ResourceBundle.getBundle methods from Java. Whilst this is good for
>>> most applications, when you need flexibility to do more compelx
>>> localization, it falls down a bit.
>>>
>>> Id like to propose adding a configurable "bundle factory" to
>>> LiftRules, so that we provide a localization hook. Something like:
>>>
>>> // LiftRules.scala
>>> type ResourceBundleFactoryPF = (String,Locale) => Box[ResourceBundle]
>>> var resourceBundleFactories : RulesSeq[ResourceBundleFactory]
>>>
>>> Then, in S.scala where we load the bundles, rather than having openOr
>>> Nil, it could fall through to the custom loaders like so:
>>>
>>> case Nil => _resBundle.set(LiftRules.resourceNames.flatMap(name =>
>>> tryo {
>>>  List(ResourceBundle.getBundle(name, locale))
>>> } openOr {
>>>  // load bundle factories, do something
>>>  // here to load them (not sure what yet!)
>>>  LiftRules.resourceBundleFactories
>>> }))
>>>
>>> Then in Boot.scala you could do:
>>>
>>> LiftRules.resourceBundleFactories.prepend {
>>>  case (basename, locale) => DBResourceBundle(basename, locale)
>>> }
>>>
>>> Thoughts?
>>>
>>> Cheers
>>>
>>> Tim
>>>
>>>
>>>
>>> >>>
>>>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to