In my opinion the definition should be so that the operator doesn't change across a document even through language changes.
So if the main language is German, \ker
should resolve to “Kern” also in English. However, it's easy to provide also a “variable” kind.
\documentclass{scrartcl}
\usepackage[english,ngerman]{babel}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\DeclareBabelMathOperator{mmO{???}}
{
\DeclareMathOperator{#1}
{
\str_case:xnF { \use:c { bbl@main@language } } { #2 } { #3 }
}
}
\NewDocumentCommand\DeclareVariableBabelMathOperator{mmO{???}}
{
\DeclareMathOperator{#1}
{
\str_case:xnF { \languagename }{ #2 } { #3 }
}
}
\cs_generate_variant:Nn \str_case:nnF { x }
\ExplSyntaxOff
\DeclareBabelMathOperator{\range}{
{english}{ran}
{ngerman}{Bild}
}
\DeclareBabelMathOperator{\kernel}{
{english}{ker}
{ngerman}{Kern}
}[ker]
\DeclareVariableBabelMathOperator{\vrange}{
{english}{ran}
{ngerman}{Bild}
}
\DeclareVariableBabelMathOperator{\vkernel}{
{english}{ker}
{ngerman}{Kern}
}[ker]
\begin{document}
\section{Fixed names}
\[
\dim(V) = \dim(\range(T)) + \dim(\kernel(T))
\]
\begin{otherlanguage*}{english}
\[
\dim(V) = \dim(\range(T)) + \dim(\kernel(T))
\]
\end{otherlanguage*}
\section{Variable names}
\[
\dim(V) = \dim(\vrange(T)) + \dim(\vkernel(T))
\]
\begin{otherlanguage*}{english}
\[
\dim(V) = \dim(\vrange(T)) + \dim(\vkernel(T))
\]
\end{otherlanguage*}
\end{document}
The optional argument is for the string to be used with a language not included in the previous choices.

Here is the output if english
and ngerman
are swapped throughout.
