Para ignorar subcarpetas específicas lo ideal es usar reglas de pares indicando la carpeta general a incluir y después las que deseamos excluir. Por ejemplo:

# Agregamos la carpeta padre (el /* es fundamental se explica abajo)
application/*
# Excluimos una carpeta especifica
!application/language/

# Agregamos otra carpeta padre
application/language/*
# Excluimos una carpeta específica
!application/language/gr/

El /* es importante, si no lo incluimos no funcionará:

Al no incluir /* git ignora la carpeta completa sin mirar dentro carpeta/. Esto se ignora porque está implícito al ignorar la carpeta.

Si incluímos /* se realiza una búsqueda dentro de carpeta/ ignorando todo en su interior, de esta forma podemos "excluir" subcarpetas y ficheros con: !carpeta/subcarpeta/fichero.extension.