[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Use existing convenience vlc_ngettext for plural form data type detail strings

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Sun Mar 29 11:01:36 UTC 2026



Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
d5b100b8 by Claudio Cambra at 2026-03-29T12:47:17+02:00
macosx: Use existing convenience vlc_ngettext for plural form data type detail strings

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
b65aab19 by Claudio Cambra at 2026-03-29T12:47:17+02:00
macosx: Also use vlc_ngettext in all audio groups media library item

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
a41101a4 by Claudio Cambra at 2026-03-29T12:47:17+02:00
macosx: Simplify plural string creation with new _NPS macro

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -


3 changed files:

- modules/gui/macosx/extensions/NSString+Helpers.h
- modules/gui/macosx/library/VLCLibraryDataTypes.m
- modules/gui/macosx/library/audio-library/VLCLibraryAllAudioGroupsMediaLibraryItem.m


Changes:

=====================================
modules/gui/macosx/extensions/NSString+Helpers.h
=====================================
@@ -35,6 +35,11 @@
  */
 #define _NS(s) NSTR(s)
 
+/**
+ * Get a pluralized translation string
+ */
+#define _NPS(s, p, n) [NSString stringWithFormat:toNSStr(vlc_ngettext(s, p, n)), (n)]
+
 /**
  * Get a contextualized translation string
  *


=====================================
modules/gui/macosx/library/VLCLibraryDataTypes.m
=====================================
@@ -524,19 +524,9 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const
 
 - (NSString *)durationString
 {
-    NSString *countMetadataString;
-    if (_numberOfAlbums > 1) {
-        countMetadataString = [NSString stringWithFormat:_NS("%u albums"), _numberOfAlbums];
-    } else {
-        countMetadataString = _NS("1 album");
-    }
-    if (_numberOfTracks > 1) {
-        countMetadataString = [countMetadataString stringByAppendingFormat:@", %@", [NSString stringWithFormat:_NS("%u songs"), _numberOfTracks]];
-    } else {
-        countMetadataString = [countMetadataString stringByAppendingFormat:@", %@", _NS("1 song")];
-    }
-
-    return countMetadataString;
+    NSString * const albumString = _NPS("%u album", "%u albums", _numberOfAlbums);
+    NSString * const songString = _NPS("%u song", "%u songs", _numberOfTracks);
+    return [NSString stringWithFormat:@"%@, %@", albumString, songString];
 }
 
 - (NSString *)genreString
@@ -766,11 +756,7 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const
 
 - (NSString *)durationString
 {
-    if (_numberOfTracks > 1) {
-        return [NSString stringWithFormat:_NS("%u songs"), _numberOfTracks];
-    } else {
-        return _NS("1 song");
-    }
+    return _NPS("%u song", "%u songs", _numberOfTracks);
 }
 
 - (NSArray<VLCMediaLibraryAlbum *> *)albums
@@ -1766,8 +1752,9 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const
         self.smallArtworkMRL = p_show->psz_artwork_mrl ? toNSStr(p_show->psz_artwork_mrl) : @"";
         self.smallArtworkGenerated = self.smallArtworkMRL.length > 0;
         self.displayString = self.name;
-        self.primaryDetailString = 
-            [NSString stringWithFormat:_NS("%u seasons, %u episodes"), _seasonCount, _episodeCount];
+        NSString * const seasonString = _NPS("%u season", "%u seasons", _seasonCount);
+        NSString * const episodeString = _NPS("%u episode", "%u episodes", _episodeCount);
+        self.primaryDetailString = [NSString stringWithFormat:@"%@, %@", seasonString, episodeString];
         self.secondaryDetailString = [NSString stringWithFormat:_NS("Released in %u"), _releaseYear];
         self.durationString = self.secondaryDetailString;
     }
@@ -1896,12 +1883,7 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const
                       withMediaItems:(NSArray<VLCMediaLibraryMediaItem *> *)mediaItems
 {
 
-    NSString *detailString;
-    if (mediaItems.count == 1) {
-        detailString = _NS("1 item");
-    } else {
-        detailString = [NSString stringWithFormat:_NS("%lu items"), (unsigned long)mediaItems.count];
-    }
+    NSString * const detailString = _NPS("%lu item", "%lu items", (unsigned long)mediaItems.count);
 
     self = [self initWithDisplayString:displayString
                withPrimaryDetailString:detailString


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAllAudioGroupsMediaLibraryItem.m
=====================================
@@ -55,9 +55,9 @@
     _numberOfTracks = _mediaItems.count;
 
     const NSUInteger numberOfAlbums = libraryModel.numberOfAlbums;
-    NSString * const primaryDetailString = [NSString stringWithFormat:_NS("%li albums, %li songs"),
-                                                     numberOfAlbums,
-                                                     _numberOfTracks];
+    NSString * const albumString = _NPS("%li album", "%li albums", numberOfAlbums);
+    NSString * const songString = _NPS("%li song", "%li songs", _numberOfTracks);
+    NSString * const primaryDetailString = [NSString stringWithFormat:@"%@, %@", albumString, songString];
 
     return [super initWithDisplayString:displayString
                 withPrimaryDetailString:primaryDetailString



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/42e66c82bd7e2180af846773ff6fcefcc41e2fd9...a41101a4965187e16a399251825564eea8a775b6

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/42e66c82bd7e2180af846773ff6fcefcc41e2fd9...a41101a4965187e16a399251825564eea8a775b6
You're receiving this email because of your account on code.videolan.org.




More information about the vlc-commits mailing list