Use preferred language in sorting together with some additional parameters like video filename compared to subtitle file name to get the most likely on top.

When searching for a movie, try with moviehash and IMDBid before adding a search string. The search string often return alot of wrong subtitles.
Update OSUtilities.py

"If you define moviehash and moviebytesize, then imdbid and query in same array are ignored."
"If you define query, then moviehash, moviebytesize and imdbid is ignored."

Maybe I don't get it but this seems contradictory. I had another go, trying to get rid of the clutter.

Manual search only uses the manual search string. Movie search first uses moviehash, moviebytesize and imdbid and if no result then uses the query string as a last resort since that is probably what you would enter in a manual search.

This is some tests I made, returned subs on 8 movies searching for english and swedish:
This version: 13, 9, 6, 12, 8, 5, 1, 2
Old version: 13, 9, 6, 434, 8, 5, 7, 143

From what I can see all the excess are for other movies, even with the 2nd from the end, this version returned 1 and the old version returned 7 of which 6 where for other movies.
Update OSUtilities.py

Cleaned up a bit
Update service.py

Now you can sort with preferred subtitle language, any other way of getting to the value? This sorting get you all the most likely results on top in your preferred language, if two subtitles in different languages are labeled as sync your preferred language gets on top and the other right below.

Removed the sync by filename labeling for now.
Update service.py

This would probably make the path os independent?
Update service.py

Support for preferred language sorting