class MorfologikCanadianSpellerRule extends AbstractEnglishSpellerRule {

  private static final String RESOURCE_FILENAME = "/en/hunspell/en_CA.dict";
  private static final String LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = "en/hunspell/spelling_en-CA.txt";
  private static final Map<String,String> US_ENGLISH = loadWordlist("en/en-US-GB.txt", 0);

  public MorfologikCanadianSpellerRule(ResourceBundle messages,
                                       Language language, UserConfig userConfig, List<Language> altLanguages) throws IOException {
    super(messages, language, userConfig, altLanguages);
  }

  /**
   * @since 4.9
   */
  public MorfologikCanadianSpellerRule(ResourceBundle messages, Language language, GlobalConfig globalConfig, UserConfig userConfig, List<Language> altLanguages, LanguageModel languageModel, Language motherTongue) throws IOException {
    super(messages, language, globalConfig, userConfig, altLanguages, languageModel, motherTongue);
  }

  @Override
  protected VariantInfo isValidInOtherVariant(String word) {<FILL_FUNCTION_BODY>}

  @Override
  public String getFileName() {
    return RESOURCE_FILENAME;
  }

  @Override
  public String getId() {
    return "MORFOLOGIK_RULE_EN_CA";
  }

  @Override
  public String getLanguageVariantSpellingFileName() {
    return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
  }
}

    String otherVariant = US_ENGLISH.get(word.toLowerCase());
    if (otherVariant != null) {
      return new VariantInfo("American English", otherVariant);
    }
    return null;
  
<methods>public void <init>(java.util.ResourceBundle, org.languagetool.Language) throws java.io.IOException,public void <init>(java.util.ResourceBundle, org.languagetool.Language, org.languagetool.UserConfig, List<org.languagetool.Language>) throws java.io.IOException,public void <init>(java.util.ResourceBundle, org.languagetool.Language, org.languagetool.GlobalConfig, org.languagetool.UserConfig, List<org.languagetool.Language>, org.languagetool.languagemodel.LanguageModel, org.languagetool.Language) throws java.io.IOException,public List<java.lang.String> getAdditionalSpellingFileNames() ,public org.languagetool.rules.RuleMatch[] match(org.languagetool.AnalyzedSentence) throws java.io.IOException<variables>private static final java.util.regex.Pattern ADHOC,private static final java.util.regex.Pattern AFAIK,private static final java.util.regex.Pattern ALLRIGHT,private static final java.util.regex.Pattern APRIL,private static final java.util.regex.Pattern BASICLY,private static final java.util.regex.Pattern BELEIVES,private static final java.util.regex.Pattern BELIVES,private static final java.util.regex.Pattern BIZZARE,private static final java.util.regex.Pattern BONAFIDE,private static final java.util.regex.Pattern CEMETARIES,private static final java.util.regex.Pattern CEMETARY,private static final java.util.regex.Pattern COMPLETLY,private static final java.util.regex.Pattern CONTAINS_TOKEN,private static final java.util.regex.Pattern DEACTIVE,private static final java.util.regex.Pattern DECEMBER,private static final java.util.regex.Pattern DEVOPS,private static final java.util.regex.Pattern DISSAPEARS,private static final java.util.regex.Pattern ENGLISH,private static final java.util.regex.Pattern FARENHEIT,private static final java.util.regex.Pattern FREINDS,private static final java.util.regex.Pattern FYI,private static final java.util.regex.Pattern GITLAB,private static final java.util.regex.Pattern HONGKONG,private static final java.util.regex.Pattern HTTP,private static final java.util.regex.Pattern HTTPS,private static final java.util.regex.Pattern HUBSPOT,private static final java.util.regex.Pattern INCIDENTLY,private static final java.util.regex.Pattern INTERUPTS,private static final java.util.regex.Pattern JANUARY,private static final java.util.regex.Pattern JIST,private static final java.util.regex.Pattern LANGUAGETOOL,private static final java.util.regex.Pattern LOLLYPOPS,private static final java.util.regex.Pattern MISSPELT,private static final java.util.regex.Pattern NOVEMBER,private static final java.util.regex.Pattern OCASSIONS,private static final java.util.regex.Pattern OCCURANCES,private static final java.util.regex.Pattern OCTOBER,private static final java.util.regex.Pattern PEICES,private static final java.util.regex.Pattern PERSISTANT,private static final java.util.regex.Pattern PROFILERATION,private static final java.util.regex.Pattern SARGENT,private static final java.util.regex.Pattern SEIGES,private static final java.util.regex.Pattern SEPTEMBER,private static final java.util.regex.Pattern SPANISH,private static final java.util.regex.Pattern SUPERCEDES,private static final java.util.regex.Pattern SWIMMED,private static final java.util.regex.Pattern THRESHHOLDS,private static final java.util.regex.Pattern TOMMORROWS,private static final java.util.regex.Pattern TOUTES,private static final java.util.regex.Pattern TV,private static final java.util.regex.Pattern UNDETERMINISTIC,private static final java.util.regex.Pattern URL,private static final java.util.regex.Pattern WHATSAPP,private static final java.util.regex.Pattern WHEREEVER,private static final java.util.regex.Pattern WIERD,private static final java.lang.String[] blogLinks,private static final Set<java.lang.String> lcDoNotSuggestWords,private static final Logger logger,private static final int maxPatterns,private static org.languagetool.tagging.ner.NERService nerPipe,protected final non-sealed Map<java.lang.String,List<java.lang.String>> topSuggestions,protected final non-sealed Map<java.lang.String,List<java.lang.String>> topSuggestionsIgnoreCase,private final non-sealed org.languagetool.rules.en.translation.BeoLingusTranslator translator,private static final java.util.regex.Pattern[] wordPatterns