指定アプリケーションが対応している各ローカライズ言語におけるアプリケーション名称を取得して、言語名をcurrent localeに合わせて変換しつつCSV出力してNumbersでオープンするAppleScriptです。
アプリケーションバンドルを調査して、ローカライズ対応している言語の一覧を取得するプログラムは組んでありました。そのローカライズを順次調べて、InfoPlist.stringsファイルを読み込み、CFBundleNameのエントリを調べています。
これで、その言語向けにローカライズされた「名称」を調べられます。あとは、言語コードを名称に変換する処理(これも、ありもの)を組み合わせて、2次元配列(2D list)にまとめあげ、CSV書き出しして(ありもの)、Numbersでオープンしただけのものです。
言語名称については、currentLocaleを利用しているため、日本語環境で実行すれば日本語表現で出力されますし、英語環境で実行すれば英語表現で出力されます。
実際に、書籍に掲載する資料用のデータを作成するときに使ってみました。
言語 | Code | 「地図」アプリのローカライズ名称 |
ドイツ語 | de | Karten |
ヘブライ語 | he | מפות |
英語(オーストラリア) | en_AU | Maps |
アラビア語 | ar | الخرائط |
ギリシャ語 | el | Χάρτες |
日本語 | ja | マップ |
英語 | en | Maps |
ウクライナ語 | uk | Карти |
スペイン語(ラテンアメリカ) | es_419 | Mapas |
中国語(中国本土) | zh_CN | 地图 |
スペイン語 | es | Mapas |
デンマーク語 | da | Kort |
イタリア語 | it | Mappe |
スロバキア語 | sk | Mapy |
ポルトガル語(ポルトガル) | pt_PT | Mapas |
マレー語 | ms | Peta |
スウェーデン語 | sv | Kartor |
チェコ語 | cs | Mapy |
韓国語 | ko | 지도 |
広東語(中国本土) | yue_CN | 地图 |
ノルウェー語 | no | Kart |
ハンガリー語 | hu | Térképek |
中国語(香港) | zh_HK | 地圖 |
トルコ語 | tr | Harita |
ポーランド語 | pl | Mapy |
中国語(台湾) | zh_TW | 地圖 |
英語(イギリス) | en_GB | Maps |
ベトナム語 | vi | Bản đồ |
ロシア語 | ru | Карты |
フランス語(カナダ) | fr_CA | Plans |
フランス語 | fr | Plans |
フィンランド語 | fi | Kartat |
インドネシア語 | id | Peta |
オランダ語 | nl | Kaarten |
タイ語 | th | แผนที่ |
ポルトガル語 | pt | Mapas |
ルーマニア語 | ro | Hărți |
クロアチア語 | hr | Karte |
ヒンディー語 | hi | नक़्शा |
カタロニア語 | ca | Mapes |
AppleScript名:指定アプリケーションの各言語のローカライズ名称を取得して、言語名をローカライズしてNumbersに出力.scptd |
— – Created by: Takaaki Naganoya – Created on: 2022/02/04 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "AppKit" use scripting additions set targFile to "InfoPlist.strings" set targKey to "CFBundleName" set aLocale to (current application’s NSLocale’s currentLocale()) set aLoc to path to applications folder set anApp to POSIX path of (choose file of type {"com.apple.application-bundle"} default location aLoc) set aBundle to getBundleFromPath(anApp) of me set aName to aBundle’s objectForInfoDictionaryKey:(current application’s kCFBundleNameKey) set aLocList to getSpecifiedAppFilesLocalizationListWithDuplication(aBundle) of me set hitList to {} repeat with i in aLocList set j to contents of i if j is not equal to "Base" then set allPath to anApp & "/Contents/Resources/" & j & ".lproj/" & targFile set aDict to (current application’s NSDictionary’s alloc()’s initWithContentsOfFile:allPath) if aDict is not equal to missing value then set aVal to (aDict’s valueForKeyPath:(targKey)) if aVal is not equal to missing value then set aLang to getLangNameWithLocale(j, aLocale) of me set the end of hitList to {aLang, j, aVal as string} end if else log {"Error in ", j} end if end if end repeat –一時ファイルをCSV形式でデスクトップに書き出し set aPath to (path to desktop as string) & (do shell script "uuidgen") & ".csv" saveAsCSV(hitList, aPath) of me –書き出したCSVファイルをNumbersでオープン tell application "Numbers" open (aPath as alias) end tell –Application path –> Bundle on getBundleFromPath(aPOSIXpath) set aURL to current application’s |NSURL|’s fileURLWithPath:aPOSIXpath set aWorkspace to current application’s NSWorkspace’s sharedWorkspace() set appURL to aWorkspace’s URLForApplicationToOpenURL:aURL set aBundle to current application’s NSBundle’s bundleWithURL:appURL return aBundle end getBundleFromPath –指定Bundleのローカライズ言語リストを求める。重複を許容 on getSpecifiedAppFilesLocalizationListWithDuplication(aBundle) set locList to aBundle’s localizations() return locList as list end getSpecifiedAppFilesLocalizationListWithDuplication on getLangNameWithLocale(langCode, aLocale) set aLangName to (aLocale’s displayNameForKey:(current application’s NSLocaleIdentifier) value:langCode) as string return aLangName end getLangNameWithLocale –2D List to CSV file on saveAsCSV(aList, aPath) –set crlfChar to (ASCII character 13) & (ASCII character 10) set crlfChar to (string id 13) & (string id 10) set LF to (string id 10) set wholeText to "" repeat with i in aList set newLine to {} –Sanitize (Double Quote) repeat with ii in i set jj to ii as text set kk to repChar(jj, string id 34, (string id 34) & (string id 34)) of me –Escape Double Quote set the end of newLine to kk end repeat –Change Delimiter set aLineText to "" set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to "\",\"" set aLineList to newLine as text set AppleScript’s text item delimiters to curDelim set aLineText to repChar(aLineList, return, "") of me –delete return set aLineText to repChar(aLineText, LF, "") of me –delete lf set wholeText to wholeText & "\"" & aLineText & "\"" & crlfChar –line terminator: CR+LF end repeat if (aPath as string) does not end with ".csv" then set bPath to aPath & ".csv" as Unicode text else set bPath to aPath as Unicode text end if writeToFileAsUTF8(wholeText, bPath, false) of me end saveAsCSV on writeToFileAsUTF8(this_data, target_file, append_data) tell current application try set the target_file to the target_file as text set the open_target_file to open for access file target_file with write permission if append_data is false then set eof of the open_target_file to 0 write this_data as «class utf8» to the open_target_file starting at eof close access the open_target_file return true on error error_message try close access file target_file end try return error_message end try end tell end writeToFileAsUTF8 on repChar(origText as text, targChar as text, repChar as text) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to targChar set tmpList to text items of origText set AppleScript’s text item delimiters to repChar set retText to tmpList as string set AppleScript’s text item delimiters to curDelim return retText end repChar |