Mailinglist Archive: yast-devel (61 mails)

< Previous Next >
Re: [yast-devel] Idea: Dynamic Folding of Translated Texts
  • From: Knut Alejandro Anderssen González <kanderssen@xxxxxxx>
  • Date: Fri, 13 May 2016 09:21:40 +0100
  • Message-id: <>
Have we got some decision about this?, to know if let it in the network
module by now just for the current problem or move it to a more generic
class trying to DRY.

On 05/12/2016 12:48 PM, Knut Alejandro Anderssen González wrote:

On 05/12/2016 08:49 AM, Ladislav Slezak wrote:
Dne 12.5.2016 v 08:49 Lukas Ocilka napsal(a):
# Example

You are trying to create subvolume {new_subvolume_name} which would be
shadowed by subvolume {old_subvolume_name} and thus might not produce
the desired effect. Continue despite the fact that we have warned you?

In bad the example above, subvolumes can be short, but they can be also
very long. Some languages will use very long translation, some other
ones a shorter one.

My workaround is to put the variable text on a separate line to avoid text
overflow, e.g [1]:

# %s is an extension name, e.g. "SUSE Linux Enterprise Software
Development Kit"
Yast::Report.Error(_("Downloading the license for\n%s\nfailed.") %

In this case i used same workaround, but i didn't take care of the first
line size and also we have the problems about unkown number of
interfaces per physical port id.

The code is something like that:
+ Popup.YesNoHeadline(
+ Label.WarningMsg,
+ _("The interfaces selected for bonding map to same physical
port \n" \
+ "and bonding them may not have the desire result.\n\n%s\n" \
+ "Really continue?\n") % message
+ )

And the message was something like:

+ message = ""
+ physical_port_ids.each do |port, devs|
+ message << "PhysicalPortID (#{port}): devs.join(', ')\n"
+ end

So after the Lukas suggestion i added:

+ message = ""
+ physical_port_ids.each do |port, devs|
+ message << "PhysicalPortID (#{port}):\n"
+ message << "#{devices_to_s(devs)}\n"
+ end

+ def devices_to_s(devices, wrap=78)
+ lines = []
+ message_line = ""
+ do |d|
+ if !message_line.empty? && "#{message_line}#{d}".size > wrap
+ lines << message_line
+ message_line = ""
+ end
+ message_line << ", " if !message_line.empty?
+ message_line << d
+ end
+ lines << message_line if !message_line.empty?
+ lines.join("\n")
+ end

The devices_to_s is almost the same method as the one referenced in
kobliha link.

And now i will try to take care of number of lines as you could have
many (physical_ports_ids).

You can see the results here:

Apart of the Rails wrap method, there is some gem that implements it.

This workaround makes sense when the text is usually long. When the variable
text is short then it looks ugly.

# Solution

Basically something like `fold`, but implemented in Ruby without calling
shell. Maybe in Yast::String, maybe even as a Yast built-in (fold, wrap,

Actually this should be implemented on the UI level as only the UI can know
much space there is and how long text can fit there.

Moreover in Qt we use proportional font, that means "iiiiiiiiiiiiiiiiii"
might fit while "mmmmmmmmmmmmmmmmmm" might not even though both have the
exactly same number of characters. And I guess with non-Latin alphabets
Japanese, ...) it would break very easily...

The implementation at the YaST logic layer would not work well in many cases,
IMHO that's a wrong place for this functionality.

# Solution 2

My suggestion would be to add Opt(:wrap) option to the Label() widget which
would enable the line wrapping. The text would be a single line and the UI
would take care of breaking the lines at the appropriate places. Example:

Label(Opt(:wrap), "verlongtext" * 42)

What do you think about it?



Ladislav Slezák
Appliance department / YaST Developer
Lihovarská 1060/12
190 00 Prague 9 / Czech Republic
tel: +420 284 028 960

Knut Alejandro Anderssen González
YaST Team at SUSE Linux GmbH
To unsubscribe, e-mail: yast-devel+unsubscribe@xxxxxxxxxxxx
To contact the owner, e-mail: yast-devel+owner@xxxxxxxxxxxx

< Previous Next >
Follow Ups