Compare commits

...
5 Commits
Author SHA1 Message Date
blumia a31054b9d0 fix(CI): should use 6.11.2 for both Windows and macOS build 2026-08-19 20:21:57 +08:00
blumia 44e4a709c3 chore: allow drag to move window when maximized when Qt >= 6.11.2
Resolve: https://github.com/BLumia/pineapple-pictures/issues/184

Also use git version of aqtinstall for Qt 6.11.0+ for Windows
miurahr/aqtinstall#1007
2026-08-19 19:06:44 +08:00
715b3d3ebc i18n: Translations update from Hosted Weblate
Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: Tech-Tac <ahmad.tech.tac@gmail.com>
Co-authored-by: VenusGirl <VenusGirl@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ar/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ko/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/nl/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/tr/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/appstream-metadata/tr/
Translation: pineapple-pictures/AppStream Metadata
Translation: pineapple-pictures/Application
2026-08-19 12:35:07 +08:00
Tech-Tac 7ffb7086ac fix: close button without titlebar position in RTL (#186) 2026-08-06 23:15:06 +08:00
Tech-Tac ed5a3c397b feat(i18n): make titlebar respect RTL (#182) 2026-08-06 00:09:07 +08:00
9 changed files with 60 additions and 45 deletions

No files matched your search

+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
version: '6.10.3' version: '6.11.2'
modules: 'qtimageformats' modules: 'qtimageformats'
cache: true cache: true
- name: Install Conan and Dependencies - name: Install Conan and Dependencies
+6 -2
View File
@@ -8,7 +8,7 @@ jobs:
strategy: strategy:
matrix: matrix:
include: include:
- qt_ver: '6.10.3' - qt_ver: '6.11.2'
vs: '2022' vs: '2022'
aqt_arch: 'win64_msvc2022_64' aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64' msvc_arch: 'x64'
@@ -24,6 +24,8 @@ jobs:
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
modules: 'qtimageformats' modules: 'qtimageformats'
cache: true cache: true
# we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows.
aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901e'
- name: Build - name: Build
shell: cmd shell: cmd
run: | run: |
@@ -45,7 +47,7 @@ jobs:
strategy: strategy:
matrix: matrix:
include: include:
- qt_ver: '6.10.3' - qt_ver: '6.11.2'
vs: '2022' vs: '2022'
aqt_arch: 'win64_msvc2022_64' aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64' msvc_arch: 'x64'
@@ -61,6 +63,8 @@ jobs:
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
modules: 'qtimageformats' modules: 'qtimageformats'
cache: true cache: true
# we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows.
aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901e'
- name: Build - name: Build
shell: cmd shell: cmd
run: | run: |
+2 -2
View File
@@ -357,7 +357,7 @@ void MainWindow::leaveEvent(QEvent *event)
void MainWindow::mousePressEvent(QMouseEvent *event) void MainWindow::mousePressEvent(QMouseEvent *event)
{ {
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN) and QT_VERSION < QT_VERSION_CHECK(6, 11, 2)
const bool shouldAcceptDrag = !isMaximized() && !isFullScreen(); const bool shouldAcceptDrag = !isMaximized() && !isFullScreen();
#else #else
const bool shouldAcceptDrag = !isFullScreen(); const bool shouldAcceptDrag = !isFullScreen();
@@ -630,7 +630,7 @@ void MainWindow::updateWidgetsPosition()
{ {
if (m_titleBar->closeButtonOnly()) { if (m_titleBar->closeButtonOnly()) {
const int bw = m_titleBar->closeButtonWidth(); const int bw = m_titleBar->closeButtonWidth();
m_titleBar->setGeometry(width() - bw, 0, bw, m_titleBar->height()); m_titleBar->setGeometry(isRightToLeft() ? 0 : width() - bw, 0, bw, m_titleBar->height());
} else { } else {
m_titleBar->setGeometry(0, 0, width(), m_titleBar->height()); m_titleBar->setGeometry(0, 0, width(), m_titleBar->height());
} }
+14 -6
View File
@@ -55,7 +55,8 @@ void TitleBar::setCloseButtonOnly(bool only)
QRect TitleBar::closeButtonRect() const QRect TitleBar::closeButtonRect() const
{ {
const int btnWidth = closeButtonWidth(); const int btnWidth = closeButtonWidth();
return QRect(width() - btnWidth, 0, btnWidth, height());
return QRect(isRightToLeft() ? 0 : width() - btnWidth, 0, btnWidth, height());
} }
void TitleBar::paintEvent(QPaintEvent *event) void TitleBar::paintEvent(QPaintEvent *event)
@@ -72,14 +73,21 @@ void TitleBar::paintEvent(QPaintEvent *event)
const QRect closeRect = closeButtonRect(); const QRect closeRect = closeButtonRect();
// Title text (leave room for the close button). // Title text (leave room for the close button).
QRect labelRect = rect().adjusted(8, 0, 0, 0); QRect labelRect = rect();
if (m_closeButtonVisible) if (isRightToLeft()) {
labelRect.setRight(closeRect.left() - 2); labelRect.adjust(0, 0, -8, 0);
if (m_closeButtonVisible)
labelRect.setLeft(closeRect.right() + 2);
} else {
labelRect.adjust(8, 0, 0, 0);
if (m_closeButtonVisible)
labelRect.setRight(closeRect.left() - 2);
}
const QString title = window() ? window()->windowTitle() : QString(); const QString title = window() ? window()->windowTitle() : QString();
if (!m_closeButtonOnly && !title.isEmpty()) { if (!m_closeButtonOnly && !title.isEmpty()) {
const QString elided = painter.fontMetrics().elidedText(title, Qt::ElideRight, labelRect.width()); const QString elided = painter.fontMetrics().elidedText(title, Qt::ElideRight, labelRect.width());
const int flags = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine; const int flags = Qt::AlignLeading | Qt::AlignVCenter | Qt::TextSingleLine;
painter.setPen(Qt::black); painter.setPen(Qt::black);
painter.drawText(labelRect.adjusted(1, 1, 1, 1), flags, elided); painter.drawText(labelRect.adjusted(1, 1, 1, 1), flags, elided);
painter.setPen(Qt::white); painter.setPen(Qt::white);
@@ -128,7 +136,7 @@ void TitleBar::mouseMoveEvent(QMouseEvent *event)
} }
} }
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN) and QT_VERSION < QT_VERSION_CHECK(6, 11, 2)
const bool shouldAcceptDrag = !window()->isMaximized() && !window()->isFullScreen(); const bool shouldAcceptDrag = !window()->isMaximized() && !window()->isFullScreen();
#else #else
const bool shouldAcceptDrag = !window()->isFullScreen(); const bool shouldAcceptDrag = !window()->isFullScreen();
+16 -16
View File
@@ -11,7 +11,7 @@
<message> <message>
<location filename="../aboutdialog.cpp" line="32"/> <location filename="../aboutdialog.cpp" line="32"/>
<source>Launch application with image file path as argument to load the file.</source> <source>Launch application with image file path as argument to load the file.</source>
<translation>إطلاق التطبيق مع استخدام مسار ملف الصورة كمُعامل لتحميل الملف.</translation> <translation>أطلق التطبيق مع استخدام مسار ملف صورة كمُعامل لفتح الملف.</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="33"/> <location filename="../aboutdialog.cpp" line="33"/>
@@ -113,22 +113,22 @@
<location filename="../aboutdialog.cpp" line="63"/> <location filename="../aboutdialog.cpp" line="63"/>
<source>Copyright (c) %1 %2</source> <source>Copyright (c) %1 %2</source>
<comment>%1 is year, %2 is the name of copyright holder(s)</comment> <comment>%1 is year, %2 is the name of copyright holder(s)</comment>
<translation>حقوق النسخ مملوكة لصالح %1 لعام %2</translation> <translation>حقوق النسخ مملوكة لصالح %2 لعام %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="95"/> <location filename="../aboutdialog.cpp" line="95"/>
<source>%1 is released under the MIT License.</source> <source>%1 is released under the MIT License.</source>
<translation>%1 منشور تحت رخصة MIT.</translation> <translation>تم إصدار %1 بموجب ترخيص MIT.</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="96"/> <location filename="../aboutdialog.cpp" line="96"/>
<source>This license grants people a number of freedoms:</source> <source>This license grants people a number of freedoms:</source>
<translation>هذه الرخصة تمنح المستخدم عدة حقوق وحريات:</translation> <translation>هذه الرخصة تمنح المستخدم عدة حريات:</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="97"/> <location filename="../aboutdialog.cpp" line="97"/>
<source>You are free to use %1, for any purpose</source> <source>You are free to use %1, for any purpose</source>
<translation>يحق لك استخدام %1 لأي غرض</translation> <translation>لك الحرية في استخدام %1 لأي غرض كان</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="98"/> <location filename="../aboutdialog.cpp" line="98"/>
@@ -138,7 +138,7 @@
<message> <message>
<location filename="../aboutdialog.cpp" line="99"/> <location filename="../aboutdialog.cpp" line="99"/>
<source>You can study how %1 works and change it</source> <source>You can study how %1 works and change it</source>
<translation>يمكنك دراسة طريقة عمل %1 وتعديلها</translation> <translation>يمكنك دراسة طريقة عمل %1 وتعديله</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="100"/> <location filename="../aboutdialog.cpp" line="100"/>
@@ -148,12 +148,12 @@
<message> <message>
<location filename="../aboutdialog.cpp" line="102"/> <location filename="../aboutdialog.cpp" line="102"/>
<source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source> <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
<translation>رخصة MIT تضمن لك تلك الحقوق. لا أحد له الحق في سلبهم منك.</translation> <translation>رخصة MIT تضمن لك تلك الحريات. لا أحد له الحق في سلبهم منك.</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="130"/> <location filename="../aboutdialog.cpp" line="130"/>
<source>Third-party Libraries used by %1</source> <source>Third-party Libraries used by %1</source>
<translation>المكتبات الخارجية المستخدمة من قِبَل %1</translation> <translation>المكتبات الخارجية المستخدمة في %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="153"/> <location filename="../aboutdialog.cpp" line="153"/>
@@ -244,7 +244,7 @@
<message> <message>
<location filename="../mainwindow.cpp" line="786"/> <location filename="../mainwindow.cpp" line="786"/>
<source>Failed to save image: %1</source> <source>Failed to save image: %1</source>
<translation>فشل في حفظ الصورة: %1</translation> <translation>فشل حفظ الصورة: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="875"/> <location filename="../mainwindow.cpp" line="875"/>
@@ -259,7 +259,7 @@
<message> <message>
<location filename="../mainwindow.cpp" line="897"/> <location filename="../mainwindow.cpp" line="897"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation>فشل النقل إلى سلة المهملات</translation> <translation>فشل نقل الملف إلى سلة المهملات</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="898"/> <location filename="../mainwindow.cpp" line="898"/>
@@ -298,7 +298,7 @@
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>إبقاء التحويل</translation> <translation>الحفاظ على التحويلات</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="92"/>
@@ -503,7 +503,7 @@
<message> <message>
<location filename="../metadatamodel.cpp" line="64"/> <location filename="../metadatamodel.cpp" line="64"/>
<source>Item type</source> <source>Item type</source>
<translation>نوع العنصر</translation> <translation>نوع الملف</translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="66"/> <location filename="../metadatamodel.cpp" line="66"/>
@@ -865,7 +865,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Show bird&apos;s-eye view</source> <source>Show bird&apos;s-eye view</source>
<translation type="unfinished"></translation> <translation>إظهار إطار مصغر عند التكبير</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
@@ -880,12 +880,12 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="132"/> <location filename="../settingsdialog.cpp" line="132"/>
<source>Auto long image mode</source> <source>Auto long image mode</source>
<translation>وضع الصور الطويلة تلقائيًا</translation> <translation>ملائمة الصور الطويلة تلقائيًا</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="133"/> <location filename="../settingsdialog.cpp" line="133"/>
<source>Limit SVG support to SVG Tiny 1.2</source> <source>Limit SVG support to SVG Tiny 1.2</source>
<translation>حد دعم تنسيق SVG إلي نسخة Tiny 1.2</translation> <translation>حد دعم تنسيق SVG إلي مواصفة SVG Tiny 1.2</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="134"/> <location filename="../settingsdialog.cpp" line="134"/>
@@ -895,7 +895,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="135"/> <location filename="../settingsdialog.cpp" line="135"/>
<source>Mouse wheel behavior</source> <source>Mouse wheel behavior</source>
<translation>السلوك عند تحريك عجلة الفأرة</translation> <translation>السلوك عند تمرير عجلة الفأرة</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="136"/> <location filename="../settingsdialog.cpp" line="136"/>
+2 -2
View File
@@ -872,12 +872,12 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="128"/> <location filename="../settingsdialog.cpp" line="128"/>
<source>Show title bar</source> <source>Show title bar</source>
<translation type="unfinished"></translation> <translation>제목 표시줄 표시</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Show bird&apos;s-eye view</source> <source>Show bird&apos;s-eye view</source>
<translation type="unfinished"></translation> <translation>조감도 보기 표시</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+1 -1
View File
@@ -881,7 +881,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Show bird&apos;s-eye view</source> <source>Show bird&apos;s-eye view</source>
<translation type="unfinished"></translation> <translation>Vogelvluchtweergave</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+8 -8
View File
@@ -240,27 +240,27 @@
<location filename="../mainwindow.cpp" line="755"/> <location filename="../mainwindow.cpp" line="755"/>
<location filename="../mainwindow.cpp" line="785"/> <location filename="../mainwindow.cpp" line="785"/>
<source>Save As</source> <source>Save As</source>
<translation type="unfinished"></translation> <translation>Farklı Kaydet</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="731"/> <location filename="../mainwindow.cpp" line="731"/>
<source>No image is currently open.</source> <source>No image is currently open.</source>
<translation type="unfinished"></translation> <translation>Şu anda açık bir resim yok.</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="743"/> <location filename="../mainwindow.cpp" line="743"/>
<source>%1 Image (*.%2)</source> <source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation> <translation>%1 Resim (*.%2)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="749"/> <location filename="../mainwindow.cpp" line="749"/>
<source>No supported image formats are available.</source> <source>No supported image formats are available.</source>
<translation type="unfinished"></translation> <translation>Desteklenen resim biçimi yok.</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="786"/> <location filename="../mainwindow.cpp" line="786"/>
<source>Failed to save image: %1</source> <source>Failed to save image: %1</source>
<translation type="unfinished"></translation> <translation>Resim kaydedilemedi: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="875"/> <location filename="../mainwindow.cpp" line="875"/>
@@ -324,7 +324,7 @@
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source> <source>Save &amp;As...</source>
<translation type="unfinished"></translation> <translation>Farklı &amp;Kaydet...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="93"/>
@@ -876,12 +876,12 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="128"/> <location filename="../settingsdialog.cpp" line="128"/>
<source>Show title bar</source> <source>Show title bar</source>
<translation type="unfinished"></translation> <translation>Başlık çubuğunu göster</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Show bird&apos;s-eye view</source> <source>Show bird&apos;s-eye view</source>
<translation type="unfinished"></translation> <translation>Kuş bakışı görünümünü göster</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n" "POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: 2025-12-20 20:00+0000\n" "PO-Revision-Date: 2026-07-29 10:01+0000\n"
"Last-Translator: Sabri Ünal <yakushabb@gmail.com>\n" "Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/pineapple-" "Language-Team: Turkish <https://hosted.weblate.org/projects/pineapple-"
"pictures/appstream-metadata/tr/>\n" "pictures/appstream-metadata/tr/>\n"
"Language: tr\n" "Language: tr\n"
@@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15.1\n" "X-Generator: Weblate 2026.8.dev0\n"
#. (itstool) path: component/name #. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7 #: net.blumia.pineapple-pictures.metainfo.xml:7
@@ -27,23 +27,26 @@ msgstr "Resim Görüntüleyici"
#: net.blumia.pineapple-pictures.metainfo.xml:12 #: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support." msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr "" msgstr ""
"Pineapple Resimler, yakınlaştırma yapıldığında kullanışlı bir gezinme küçük "
"resmi sunan, hafif ve kullanımı kolay bir resim görüntüleyicidir, herhangi "
"bir resim yönetimi desteği içermez."
#. (itstool) path: screenshot/caption #. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17 #: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded" msgid "Main window when an image file is loaded"
msgstr "" msgstr "Bir resim dosyası yüklendiğinde ana pencere"
#. (itstool) path: screenshot/caption #. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22 #: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image" msgid "Zooming in a raster image"
msgstr "" msgstr "Raster resimde yakınlaştırma"
#. (itstool) path: screenshot/caption #. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27 #: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image" msgid "Zooming in a vector image"
msgstr "" msgstr "Vektör resimde yakınlaştırma"
#. (itstool) path: component/developer_name #. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34 #: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al." msgid "Gary (BLumia) Wang et al."
msgstr "Gary (BLumia) Wang et al." msgstr "Gary (BLumia) Wang ve diğerleri"