получить язык пользователя, вошедшего в систему через AppleScript - PullRequest
0 голосов
/ 23 августа 2011

Я хочу получить системный язык текущего пользователя, вошедшего в систему.Строка

set lang to do shell script "defaults read NSGlobalDomain AppleLanguages"

возвращает строку, которая выглядит так:

(
    en,
    de,
    ja,
    fr,
    es,
    it,
    pt,
    "pt-PT",
    nl,
    sv,
    nb,
    da,
    fi,
    ru,
    pl,
    "zh-Hans",
    "zh-Hant",
    ko,
    ar,
    cs,
    hu,
    tr
)

возвращает языки пользователей, но как я могу получить первый из этого «массива»?Есть ли возможность проанализировать это как массив и получить его первое значение?

Ответы [ 4 ]

6 голосов
/ 23 августа 2011

Есть более прямой метод.В Applescript есть команда «Системная информация», которая возвращает много полезной информации о текущем пользователе.Попробуйте это, чтобы увидеть ...

return system info

Информация, которая поможет вам в этом, - "локаль пользователя".Таким образом, вы можете легко получить язык ...

return user locale of (get system info)

Поиграйте с этим на разных пользователях и посмотрите, даст ли он то, что вы хотите.

3 голосов
/ 18 сентября 2012

Тема действительно старая, но у меня только что возникла проблема, и эта проблема довольно высока в поиске Google. Для других читателей я хочу добавить два комментария:

Существует различие между стратегиями «вернуть пользователя (получить информацию о системе)» и «по умолчанию читать NSGlobalDomain AppleLanguages»: первая возвращает значение из настроек региона, вторая - значение из настроек языка (оба в «Язык и текст»).

Настройки региона возвращают язык и регион, разделенные подчеркиванием. Настройки языка возвращают либо язык, либо язык и регион, разделенные дефисом. Если вы используете это в другом коде, убедитесь, что он терпим.

Второй момент: GREPing работает, но самый простой код, который я нашел, - это использование списка свойств из системных событий:

on get_language()
    set lang to do shell script "defaults read NSGlobalDomain AppleLanguages"
    tell application "System Events"
        set pl to make new property list item with properties {text:lang}
        set r to value of pl
    end tell
    return item 1 of r
end get_language 

Грэп, будь быстрее, но для этого нужно меньше крутить мозг.

Jürgen

2 голосов
/ 23 августа 2011

Вы можете использовать awk и grep, чтобы немного подготовить список (избавиться от отступов, кавычек и скобок), а затем разделить полученную строку:

-- a standard split function
to split of aString by sep
    local aList, delims
    tell AppleScript
        set delims to text item delimiters
        set text item delimiters to sep
        set aList to text items of aString
        set  text item delimiters to delims
    end tell
    return aList
end split

-- pipe the output of defaults through a few more commands
set cmd to "defaults read NSGlobalDomain AppleLanguages | awk '{gsub(/[^a-zA-Z-]/,\"\");print}' | grep -v '^$'"
set langs to do shell script cmd

-- get the first item in the list
set lang to item 1 of (split of langs by return)

Команда оболочки выдаст вам список вроде:

en
da
ja
fr
de
es
it
pt
pt-PT
nl
sv
nb
fi
ru
pl
zh-Hans
zh-Hant
ko

То есть item 1 будет en

0 голосов
/ 03 мая 2019

В настоящее время эта тема является древней, но все еще является наиболее релевантной из всех результатов поиска. Поэтому я думаю, что это может быть актуально для тех, кто ищет ответ на этот вопрос.

Исходя из того, что написал пользователь 1635960, следующий «один вкладыш» кажется мне довольно простым:

set lang to first word of (do shell script "defaults read NSGlobalDomain AppleLanguages")

Поскольку мой первый системный язык - немецкий, он просто возвращает de.

Пояснение:

do shell script "defaults read NSGlobalDomain AppleLanguages"

возвращает список вроде

"(
    \"de-DE\",
    \"nl-DE\",
    \"en-DE\"
)"

Класс word определяет последовательность в основном букв и / или цифр, ограниченную одним или несколькими большинством других символов. Таким образом, first word of приведенный выше список приводит к de.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...