Dne 11.2.2015 v 18:18 Ancor Gonzalez Sosa napsal(a):
> While writing the YaST Journal module I faced a problem I'm not sure how to 
> solve.
> I wanted to format a date here: 
> https://github.com/ancorgs/yast-journal/blob/master/src/lib/systemd_journal/entry_presenter.rb#L49
>
>  I wanted to mimic the format used by journalctl itself, which in plain 
> English
> would be "%b %d %H:%M:%S". The problem is that using %b is not i18n-friendly.
> Obviously the problem goes further, like those crazy US people writing Feb. 
> 1st as
> 02/01/2015. :-)

The problem is that the Ruby interpreter does not use the standard glibc 
formatting
function strftime() which does support localization.

E.g. "%c" conversion specification in strftime() is rendered as "The preferred 
date
and time representation for the current locale." (see "man strftime").

Unfortunately, the Ruby implementation uses hardcoded English format for "%c" 
which
does not allow localization, see [1].

It seems that plain Ruby does not support localization much, e.g. even locale
dependent string comparison is missing...


> In Rails the i18n gem is used. It offers an "localize" method that deals with 
> date
> formatting 
> http://www.rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/Base:localize
> 
> But I don't know how to do it in YaST or if I'm the first one facing the 
> problem.

There are basically two possible solutions:

- Run "date" command and format the time using the external program, e.g.:

    SCR.Execute(path(".target.bash_output"), "date +%c -d '2015-01-28 
13:54:42'")

  This is suitable just for few date values, starting a new subshell for each 
date is
  quite ineffective. If you need to format many values then save them to a file 
and
  use "-f" date option.


- Use strftime() call in a C Ruby extension. We already do this for locale 
dependent
  string comparison, see Yast.strcoll() implementation in ruby-bindings [2].
  Similarly we can add a strftime() wrapper there.


The first solution is simpler but I'd rather prefer the second one as it has 
lower
overhead and scales better.



[1] http://rxr.whitequark.org/mri/source/ext/date/date_strftime.c?v=2.1.2#217
[2] 
https://github.com/yast/yast-ruby-bindings/blob/master/src/binary/Builtin.cc#L627


--

Best Regards

Ladislav Slezák
Yast Developer
------------------------------------------------------------------------
SUSE LINUX, s.r.o.                              e-mail: [email protected]
Lihovarská 1060/12                              tel: +420 284 028 960
190 00 Prague 9                                 fax: +420 284 028 951
Czech Republic                                  http://www.suse.cz/
-- 
To unsubscribe, e-mail: [email protected]
To contact the owner, e-mail: [email protected]

Reply via email to