I ran into this problem recently after making some changes in my session settings, and after some analysis, I found the solution.
Basically, you need to set the environment variables LANG and LANGUAGE correctly.
I am an American using Portuguese as a second language. I installed openSUSE with the language set to English-US and then in openSUSE menu->Configure Desktop (which is KDE’s System Settings app), I set the keyboard layout to
Map: us
Layout: English (US)
Variant: English (US, International, with dead keys)
At that point, I was able to type some international characters (vowels with ', ~, or ^), but the cedilla and other keys found on the Microsoft US-International keyboard layout didn’t work. Typing 'c showed a question mark (?), not a cedilla.
Changing the keyboard layout did not change the value of the required environment variables. LANG was set to “en_US.UTF-8”, and both LANGUAGE and LC_ALL were unset.
To get the full support for the US international keyboard, I needed to set the environment variables like this:
unset LC_ALL
export LANG=en_US
export LANGUAGE=en_US
These shell commands can be added to .bash_profile in the user’s home directory, but the preferred method is to create a file ending in .sh in the directory ~/.kde4/env, containing the same commands. This file is sourced when the /usr/bin/startkde shell script is run to initialize the KDE session. Somewhere during that process, it seems that a bash shell is started as a login shell (maybe to execute /usr/bin/startkde), and that is why putting the commands in .bash_profile is effective. But it seems this behavior is not guaranteed to work in the future, so it is recommended to use the ~/.kde4/env/<scriptname>.sh file instead.
After creating that file, just log out of your KDE session and back in again, and it should work.
I explained this in terms of my own configuration, and if yours is different (for example, if you are Brazilian with openSUSE running in Portuguese), you may need to set the environment variables differently. I would guess that using pt_BR instead of en_US would be sufficient.
Jay Ts