Вот решение, не зависящее от Электрон. Он также использует AppleFirstWeekday
, но, похоже, он устанавливается только в том случае, если значение отличается от значения по умолчанию для локали.
Решение принимает это во внимание и возвращается к первому дню недели, заданному по умолчанию для локали. Эта функциональность обеспечивается модулем weekstart
(по существу, справочная таблица). Локаль пользователя может быть найдена в AppleLocale
.
В отличие от первого ответа, это решение также возвращает правильный результат в случаях, когда пользователь не переопределил начало недели, а языковой стандарт определяет день первой недели, отличный от понедельника.
const APPLE_WEEKDAY_MAP = {
1: "Sunday",
2: "Monday",
3: "Tuesday",
4: "Wednesday",
5: "Thursday",
6: "Friday",
7: "Saturday"
}
const { execSync } = require('child_process')
function getUserFirstWeekday() {
let stdout = execSync('defaults read -g AppleFirstWeekday',
{stdio: ['inherit', 'pipe', 'ignore']} ).toString()
let match = /gregorian = (\d)/g.exec(stdout)
return parseInt(match[1])
}
function getLocaleFirstWeekday() {
// this returns 0..6 (Sun..Sat)
const getWeekStartByLocale = require('weekstart').getWeekStartByLocale
let apple_locale = execSync('defaults read -g AppleLocale').toString()
return getWeekStartByLocale(apple_locale)
}
function getFirstWeekday() {
// Use user override if applicable, else fall back to locale default
try {
return getUserFirstWeekday()
}
catch (e) {
}
// Using locale default
return getLocaleFirstWeekday()+1
}
Используйте его следующим образом:
console.log( getFirstWeekday() )
// prints 5
console.log( APPLE_WEEKDAY_MAP[ getFirstWeekday() ] )
// prints "Thursday"
Конечно, это не должно использоваться в производстве как есть. Например, должна быть (лучшая) обработка ошибок, регулярное выражение довольно грубое и т. Д. Это было проверено на Yosemite.
Я намеренно работал без электронной функции systemPreferences.getUserDefault(key, type)
, чтобы сделать этот ответ более универсальным. Конечно, можно легко поменять вызовы exec
на функцию Electron.