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]
