mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Simplify getting language display name on macOS
This commit is contained in:
parent
644625d7d6
commit
0e3bc56602
@ -3,7 +3,6 @@
|
|||||||
# License: GPL v3 Copyright: 2020, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPL v3 Copyright: 2020, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from calibre_extensions.cocoa import locale_names
|
|
||||||
from PyQt5.Qt import (
|
from PyQt5.Qt import (
|
||||||
QAbstractItemView, QAbstractTableModel, QFontMetrics, QFormLayout,
|
QAbstractItemView, QAbstractTableModel, QFontMetrics, QFormLayout,
|
||||||
QItemSelectionModel, QSortFilterProxyModel, QSlider, Qt, QTableView, QWidget
|
QItemSelectionModel, QSortFilterProxyModel, QSlider, Qt, QTableView, QWidget
|
||||||
@ -24,10 +23,11 @@ class VoicesModel(QAbstractTableModel):
|
|||||||
def gender(x):
|
def gender(x):
|
||||||
return gmap.get(x, x)
|
return gmap.get(x, x)
|
||||||
|
|
||||||
self.current_voices = tuple((x['name'], x['locale_id'], x['age'], gender(x['gender'])) for x in voice_data.values())
|
def language(x):
|
||||||
|
return x.get('language_display_name') or x['locale_id'] or ''
|
||||||
|
|
||||||
|
self.current_voices = tuple((x['name'], language(x), x['age'], gender(x['gender'])) for x in voice_data.values())
|
||||||
self.voice_ids = tuple(voice_data)
|
self.voice_ids = tuple(voice_data)
|
||||||
all_locales = tuple(filter(None, (x[1] for x in self.current_voices)))
|
|
||||||
self.locale_map = dict(zip(all_locales, locale_names(*all_locales)))
|
|
||||||
self.column_headers = _('Name'), _('Language'), _('Age'), _('Gender')
|
self.column_headers = _('Name'), _('Language'), _('Age'), _('Gender')
|
||||||
|
|
||||||
def rowCount(self, parent=None):
|
def rowCount(self, parent=None):
|
||||||
@ -50,8 +50,6 @@ class VoicesModel(QAbstractTableModel):
|
|||||||
data = self.current_voices[row - 1]
|
data = self.current_voices[row - 1]
|
||||||
col = index.column()
|
col = index.column()
|
||||||
ans = data[col] or ''
|
ans = data[col] or ''
|
||||||
if col == 1:
|
|
||||||
ans = self.locale_map.get(ans, ans)
|
|
||||||
return ans
|
return ans
|
||||||
if role == Qt.ItemDataRole.UserRole:
|
if role == Qt.ItemDataRole.UserRole:
|
||||||
row = index.row()
|
row = index.row()
|
||||||
|
@ -104,13 +104,20 @@ static PyObject*
|
|||||||
NSSS_get_all_voices(NSSS *self, PyObject *args) {
|
NSSS_get_all_voices(NSSS *self, PyObject *args) {
|
||||||
PyObject *ans = PyDict_New();
|
PyObject *ans = PyDict_New();
|
||||||
if (!ans) return NULL;
|
if (!ans) return NULL;
|
||||||
|
NSLocale *locale = [NSLocale autoupdatingCurrentLocale];
|
||||||
for (NSSpeechSynthesizerVoiceName voice_id in [NSSpeechSynthesizer availableVoices]) {
|
for (NSSpeechSynthesizerVoiceName voice_id in [NSSpeechSynthesizer availableVoices]) {
|
||||||
NSDictionary *attributes = [NSSpeechSynthesizer attributesForVoice:voice_id];
|
NSDictionary *attributes = [NSSpeechSynthesizer attributesForVoice:voice_id];
|
||||||
if (attributes) {
|
if (attributes) {
|
||||||
|
NSObject *lang_key = [attributes objectForKey:NSVoiceLocaleIdentifier];
|
||||||
|
const char *lang_name = NULL;
|
||||||
|
if (lang_key && [lang_key isKindOfClass:[NSString class]]) {
|
||||||
|
NSString *display_name = [locale displayNameForKey:NSLocaleIdentifier value:(NSString*)lang_key];
|
||||||
|
if (display_name) lang_name = [display_name UTF8String];
|
||||||
|
}
|
||||||
#define E(x, y) #x, as_python([attributes objectForKey:y])
|
#define E(x, y) #x, as_python([attributes objectForKey:y])
|
||||||
PyObject *v = Py_BuildValue("{sN sN sN sN sN}",
|
PyObject *v = Py_BuildValue("{sN sN sN sN sN sz}",
|
||||||
E(name, NSVoiceName), E(age, NSVoiceAge), E(gender, NSVoiceGender),
|
E(name, NSVoiceName), E(age, NSVoiceAge), E(gender, NSVoiceGender),
|
||||||
E(demo_text, NSVoiceDemoText), E(locale_id, NSVoiceLocaleIdentifier));
|
E(demo_text, NSVoiceDemoText), E(locale_id, NSVoiceLocaleIdentifier), "language_display_name", lang_name);
|
||||||
if (!v) { Py_DECREF(ans); return NULL; }
|
if (!v) { Py_DECREF(ans); return NULL; }
|
||||||
#undef E
|
#undef E
|
||||||
if (PyDict_SetItemString(ans, [voice_id UTF8String], v) != 0) {
|
if (PyDict_SetItemString(ans, [voice_id UTF8String], v) != 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user