<table><tr><td style="">aacid added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D10446">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D10446#376825" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D10446#376825</a>, <a href="https://phabricator.kde.org/p/sitter/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;">@sitter</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>Stacking the functions seems to work fine</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="text" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);">QString KLanguageName::nameForCode(const QString &code)
{
    const QStringList parts = QLocale().name().split(QChar('_'));
    return nameForCodeInLocale(code, parts.at(0));
}</pre></div>

<p>I do have various refinements and fixes for the logic plus a unit test I can update the diff if you are ok with that.</p></div>
</blockquote>

<p>Sure, tests are nice i remember this was kind of a bit of a hit and miss sometimes. But are you going to depend on having all of l10n installed (which is where kf5_entry.desktop files come from or will you have some fake kf5_entry.destkops for the test? (second would be awesome)</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>As for kcoreaddons, I don't think we could go there with kconfig could we? And I am not sure QSettings is up to the task?</p></blockquote>

<p>QSettings doesn't support language entries AFAIK</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>I also have some behavior concerns. The auto-fallback to QLocale is super handy, but isn't very flexible: As an application author I might have another way to map a language to a pretty string, if KLanguageName automatically falls back to QLocale, I won't be able to easily determine if I should use another (possibly better) fallback.<br />
 At the same time falling back to <tt style="background: #ebebeb; font-size: 13px;">QLocale::languageToString</tt> is not necessarily in the interest of the user either. Who's to say the user will know what a language means in English.</p>

<p>So, I haven't give this a great deal of thought, but it seems that always returning QString(), if we cannot resolve a string internally, is possibly more flexible. Worst case the consumer has to do:</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="text" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);">str = KLanguageName::nameForCode("fr")
if (str.isEmpty()) { str = QLocale("fr").nativeLanguageName() }</pre></div>

<p>Which isn't that much code TBH.</p></blockquote>

<p>But you end up repeating that in lots of places (which we should there's lots of places that suffer from trying to guess a language name at this point, and all of them went the bad way one way or another). If you want to give some random potential user more flexibility i'm fine with that, add some flags, but i want the "give me the best you can do" possibility to still work. Maybe we should even never return an empty string and worst case scenario return code back.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R265 KConfigWidgets</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D10446">https://phabricator.kde.org/D10446</a></div></div><br /><div><strong>To: </strong>aacid<br /><strong>Cc: </strong>kde-frameworks-devel, sitter, markg, apol, michaelh, ngraham, bruns<br /></div>