How to use localized categories properly?
To answer my own question see below:

As carlcs pointed out correctly the problem actually isn't located in getting the category - which works just well and is the right way to do it - but in how the relation to the entries is done.


I should check if the tag (coming from the url) actually resolves to a "real" category, otherwise just all entries will be shown.
just handling over the category to the .relatedTo method on craft.entries won't do it because that just fetches all entries related to this category irrespective to its locale - sourceLocale: craft.locale needs to be set.
Still not finished; because we want to "find elements related to the given element, where the given element is the target of the relation" – target in this sense is the category – we need to define it as tagetElement in the relatedTo method.


...

Getting the entries should now look like this:

{% if categories|length %}
    {% set entries = 
              craft.entries.section('projects').relatedTo({
                 targetElement: categories,
                 sourceLocale: craft.locale
              }) 
    %}
    {% for entry in entries %}
    ...
    {% endfor %}
{% endif %}


...

And the actual title of my question should be "How to do category relations with locales" ;)