Review Request 129568: Change strings to address i18n issues

Alexander Potashev aspotashev at gmail.com
Sat Oct 13 17:46:48 BST 2018



> On Dec. 14, 2016, 1:37 a.m., Albert Astals Cid wrote:
> > src/Gui/SmartSpinBox.cpp
> > Line 43 (original), 43 (patched)
> > <https://git.reviewboard.kde.org/r/129568/diff/2/?file=487106#file487106line43>
> >
> >     is there a reason this really needs to be a double?
> >     
> >     Is it critical to be able to take a screenshot in 2.4 seconds?
> >     
> >     If it is, this thing should probably look like
> >     
> >     if (val == (int)val) {
> >       // it's an integer
> >       setSuffix(i18np(" second", " seconds", int(val)));
> >     } else {
> >       // it's a decimal number
> >       setSuffix(i18n(" seconds")); 
> >     }
> 
> Peter Wu wrote:
>     Being able to take a screenshot after 100ms (ASAP, but allowing the cursor to be moved for example) might be a valid use case.
>     
>     What is the reason for adding a special case for decimal numbers? I am following the suggestion from https://bugs.kde.org/show_bug.cgi?id=341692#c5 to use `floor(val)`. Your suggestion would result in "1.1 seconds" while Alexander thinks it should be "1.1 second".
> 
> Albert Astals Cid wrote:
>     I don't know why you reopened that bug.
>     
>     The solution was clear, the only people that need different forms for plurals are scottish gaelic, and they are using scripted translations to handle that, so i18n(" seconds") is fine for them.
>     
>     Please tell me why what I suggested doesn't work.
> 
> Peter Wu wrote:
>     I reopened that bug since `i18np(" second", " seconds", double(val))` does not work when the value is a real number instead of an integer (bug?). The API silently ignores the value and assumes value zero IIRC.
>     
>     Now that I read Alexander's comment again, it seems that some languages really have a different translations for non-integer values (point "2" in his comment, the "else" branch in your suggestion). Is that a correct understanding?
> 
> Alexander Potashev wrote:
>     > The solution was clear, the only people that need different forms for plurals are scottish gaelic, and they are using scripted translations to handle that, so i18n(" seconds") is fine for them.
>     
>     Albert,
>     
>     I don't think it's scriptable because the string " seconds" (as in your i18n(" seconds")) does not have enough information to determine the plural form for Scottish Gaelic.
>     
>     What Chusslove suggested in https://bugs.kde.org/show_bug.cgi?id=341692#c1 does only work when you have i18np("some string", value).
> 
> Albert Astals Cid wrote:
>     So basically you're saying we can't produce a proper plural for Scottish Gaelic if using decimal numbers, i don't see how this should block this code review specifically since there's probably lots of places in our code with this issue.
> 
> Albert Astals Cid wrote:
>     ping?
> 
> Alexander Potashev wrote:
>     > So basically you're saying we can't produce a proper plural for Scottish Gaelic if using decimal numbers,
>     
>     Wrong. Like said in https://bugs.kde.org/show_bug.cgi?id=341692 , "real numbers behave like their floors in respect to plural forms", thus you can produce proper plurals for Scottish Gaelic if using integer numbers. But you can't produce proper Russian plurals using integers.
>     
>     BTW, decimal != integer.
>     
>     > i don't see how this should block this code review specifically since there's probably lots of places in our code with this issue.
>     
>     This code review can be merged as it probably doesn't make things much worse for most languages. However, for English "0.5 second" becomes "0.5 seconds" which may be bad.
> 
> Albert Astals Cid wrote:
>     > Like said in https://bugs.kde.org/show_bug.cgi?id=341692 , "real numbers behave like their floors in respect to plural forms", thus you can produce proper plurals for Scottish Gaelic if using integer numbers. But you can't produce proper Russian plurals using integers.
>     
>     I can't parse this sentence.
>     
>     > However, for English "0.5 second" becomes "0.5 seconds" which may be bad.
>     
>     0.5 seconds is the correct way to say it

To clear this up I made this table which tells how many word forms we should have for these languages:

N     | Russian form              | Scottish Gaelic form
0     | Z                         | D
0.5   | Y (same for all decimals) | D (same as for 0)
1     | X                         | A
1.5   | Y (same for all decimals) | A (same as for 1)
2     | Y                         | B
2.5   | Y (same for all decimals) | B (same as for 2)
3     | Y                         | C
5     | Z                         | C
100   | Z                         | D
100.5 | Y (same for all decimals) | D (same as for 100)

This may work:

if (val == (int)val) {
  // it's an integer
  setSuffix(i18ncp("integer number", " second", " seconds", int(val)));
} else {
  // it's a decimal number
  setSuffix(i18ncp("decimal number, %1=floor of the number", " seconds", " seconds", int(val))); 
}


- Alexander


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/129568/#review101427
-----------------------------------------------------------


On Dec. 6, 2016, 9:58 p.m., Peter Wu wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/129568/
> -----------------------------------------------------------
> 
> (Updated Dec. 6, 2016, 9:58 p.m.)
> 
> 
> Review request for KDE Graphics, Albert Astals Cid and Boudhayan Gupta.
> 
> 
> Repository: spectacle
> 
> 
> Description
> -------
> 
> Change strings to address i18n issues
> 
> Change "Preferences" to "Configure" (window title) and use a
> KStandardAction::preferences item (and get the "Configure Spectacle..."
> text for free).
> 
> Add TODO comment for inconsistent use of "screen" and "monitors", this
> requires more changes beyond changing text.
> 
> 
> Diffs
> -----
> 
>   doc/index.docbook 5ad5ef08d8834d4b8ac982ea5c1c928cdac5ecab 
>   src/Gui/ExportMenu.cpp 4b894c7d991140f08912a90eb41571108439264b 
>   src/Gui/KSMainWindow.cpp 5a4dd77564e98b961adcadcec18e5d5fad4d4bb4 
>   src/Gui/KSWidget.cpp 380bff6809131477446aaecb947c2d7b7dde3289 
>   src/Gui/SettingsDialog/SettingsDialog.cpp 7cfe8e2ca676a414d7a84a20b134b2e1ae89a9b3 
>   src/Gui/SmartSpinBox.cpp 4938f84f62b194fcbd2461915e628dfb45c4abb4 
> 
> 
> Diff: https://git.reviewboard.kde.org/r/129568/diff/2/
> 
> 
> Testing
> -------
> 
> Checked text under Save menu (icon has also changed), Configure dialog.
> 
> 
> Thanks,
> 
> Peter Wu
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-graphics-devel/attachments/20181013/9857937e/attachment.html>


More information about the Kde-graphics-devel mailing list