I think that all of these are hacks, and this one is a bit, too:

<unit($n) { $n < 1024 ? "B" :
                "kB" }>
<value($n) { $n < 1024 ? $n :
                $n/1024 }>
<betterNotify "{{ value($num) }} {{unit($num) }}">


This would work great, if we had number formatting, and if we had macros.

I think the double resolve is good until then, but please pass in the fileSize as argument, so that we can pluralize octets.

Axel


On 8/31/15 7:08 AM, Zibi Braniecki wrote:
Hi all,

I'm trying to figure out how to solve in L20n a certain pattern in Gaia that 
currently requires pretty weird back-and-forth between JS and l10n code.

That pattern is units. Common code looks like this:

--------------------

# File sizes
byteUnit-B  = B
byteUnit-KB = KB
byteUnit-MB = MB
byteUnit-GB = GB
byteUnit-TB = TB
byteUnit-PB = PB
byteUnit-EB = EB
byteUnit-ZB = ZB
byteUnit-YB = YB

fileSize    = {{size}} {{unit}}

--------------------

And that requiers JS code like this:

document.l10n.formatValue('byteUnit-' + unit).then(unitString => {
   document.l10n.setAttributes(element, 'fileSize', {
     unit: unitString
   });
});


---------------

Can we do this better in L20n? We can, but I'm not sure what pattern should we 
use and I think it's related to some things that Stas was wondering about some 
time ago.

1) One approach might be:

<byteUnit {
   B: "B",
   KB: "KB",
   MB: "MB"
}>

<fileSize "{{$size}} {{byteUnit[$unit]}}">

-------------------

The problem with this approach is that it abuses hash values. Those are not *variants* of the 
same string, those are different strings. It would be pretty weird if a localizer decided to 
translate it as <bytUnit "B">, right?

Additionally, it's the only case scenario I can come up with that would 
validate the concept of a non-resolvable value. A Hash value without an index 
or default value.

Should we allow for that?

2) Another approach might be something like this:

<byteUnit
  B: "B",
  KB: "KB",
  MB: "MB">


<fileSize "{{$size}} {{byteUnit::[$unit]}}">

But then again. Are those attributes of an entity?

3) Another option would be to keep each unit as a separate entity:

<byteUnit_b "B">
<byteUnit_kb "KB">
<byteUnit_mb "MB">

but then... how do I construct a placeable to reference unit that is a concatenated 
string ("byteUnit_" + $unit)?

I guess there may be more than those three approaches. Other ideas?

In the future, it would be awesome to have a macro/global that gives you the right unit size and integer for 
a given byte integer. Something where you pass "1025" and it returns "1" and 
"kb", but I don't think we'll get to macros anytime soon.

What do you think?
zb.


_______________________________________________
tools-l10n mailing list
[email protected]
https://lists.mozilla.org/listinfo/tools-l10n

Reply via email to