I've been thinking about an idea inspired by some recent AliExpress interactions. It's very difficult to do general-purpose language-to-language translation, but what about special-purpose concept-to-language translation? Rather than writing in your language and trying to translate into another language, you could instead use a graphical interface to construct what you want to say, which constructs sentences in both languages simultaneously.
You'd start with the agents (ie subjects & objects in the statement), move on to things you want to say about them or actions you want to describe etc. So the top level might be "a statement concerning me and you", followed by "a statement expressing my feelings towards you", followed by "I like you".
There'd be some complexities, for example "a statement expressing my feelings about <another statement>" would require creating and reasoning about another statement, but I think you can solve that by making statements themselves able to be agents in the scene. In other words, you could express your feelings about another statement the same way you would express your feelings about a person.
The other thing is that in many situations there would be a complexity explosion for certain kinds of essential vocabulary, like concrete nouns and verbs. These can probably be handled by just selecting them from a big list. However, specialty nouns (ie, the name of a particular product, local celebrity, or obscure Yoga pose) would be infeasible to enumerate, so I think you'd need some kind of free text entry for those.
The key to the idea, though, is to reduce the degrees of linguistic freedom in a natural way. Having a hundred ways to express the same thing is great for creativity, but bad when all you really want is to get something done with words. A lot of communication is purely functional or transactional, like in that recent Google Duplex demo, and this seems like it could be an interesting approach to transactional communication
The set of constructions doesn't have to be universal: the complexity can be cut down a lot by only including domain-relevant ones. And by constructing in your own language at the same time as the target language, you can check that what you're saying makes sense even if it's not your words.