How do I switch between languages on Windows 10 like I do in OS X?

One can assign in Windows 10 a keyboard shortcut to a language :

  1. Go to Control Panel -> Clock, Language, and Region -> Language -> Advanced settings.

  2. Under Switching input methods, click Change language bar hot keys, then click on your language, and finally on Change Key Sequence.

  3. This will display a dialog where you can assign a shortcut key to that language:

image

Since the above shortcut keys are quite limited, it is possible by using for example AutoHotkey to change this to any other keyboard combination. Once you learn AutoHotkey, it will be easy to reproduce the exact behavior of OSX (one can also ask for help on their forum).

Many AutoHotkey scripts can be found on the Internet and one can tailor them to fit any need.

The following example script aims at improving the functioning of Alt+Shift as a toggle between the English and Russian keyboards for the current window :

; This should be replaced by whatever your native language is. See 
; http://msdn.microsoft.com/en-us/library/dd318693%28v=vs.85%29.aspx
; for the language identifiers list.
ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1)
en := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)

!Shift::
w := DllCall("GetForegroundWindow")
pid := DllCall("GetWindowThreadProcessId", "UInt", w, "Ptr", 0)
l := DllCall("GetKeyboardLayout", "UInt", pid)
if (l = en)
{
    PostMessage 0x50, 0, %ru%,, A
}
else
{
    PostMessage 0x50, 0, %en%,, A
}

Here are some threads offering scripts for changing the keyboard layout with various functionality :

  • Keyboard layout switcher
  • Keyboard layout switcher for many layouts
  • Using CapsLock to switch the keyboard language layout

Here are some free products that do that as well :

  • keyla - Can define keyboard shortcuts or use a taskbar icon
  • Recaps - Uses CapsLock to switch the keyboard language

If you want the exact behavior as in macOS, without having to configure, you can use Ctrl+Win+Space to switch between the two recently used languages, like what you get from Cmd+Space.

To switch to other input methods, like when you hit Cmd+Space twice, just use Win+Space.


How to switch languages in Windows 10 (almost) like in OS X, Android, IPhone

There is (almost perfect) solution for this issue in Windows 7, which is possible to implement in Windows 10 with few additional steps.

Background

The solution is based on the fact that there're two distinct entities in Windows: Input Language and Keyboard Layout.

By default Alt+Shift loops through configured Input Languages and it is Input Language which people usually add when they require additional languages in their systems.

But.

  1. It is possible to alter behavior of Alt+Shift (or Ctrl+Shift if you prefer) to loop through Keyboard Layouts and not to change Input Language.
  2. It is possible to specify different keyboard shortcut for every Input Language (as it is also described in one of other answers to this question)
  3. Most importantly it is possible to add unrelated Keyboard Layout to an Input Language (even layout with different script), for example Hebrew Layout to English Language. This step is a bit tricky in Windows 10, but doable.

Finally you'll end up having several different Input Languages, for each of which you'll have separate keyboard shortcut, but once you choose Input Language you'll be able to use regular Alt+Shift which will loop between defined Keyboard Layouts "inside" of the Input Language.

Configuration in Windows 10

For simplicity, let's assume that you want to use 3 languages: English, Russian and Hebrew. Upon completing the steps below you'll have three modes of operation:

  • English mode, used by default, selected with Ctrl+1 and Alt+Shift (or Ctrl+Shift) looping between English and Russian
  • Hebrew mode, selected with Ctrl+2 and with Alt+Shift (or Ctrl+Shift) looping between English and Hebrew
  • Russian mode, selected with Ctrl+3 and with Alt+Shift (or Ctrl+Shift) looping between English and Russian

Steps to configure.

  1. Ctrl-Esc (which opens Start Menu) - or Windows Button in the left bottom corner of the screen
  2. Type Language (which should bring up Language item from Control Panel), press Enter
  3. Depending on your vendor you might have English and your regional language. Assuming you have only English, add Russian and Hebrew with Add a language button
  4. Every language comes with default Input Method, which corresponds to the language. Now we will add "unrelated" Input Method to each Input Language:
    1. Download Microsoft Keyboard Layout Creator
    2. File -> Load Existing Keyboard.
    3. Choose the layout which you want to add (let's start with Russian Layout for English Input Language)
    4. Project -> Properties
    5. Modify Language to match Input Language for which you want this keyboard layout to be available. It would be English (United States) in our case.
    6. Press OK. You might need to modify Description slightly if you get "Keyboard description is identical" error message. Just add some suffix.
    7. Open the Project menu and choose Build DLL and Setup Package. Ignore warning, agree to open directory where Windows Installer package was built.
    8. Run setup.exe, which installs your Keyboard Layout for the chosen Input Language
    9. If you reopen (close and open once again) Language screen (from step 2) and choose Options for English (United States) language, you should see two input methods now: US and Unavailable input method
    10. Repeat steps 4.1-4.9 for all the needed keyboard layouts (for the example that we're discussing, we would need two more repetitions: load English keyboard set Language to Russian in Project -> Properties and build it, load English keyboard again, set Language to Hebrew in Project -> Properties and build it).
  5. Upon successful completion of previous steps you should have Unavailable input method on the Options screen for every language that you used as the target language in step 4.5.
  6. Last step is to configure keyboard shortcuts. Open Language screen (steps 1-2)
    1. Choose Advanced settings (on the left pane of Language screen)
    2. Choose Change language bar hot keys
    3. Choose Between input languages (left mouse click) and press Change Key Sequence button
    4. Choose Not Assigned in the Switch Input Language pane
    5. Choose Left Alt + Shift (or the one you prefer) in Switch Keyboard Layout pane
    6. Confirm (OK).
    7. Choose To English (United States) - US (left mouse click), press Change Key Sequence button, check Enable Key Sequence, choose Ctrl and 1 (or any other preferrable), confirm
    8. Choose To Hebrew (Israel) - Hebrew (Standard) (left mouse click), press Change Key Sequence button, check Enable Key Sequence, choose Ctrl and 2 (or any other preferrable), confirm
    9. Choose To Russian (Russia) - Russian (left mouse click), press Change Key Sequence button, check Enable Key Sequence, choose Ctrl and 3 (or any other preferrable), confirm
  7. Reboot (yes, keyboard shortcuts are quite buggy in Windows, once you change them, you'll need to reboot so that they're registered correctly).

Configuration in Windows 7

Configuring the same use case in Windows 7 is simpler and doesn't require downloading additional tools.

  1. Ctrl-Esc (which opens Start Menu) - or Windows Button in the left bottom corner of the screen
  2. Type Region and Language (which should bring up Language item from Control Panel), press Enter
  3. Keyboards and Languages tab -> Change keyboards
  4. Choose Add button and search for English (United States) section
  5. Click + (plus sign) which open Keybord section
  6. Open it and click Show More... item, which will complement the list with all the different languages, find Russian in this list and check it (make sure you selected Russian inside of Keyboard inside of English (United States) list.
  7. After confirming you should have two Keyboards under EN English (United States): US and Russian.
  8. Click Add, search for Hebrew (Israel) and select Hebrew, Show more..., United States-International (which will be available only after choosing Show more), confirm
  9. Click Add, search for Russian (Russia) and select Russia, Show more..., US (which will be available only after choosing Show more), confirm
  10. Go to Advanced Key Settings tab
  11. Choose Between input languages (left mouse click)
  12. Choose Change Key Sequence button
  13. Set Switch Input Language to None, Switch Keyboard Layout to Left Alt + Shift (or Ctrl + Shift), confirm
  14. To English (United States) - US -> Change Key Sequence -> Enable Key Sequence, set to Ctrl+1, confirm
  15. To Hebrew (Israel) - United States-International -> Change Key Sequence -> Enable Key Sequence, set to Ctrl+2, confirm
  16. To Russian (Russia) - US -> Change Key Sequence -> Enable Key Sequence, set to Ctrl+3, confirm
  17. Confirm (OK).
  18. Reboot.

Notes

There's one peculiarity: in some programs you might get garbled characters, unless you switch to the right Input Language (for example, if you get garbled Russian input, use Ctrl+3 to switch to Russian keyboard layout). But it happens quite rarely and only in some unusual circumstances (for most of Windows users), doesn't really bother me a lot.