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