diff -Naur a/ext/intl/breakiterator/codepointiterator_internal.cpp b/ext/intl/breakiterator/codepointiterator_internal.cpp --- a/ext/intl/breakiterator/codepointiterator_internal.cpp 2022-02-12 10:06:56.410352885 +0100 +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp 2022-02-12 10:07:41.236949927 +0100 @@ -74,7 +74,11 @@ clearCurrentCharIter(); } +#if U_ICU_VERSION_MAJOR_NUM >= 70 +bool CodePointBreakIterator::operator==(const BreakIterator& that) const +#else UBool CodePointBreakIterator::operator==(const BreakIterator& that) const +#endif { if (typeid(*this) != typeid(that)) { return FALSE; diff -Naur a/ext/intl/breakiterator/codepointiterator_internal.h b/ext/intl/breakiterator/codepointiterator_internal.h --- a/ext/intl/breakiterator/codepointiterator_internal.h 2022-02-12 10:06:56.410352885 +0100 +++ b/ext/intl/breakiterator/codepointiterator_internal.h 2022-02-12 10:07:41.236949927 +0100 @@ -39,7 +39,11 @@ virtual ~CodePointBreakIterator(); +#if U_ICU_VERSION_MAJOR_NUM >= 70 + virtual bool operator==(const BreakIterator& that) const; +#else virtual UBool operator==(const BreakIterator& that) const; +#endif virtual CodePointBreakIterator* clone(void) const; diff -Naur a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c --- a/ext/intl/locale/locale_methods.c 2019-01-09 10:54:13.000000000 +0100 +++ b/ext/intl/locale/locale_methods.c 2022-02-12 10:08:21.679684186 +0100 @@ -1324,7 +1324,7 @@ if( token && (token==cur_lang_tag) ){ /* check if the char. after match is SEPARATOR */ chrcheck = token + (strlen(cur_loc_range)); - if( isIDSeparator(*chrcheck) || isEndOfTag(*chrcheck) ){ + if( isIDSeparator(*chrcheck) || isKeywordSeparator(*chrcheck) || isEndOfTag(*chrcheck) ){ if( cur_lang_tag){ efree( cur_lang_tag ); }