Don't auto-change the language

This commit is contained in:
Thomas Steiner 2025-07-11 19:14:25 +02:00
parent 8f2834d02a
commit 25b0143a12
3 changed files with 17 additions and 52 deletions

View File

@ -11,7 +11,6 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import { length } from 'stringz';
import { missingAltTextModal } from 'mastodon/initial_state';
import { changeComposeLanguage } from 'mastodon/actions/compose';
import AutosuggestInput from 'mastodon/components/autosuggest_input';
import AutosuggestTextarea from 'mastodon/components/autosuggest_textarea';
@ -46,10 +45,6 @@ const messages = defineMessages({
reply: { id: 'compose_form.reply', defaultMessage: 'Reply' },
});
const mapStateToProps = (state) => ({
currentLanguage: state.meta.get('locale'),
});
class ComposeForm extends ImmutablePureComponent {
static propTypes = {
intl: PropTypes.object.isRequired,
@ -106,25 +101,6 @@ class ComposeForm extends ImmutablePureComponent {
}
};
handleKeyUp = async (e) => {
const text = this.getFulltextForCharacterCounting().trim();
const currentLanguage = this.props.currentLanguage;
if (!text || countLetters(text) <= 5) {
this.props.dispatch(changeComposeLanguage(currentLanguage));
return;
}
try {
let detectedLanguage = await debouncedGuess(text);
if (!detectedLanguage) {
this.props.dispatch(changeComposeLanguage(currentLanguage));
return;
}
this.props.dispatch(changeComposeLanguage(detectedLanguage));
} catch {
this.props.dispatch(changeComposeLanguage(currentLanguage));
}
}
getFulltextForCharacterCounting = () => {
return [this.props.spoiler? this.props.spoilerText: '', countableText(this.props.text)].join('');
};
@ -301,7 +277,6 @@ class ComposeForm extends ImmutablePureComponent {
suggestions={this.props.suggestions}
onFocus={this.handleFocus}
onKeyDown={this.handleKeyDown}
onKeyUp={this.handleKeyUp}
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
onSuggestionSelected={this.onSuggestionSelected}
@ -352,4 +327,4 @@ class ComposeForm extends ImmutablePureComponent {
}
export default injectIntl(connect(mapStateToProps)(ComposeForm));
export default injectIntl(ComposeForm);

View File

@ -65,13 +65,12 @@ let module;
if (languageDetectorInGlobalThis) {
if (!languageDetectorSupportedAndReady) {
// …trigger the model download
self.LanguageDetector.create();
globalThis.LanguageDetector.create();
}
module = await import('./language_detection_with_languagedetector');
} else {
module = await import('./language_detection_with_laude');
}
const debouncedGuess = module.debouncedGuess;
console.log(debouncedGuess)
export { debouncedGuess, countLetters, ISO_639_MAP };

View File

@ -1,6 +1,5 @@
import { debounce } from 'lodash';
import { countLetters } from './language_detection';
import { urlRegex } from './url_regex';
const guessLanguage = async (text) => {
@ -8,17 +7,15 @@ const guessLanguage = async (text) => {
.replace(urlRegex, '')
.replace(/(^|[^/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/ig, '');
if (countLetters(text) > 5) {
try {
const languageDetector = await self.LanguageDetector.create();
let {detectedLanguage, confidence} = (await languageDetector.detect(text))[0];
if (confidence > 0.8) {
detectedLanguage = detectedLanguage.split('-')[0];
return detectedLanguage;
}
} catch {
return '';
try {
const languageDetector = await globalThis.LanguageDetector.create();
let {detectedLanguage, confidence} = (await languageDetector.detect(text))[0];
if (confidence > 0.8) {
detectedLanguage = detectedLanguage.split('-')[0];
return detectedLanguage;
}
} catch {
return '';
}
return '';
@ -26,23 +23,17 @@ const guessLanguage = async (text) => {
const debouncedGuess = (() => {
let resolver = null;
let rejecter = null;
const debounced = debounce(async (text) => {
try {
const result = await guessLanguage(text);
if (resolver) {
resolver(result);
resolver = null;
}
} catch {
rejecter('');
const debounced = debounce((text) => {
const result = guessLanguage(text);
if (resolver) {
resolver(result);
resolver = null;
}
}, 500, { maxWait: 1500, leading: true, trailing: true });
return (text) => new Promise((resolve, reject) => {
return (text) => new Promise((resolve) => {
resolver = resolve;
rejecter = reject;
debounced(text);
});
})();