13 Commits

Author SHA1 Message Date
Tomáš Znamenáček d0063130b5 Version bump to 2.3.3. 2016-01-09 15:51:28 +01:00
Tomáš Znamenáček c384d0e94b Updated CHANGES. 2016-01-09 15:47:06 +01:00
Tomáš Znamenáček e267d30bfd Whitespace fixes. 2016-01-09 15:45:45 +01:00
Nikita Ivanchikov d32fc188ca Another approach to try a fix for the CocoaPods localization bundle problem (#74).
Checking if resources bundle was copied inside framework bundle, then falling back to old search methods
2016-01-09 15:43:05 +01:00
Tomáš Znamenáček 2b2fb80556 Updated changelog. 2015-12-06 16:08:46 +01:00
Tomáš Znamenáček 60978895b2 Merge pull request #80 from magiclantern/magiclantern/french-localization
Expanded Frech localization.
2015-12-06 16:07:10 +01:00
Nikita Ourazbaev 6a97ae68e9 Some suggestions for fr
Some suggestions for the gaps in the French localization
2015-12-06 10:04:45 -05:00
Tomáš Znamenáček 29d047c928 Documented that we don’t accept Option-Shift shortcuts by default.
The reason is that Option-Shift shortcuts are often already used
by system to insert some special characters. See `MASShortcutValidator`
for details, including how to enable support for these shortcuts.
Fixes #79.
2015-12-03 15:15:05 +01:00
Tomáš Znamenáček 5a18ccc5e1 Even more elaborate workaround for the CocoaPods localization problem (#74).
Just testing if the CocoaPods bundle is present didn’t work, so now we
even try to load a localized string from the bundle.
2015-11-06 08:59:52 +01:00
Tomáš Znamenáček e83732400b Trying a fix for the CocoaPods localization bundle problem (#74).
This change simply doesn’t try to detect which bundle we should use
and tries both bundles, the CocoaPods one first. The chosen bundle is
then cached to avoid the overhead on subsequent requests.
2015-11-04 15:02:55 +01:00
Tomáš Znamenáček 2730683848 Updated CHANGES. 2015-10-31 10:26:15 +01:00
Vadim Shpakovski 471322a113 Merge pull request #77 from oreshinya/japanese_localization
Japanese localization
2015-10-14 20:16:16 +03:00
shinya takahashi 09b7364130 Japanese localization 2015-10-14 18:44:06 +09:00
9 changed files with 78 additions and 37 deletions
+5
View File
@@ -1,3 +1,8 @@
2.3.3 2016/1/9
- Improved Japanese localization [oreshinya]
- Improved Frech localization [magiclantern]
- Fixed CocoaPods localization with use_frameworks! [nivanchikov]
2.3.2 2015/10/12
- Fixed localization when building through CocoaPods [Allan Beaufour]
+3
View File
@@ -0,0 +1,3 @@
/* Feedback thats displayed when user presses the sample shortcut. */
"Shortcut pressed!" = "ショートカットが押されました!";
+2 -2
View File
@@ -15,9 +15,9 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.3.2</string>
<string>2.3.3</string>
<key>CFBundleVersion</key>
<string>2.3.2</string>
<string>2.3.3</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 20142015 Vadim Shpakovski. All rights reserved.</string>
</dict>
+25 -8
View File
@@ -1,17 +1,34 @@
#import "MASLocalization.h"
#import "MASShortcut.h"
static NSString *const MASLocalizationTableName = @"Localizable";
static NSString *const MASPlaceholderLocalizationString = @"XXX";
// The CocoaPods trickery here is needed because when the code
// is built as a part of CocoaPods, it wont make a separate framework
// and the Localized.strings file wont be bundled correctly.
// See https://github.com/shpakovski/MASShortcut/issues/74
NSString *MASLocalizedString(NSString *key, NSString *comment) {
NSBundle *frameworkBundle = nil;
#ifdef COCOAPODS
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"MASShortcut" withExtension:@"bundle"];
frameworkBundle = [NSBundle bundleWithURL:bundleURL];
#else
frameworkBundle = [NSBundle bundleForClass:[MASShortcut class]];
#endif
return [frameworkBundle localizedStringForKey:key value:@"XXX" table:@"Localizable"];
static NSBundle *localizationBundle = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSBundle *frameworkBundle = [NSBundle bundleForClass:[MASShortcut class]];
// first we'll check if resources bundle was copied to MASShortcut framework bundle when !use_frameworks option is active
NSURL *cocoaPodsBundleURL = [frameworkBundle URLForResource:@"MASShortcut" withExtension:@"bundle"];
if (cocoaPodsBundleURL) {
localizationBundle = [NSBundle bundleWithURL: cocoaPodsBundleURL];
} else {
// trying to fetch cocoapods bundle from main bundle
cocoaPodsBundleURL = [[NSBundle mainBundle] URLForResource: @"MASShortcut" withExtension:@"bundle"];
if (cocoaPodsBundleURL) {
localizationBundle = [NSBundle bundleWithURL: cocoaPodsBundleURL];
} else {
// fallback to framework bundle
localizationBundle = frameworkBundle;
}
}
});
return [localizationBundle localizedStringForKey:key
value:MASPlaceholderLocalizationString
table:MASLocalizationTableName];
}
+16 -2
View File
@@ -1,9 +1,23 @@
#import "MASShortcut.h"
/**
This class is used by the recording control to tell which shortcuts are acceptable.
There are two kinds of shortcuts that are not considered acceptable: shortcuts that
are too simple (like single letter keys) and shortcuts that are already used by the
operating system.
*/
@interface MASShortcutValidator : NSObject
// The following API enable hotkeys with the Option key as the only modifier
// For example, Option-G will not generate © and Option-R will not paste ®
/**
Set to `YES` if you want to accept Option-something shortcuts.
`NO` by default, since Option-something shortcuts are often used by system,
for example Option-G will type the © sign. This also applies to Option-Shift
shortcuts in other words, shortcut recorder will not accept shortcuts like
Option-Shift-K by default. (Again, since Option-Shift-K inserts the Apple
logo sign by default.)
*/
@property(assign) BOOL allowAnyShortcutWithOptionModifier;
+ (instancetype) sharedValidator;
+2 -2
View File
@@ -1,7 +1,7 @@
# coding: utf-8
Pod::Spec.new do |s|
s.name = 'MASShortcut'
s.version = '2.3.2'
s.version = '2.3.3'
s.summary = 'Modern framework for managing global keyboard shortcuts compatible with Mac App Store'
s.homepage = 'https://github.com/shpakovski/MASShortcut'
s.license = 'BSD 2-clause'
@@ -10,7 +10,7 @@ Pod::Spec.new do |s|
s.platform = :osx
s.osx.deployment_target = "10.6"
s.source = { :git => 'https://github.com/shpakovski/MASShortcut.git', :tag => '2.3.2' }
s.source = { :git => 'https://github.com/shpakovski/MASShortcut.git', :tag => '2.3.3' }
s.source_files = 'Framework/*.{h,m}'
s.exclude_files = 'Framework/*Tests.m'
s.osx.frameworks = 'Carbon', 'AppKit'
+2
View File
@@ -123,6 +123,7 @@
0DC2F19619938EFA003A0131 /* MASShortcutView+Bindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "MASShortcutView+Bindings.h"; path = "Framework/MASShortcutView+Bindings.h"; sourceTree = "<group>"; };
0DC2F19719938EFA003A0131 /* MASShortcutView+Bindings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "MASShortcutView+Bindings.m"; path = "Framework/MASShortcutView+Bindings.m"; sourceTree = "<group>"; };
EAFFDC811AACFF3300F38834 /* MASShortcut.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; name = MASShortcut.modulemap; path = Framework/MASShortcut.modulemap; sourceTree = "<group>"; };
ED8737791BCE459800BB1716 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -500,6 +501,7 @@
children = (
0D2CAB221B834464005431FC /* en */,
0D2CAB241B834467005431FC /* cs */,
ED8737791BCE459800BB1716 /* ja */,
);
name = Localizable.strings;
sourceTree = "<group>";
+10 -10
View File
@@ -2,13 +2,13 @@
"Cancel" = "Annuler";
/* Tooltip for non-empty shortcut button */
"Click to record new shortcut" = "Click to record new shortcut";
"Click to record new shortcut" = "Cliquez pour enregistrer le raccourci";
/* Tooltip for hint button near the non-empty shortcut */
"Delete shortcut" = "Delete shortcut";
"Delete shortcut" = "Supprimer le raccourci";
/* VoiceOver title */
"keyboard shortcut" = "keyboard shortcut";
"keyboard shortcut" = "raccourci clavier";
/* Alert button when shortcut is already used */
"OK" = "OK";
@@ -17,25 +17,25 @@
"Record Shortcut" = "Enregistrer le raccourci";
/* VoiceOver: Shortcut cleared */
"Shortcut cleared" = "Shortcut cleared";
"Shortcut cleared" = "Raccourci supprimé";
/* VoiceOver: Shortcut set */
"Shortcut set" = "Shortcut set";
"Shortcut set" = "Raccourci configuré";
/* Shortcut glyph name for SPACE key */
"Space" = "Espace";
/* Title for alert when shortcut is already used */
"The key combination %@ cannot be used" = "The key combination %@ cannot be used";
"The key combination %@ cannot be used" = "La combinaison %@ ne peut être utilisée";
/* Message for alert when shortcut is already used by the system */
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences.";
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Cette combinaison de touches ne peut être utilisée parce quelle est réservée pour un raccourci du système.\nSi vous désirez lutiliser, la plupart des raccourcis peuvent être modifiés dans longlet Clavier, dans Préférences Système.";
/* Message for alert when shortcut is already used */
"This shortcut cannot be used because it is already used by the menu item %@." = "This shortcut cannot be used because it is already used by the menu item %@.";
"This shortcut cannot be used because it is already used by the menu item %@." = "Ce raccourci ne peut être utilisé parce quil est déjà utilisé par le point de menu «%@».";
/* VoiceOver shortcut help */
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut.";
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Pour enregistrer un nouveau raccourci, cliquez sur ce bouton et tapez le nouveau raccourci, ou bien, tapez sur «Supprimer» pour supprimer le raccourci configuré.";
/* Non-empty shortcut button in recording state */
"Type New Shortcut" = "Saisir un raccourci";
@@ -44,4 +44,4 @@
"Type Shortcut" = "Saisir un raccourci";
/* Cancel action button for non-empty shortcut in recording state */
"Use Old Shortcut" = "Use Old Shortcut";
"Use Old Shortcut" = "Revenir au raccourci précédent";
+13 -13
View File
@@ -2,46 +2,46 @@
"Cancel" = "キャンセルする";
/* Tooltip for non-empty shortcut button */
"Click to record new shortcut" = "Click to record new shortcut";
"Click to record new shortcut" = "クリックしてショートカットを入力";
/* Tooltip for hint button near the non-empty shortcut */
"Delete shortcut" = "Delete shortcut";
"Delete shortcut" = "ショートカットを削除";
/* VoiceOver title */
"keyboard shortcut" = "keyboard shortcut";
"keyboard shortcut" = "キーボードショートカット";
/* Alert button when shortcut is already used */
"OK" = "OK";
/* Empty shortcut button in normal state */
"Record Shortcut" = "記録のショートカット";
"Record Shortcut" = "ショートカットを入力";
/* VoiceOver: Shortcut cleared */
"Shortcut cleared" = "Shortcut cleared";
"Shortcut cleared" = "ショートカットが削除されました";
/* VoiceOver: Shortcut set */
"Shortcut set" = "Shortcut set";
"Shortcut set" = "ショートカットが設定されました";
/* Shortcut glyph name for SPACE key */
"Space" = "スペース";
/* Title for alert when shortcut is already used */
"The key combination %@ cannot be used" = "The key combination %@ cannot be used";
"The key combination %@ cannot be used" = "%@ はショートカットに設定できません";
/* Message for alert when shortcut is already used by the system */
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences.";
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "このショートカットは、システム全体で使用されているショートカットのため、設定することができません。\nもしこのショートカットを使用したい場合、「システム環境設定」の「キーボード」、「マウス」のパネルから既に設定されているショートカットを変更してください。";
/* Message for alert when shortcut is already used */
"This shortcut cannot be used because it is already used by the menu item %@." = "This shortcut cannot be used because it is already used by the menu item %@.";
"This shortcut cannot be used because it is already used by the menu item %@." = "このショートカットは、メニュー操作の「%@」で使われているため、設定できません。";
/* VoiceOver shortcut help */
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut.";
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "このボタンをクリックし、ショートカットを入力すると、新しいショートカットが設定されます。また、削除ボタンをおすと、ショートカットが削除されます。";
/* Non-empty shortcut button in recording state */
"Type New Shortcut" = "タイプのショートカット";
"Type New Shortcut" = "ショートカットを入力";
/* Empty shortcut button in recording state */
"Type Shortcut" = "タイプのショートカット";
"Type Shortcut" = "ショートカットを入力";
/* Cancel action button for non-empty shortcut in recording state */
"Use Old Shortcut" = "Use Old Shortcut";
"Use Old Shortcut" = "古いショートカットを使用";