How these keys are used depends on the type of input source, as described
* below.
*
* 1. Keyboard layouts ( in <domain>/Library/Keyboard Layouts/ )
*
* Keyboard layouts packaged in bundles use either a resource file or a set of
* xml keylayout files together with optional icns files. The following example
* shows the two methods of packaging a set of two key layouts in Unicode 'uchr'
* format with key layout names "MyLayoutOne" and "MyLayoutTwo" and corresponding
* numeric IDs -9001 and -9002 (see Tech Note 2056).
*
* MyKeyboardLayouts.bundle/
* Contents/
* Info.plist
* version.plist
* Resources/
* MyKeyboardLayouts.rsrc, containing the following resources:
* resources 'uchr' (-9001, "MyLayoutOne"), 'kcs#' (-9001), 'kcs4' (-9001)
* resources 'uchr' (-9002, "MyLayoutTwo"), 'kcs#' (-9002), 'kcs4' (-9002)
* en.lproj/InfoPlist.strings, maps "MyLayoutOne" & "MyLayoutTwo" to localized names
* ja.lproj/InfoPlist.strings, maps "MyLayoutOne" & "MyLayoutTwo" to localized names
* ...
*
* MyKeyboardLayouts.bundle/
* Contents/
* Info.plist
* version.plist
* Resources/
* MyLayoutOne.keylayout, specifying name="MyLayoutOne" and id=-9001
* MyLayoutOne.icns (optional)
* MyLayoutTwo.keylayout, specifying name="MyLayoutTwo" and id=-9002
* MyLayoutTwo.icns (optional)
* en.lproj/InfoPlist.strings, maps "MyLayoutOne" & "MyLayoutTwo" to localized names
* ja.lproj/InfoPlist.strings, maps "MyLayoutOne" & "MyLayoutTwo" to localized names
* ...
*
* In the Info.plist file, the value for the CFBundleIdentifier key must be a
* string that includes ".keyboardlayout."; typically this might be something
* like "com.companyname.keyboardlayout.MyKeyboardLayouts" (Before Leopard,
* it was required to be a string that began "com.apple.keyboardlayout", even
* for keyboard layouts not supplied by Apple).
*
* A dictionary of properties for each key layout in the bundle should be
* provided using a key of the form "KLInfo_keylayoutname" (even if
* keylayoutname includes spaces or punctuation). This dictionary is where to
* specify the keys "TISInputSourceID" and "TISIntendedLanguage" and their
* associated values.
*
* "TISInputSourceID" note: For keyboard layouts this should typically be
* something like "com.companyname.keylayout.keylayoutname". If this key is
* not specified, an InputSourceID will be constructed by combining
* bundleID + ". keylayout." + keylayoutname.
*
* If the keyboard layouts in the above example were intended to input
* Azerbaijani in Latin script, then the Info.plist entries could be:
*
* <key>KLInfo_MyLayoutOne</key>
* <dict>
* <key>TISInputSourceID</key>
* <string>com.companyname.keylayout.MyLayoutOne</string>
* <key>TISIntendedLanguage</key>
* <string>az-Latn</string>
* </dict>
* <key>KLInfo_MyLayoutTwo</key>
* <dict>
* <key>TISInputSourceID</key>
* <string>com.companyname.keylayout.MyLayoutTwo</string>
* <key>TISIntendedLanguage</key>
* <string>az-Latn</string>
* </dict>