code: private function getLanguageFilter(array $languageCodes)
      {
          $languageFilters = array();
  
          foreach ($languageCodes as $languageCode) {
              // Include language
              $condition = new CustomField(self::FIELD_LANGUAGE, Operator::EQ, $languageCode);
              // Get list of excluded languages
              $excluded = $this->getExcludedLanguageCodes($languageCodes, $languageCode);
  
              // Combine if list is not empty
              if (!empty($excluded)) {
                  $condition = new LogicalAnd(
                      array(
                          $condition,
                          new LogicalNot(
                              new CustomField(self::FIELD_LANGUAGES, Operator::IN, $excluded)
                          ),
                      )
                  );
              }
  
              $languageFilters[] = $condition;
          }
  
          // Combine language fallback conditions with OR
          if (count($languageFilters) > 1) {
              $languageFilters = array(new LogicalOr($languageFilters));
          }
  
          // Exclude main languages index if used
          if ($this->hasMainLanguagesEndpoint) {
              $languageFilters[] = new LogicalNot(
                  new CustomField(self::FIELD_IS_MAIN_LANGUAGES_INDEX, Operator::EQ, true)
              );
          }
  
          // Combine conditions
          if (count($languageFilters) > 1) {
              return new LogicalAnd($languageFilters);
          }
  
          return reset($languageFilters);
      }
docs: Returns criteria for prioritized languages fallback.
  
  @param string[] $languageCodes
  
  @return \eZ\Publish\API\Repository\Values\Content\Query\Criterion