コード例 #1
0
static jstring ICU_languageTagForLocale(JNIEnv* env, jclass, jstring javaLocaleId) {
    ScopedUtfChars localeID(env, javaLocaleId);

    // In most common cases, the BCP 47 tag will be the same size as the ICU
    // locale ID
    const size_t initialBufferSize = localeID.size() + 1;
    std::vector<char> buffer(initialBufferSize);

    UErrorCode status = U_ZERO_ERROR;
    const size_t outputLength = uloc_toLanguageTag(localeID.c_str(),
            &buffer[0], buffer.size(), false /* strict */, &status);
    if (status == U_BUFFER_OVERFLOW_ERROR) {
        buffer.resize(outputLength + 1);
        status = U_ZERO_ERROR;
        uloc_toLanguageTag(localeID.c_str(), &buffer[0], buffer.size(),
                false /* strict */, &status);
    }

    if (status == U_STRING_NOT_TERMINATED_WARNING) {
        buffer.resize(buffer.size() + 1);
        buffer[buffer.size() -1] = '\0';
    }

    if (maybeThrowIcuException(env, "ICU::languageTagForLocale", status)) {
        return NULL;
    }

    return env->NewStringUTF(&buffer[0]);
}
コード例 #2
0
static jstring ICU_addLikelySubtags(JNIEnv* env, jclass, jstring javaLocaleName) {
    UErrorCode status = U_ZERO_ERROR;
    ScopedUtfChars localeID(env, javaLocaleName);
    char maximizedLocaleID[ULOC_FULLNAME_CAPACITY];
    uloc_addLikelySubtags(localeID.c_str(), maximizedLocaleID, sizeof(maximizedLocaleID), &status);
    if (U_FAILURE(status)) {
        return javaLocaleName;
    }
    return env->NewStringUTF(maximizedLocaleID);
}
コード例 #3
0
extern "C" jstring Java_libcore_icu_ICU_getScript(JNIEnv* env, jclass, jstring javaLocale) {
    UErrorCode status = U_ZERO_ERROR;
    ScopedUtfChars localeID(env, javaLocale);
    char script[ULOC_SCRIPT_CAPACITY];
    uloc_getScript(localeID.c_str(), script, sizeof(script), &status);
    if (U_FAILURE(status)) {
        return NULL;
    }
    return env->NewStringUTF(script);
}