[vlc-commits] [Git][videolan/vlc][master] 2 commits: qt: add plural support for QML qsTr
Steve Lhomme (@robUx4)
gitlab at videolan.org
Sun Mar 15 05:40:53 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
7b50365f by Leon Vitanos at 2026-03-15T04:32:48+00:00
qt: add plural support for QML qsTr
- - - - -
1ea9975c by Leon Vitanos at 2026-03-15T04:32:48+00:00
qml: use plural qsTr for track and playlist labels
- - - - -
10 changed files:
- modules/gui/qt/medialibrary/qml/ArtistTopBanner.qml
- modules/gui/qt/medialibrary/qml/MusicAlbumSectionDelegate.qml
- modules/gui/qt/medialibrary/qml/MusicAlbumsGridExpandDelegate.qml
- modules/gui/qt/medialibrary/qml/MusicAllArtists.qml
- modules/gui/qt/medialibrary/qml/MusicGenres.qml
- modules/gui/qt/medialibrary/qml/PlaylistMediaList.qml
- modules/gui/qt/qt.cpp
- modules/gui/qt/widgets/qml/DragItem.qml
- modules/gui/qt/widgets/qml/TableColumns.qml
- po/Makevars
Changes:
=====================================
modules/gui/qt/medialibrary/qml/ArtistTopBanner.qml
=====================================
@@ -212,7 +212,7 @@ FocusScope {
Layout.topMargin: VLCStyle.margin_xxxsmall
- text: qsTr("%1 Songs").arg(artist.nb_tracks)
+ text: qsTr("%1 Song", "%1 Songs", Number(artist.nb_tracks)).arg(artist.nb_tracks)
color: theme.fg.secondary
}
=====================================
modules/gui/qt/medialibrary/qml/MusicAlbumSectionDelegate.qml
=====================================
@@ -189,7 +189,7 @@ T.Pane {
parts.push(year)
const count = _albumData.nb_tracks ?? 0
- parts.push(qsTr("%1 track(s)").arg(count))
+ parts.push(qsTr("%1 track", "%1 tracks", count).arg(count))
const duration = _albumData.duration?.formatHMS()
if (duration)
=====================================
modules/gui/qt/medialibrary/qml/MusicAlbumsGridExpandDelegate.qml
=====================================
@@ -68,10 +68,7 @@ FocusScope {
function _getStringTrack() {
const count = model?.nb_tracks ?? 0;
- if (count < 2)
- return qsTr("%1 track").arg(count);
- else
- return qsTr("%1 tracks").arg(count);
+ return qsTr("%1 track", "%1 tracks", count).arg(count);
}
readonly property ColorContext colorContext: ColorContext {
=====================================
modules/gui/qt/medialibrary/qml/MusicAllArtists.qml
=====================================
@@ -141,7 +141,7 @@ MainViewLoader {
fallbackImage: VLCStyle.noArtArtistSmall
title: model.name || qsTr("Unknown artist")
- subtitle: model.nb_tracks > 1 ? qsTr("%1 songs").arg(model.nb_tracks) : qsTr("%1 song").arg(model.nb_tracks)
+ subtitle: qsTr("%1 song", "%1 songs", model.nb_tracks).arg(model.nb_tracks)
titleTopMargin: artistGrid.titleTopMargin
playIconSize: VLCStyle.play_cover_small
textAlignHCenter: true
=====================================
modules/gui/qt/medialibrary/qml/MusicGenres.qml
=====================================
@@ -201,7 +201,7 @@ MainViewLoader {
Widgets.CaptionLabel {
width: overlay.width
- text: model.nb_tracks > 1 ? qsTr("%1 Tracks").arg(model.nb_tracks) : qsTr("%1 Track").arg(model.nb_tracks)
+ text: qsTr("%1 Track", "%1 Tracks", model.nb_tracks).arg(model.nb_tracks)
opacity: .7
color: "white"
horizontalAlignment: Text.AlignHCenter
=====================================
modules/gui/qt/medialibrary/qml/PlaylistMediaList.qml
=====================================
@@ -202,8 +202,10 @@ MainViewLoader {
items.push(root.model.data(i, MLPlaylistListModel.PLAYLIST_ID))
}
console.assert(items.length > 0)
- if (DialogsProvider.questionDialog(qsTr("Do you really want to delete the selected playlist(s)?"),
- qsTr("Delete playlist(s)")))
+ if (DialogsProvider.questionDialog(qsTr("Do you really want to delete the selected playlist?",
+ "Do you really want to delete the selected playlists?",
+ items.length),
+ qsTr("Delete playlist", "Delete playlists", items.length)))
root.model.deletePlaylists(items)
} else {
console.warn(root, ": Nothing to delete")
@@ -325,8 +327,7 @@ MainViewLoader {
title: (model.name) ? model.name
: qsTr("Unknown title")
- labels: (model.count > 1) ? [ qsTr("%1 Tracks").arg(_getCount(model)) ]
- : [ qsTr("%1 Track") .arg(_getCount(model)) ]
+ labels: [ qsTr("%1 Track", "%1 Tracks", _getCount(model)).arg(_getCount(model)) ]
dragItem: dragItemPlaylist
=====================================
modules/gui/qt/qt.cpp
=====================================
@@ -533,9 +533,10 @@ public:
int n = -1) const override
{
Q_UNUSED(context);
- Q_UNUSED(disambiguation);
- Q_UNUSED(n);
- const char* const text = vlc_gettext(sourceText);
+
+ const char* text = (n >= 0 && disambiguation != nullptr) ? vlc_ngettext(sourceText, disambiguation, n)
+ : vlc_gettext(sourceText);
+
assert(text);
return QString::fromUtf8(text);
}
=====================================
modules/gui/qt/widgets/qml/DragItem.qml
=====================================
@@ -625,9 +625,10 @@ Item {
const data = dragItem._data[0]
const title = data?.title
if (dragItem._indexesSize === 1) {
- const extra = (data?.nb_tracks > 0) ? qsTr("\n%1 track(s)").arg(data.nb_tracks)
- : ((data?.count > 0) ? qsTr("\n%1 item(s)").arg(data.count)
- : "")
+ const extra = data?.nb_tracks > 0 ? "\n" + qsTr("%1 track", "%1 tracks", data?.nb_tracks).arg(data?.nb_tracks) :
+ data?.count > 0 ? "\n" + qsTr("%1 item", "%1 items", data?.count).arg(data?.count) :
+ ""
+
if (title && title.length > 0) {
return title + extra
} else {
=====================================
modules/gui/qt/widgets/qml/TableColumns.qml
=====================================
@@ -81,7 +81,7 @@ Item {
string += value.formatShort()
} else if (criteria === "nb_tracks") {
- string += qsTr("%1 tracks").arg(value)
+ string += qsTr("%1 track", "%1 tracks", value).arg(value)
} else {
string += value
}
=====================================
po/Makevars
=====================================
@@ -10,7 +10,7 @@ subdir = po
top_builddir = ..
# These options get passed to xgettext.
-XGETTEXT_OPTIONS = --directory=.. --keyword=_ --keyword=N_ --keyword=_NS --keyword=qtr --keyword=qsTr --keyword=Q_ --language=C++ --keyword=vlc_ngettext:1,2 --keyword=vlc_pgettext:1c,2 --keyword=_PNS:1c,2 --add-comments=xgettext: --from-code=UTF-8
+XGETTEXT_OPTIONS = --directory=.. --keyword=_ --keyword=N_ --keyword=_NS --keyword=qtr --keyword=qsTr:1,1t --keyword=qsTr:1,2,3t --keyword=Q_ --language=C++ --keyword=vlc_ngettext:1,2 --keyword=vlc_pgettext:1c,2 --keyword=_PNS:1c,2 --add-comments=xgettext: --from-code=UTF-8
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c78ab119ae03152cf43b5a512f7076a566f98fa0...1ea9975ccca1f7872aac40d2b1cd1ca00ce6cd94
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c78ab119ae03152cf43b5a512f7076a566f98fa0...1ea9975ccca1f7872aac40d2b1cd1ca00ce6cd94
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list