Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package org.litesoft.locale;

public abstract class AbstractLocale {
    public static final String BAD_LANGUAGE_OR_COUNTRY = "??";

    private static final String LOCALE_CLASS_NAME_PREFIX = ".Locale_";

    private final boolean mActive;
    private final String mLanguage, mCountry, mCode;
    /* friend( DerivedLocaleGraph ) */ int mDepth;

    protected AbstractLocale( boolean pActive ) {
        mActive = pActive;
        String zName = "." + this.getClass().getName();
        int zAt = zName.indexOf( LOCALE_CLASS_NAME_PREFIX );
        if ( zAt == -1 ) {
            throw new IllegalStateException( "'" + LOCALE_CLASS_NAME_PREFIX + "' not found in: " + zName );
        }
        String zLanguageCountry = zName.substring( zAt + LOCALE_CLASS_NAME_PREFIX.length() );
        if ( !isValidStructuredCode( zLanguageCountry ) ) {
            throw new IllegalStateException( "No Language & Country found in: " + zName );
        }
        mLanguage = assertLowerCase( "Language", codeToLanguage( zLanguageCountry ) );
        mCountry = assertUpperCase( "Country", codeToCountry( zLanguageCountry ) );
        mCode = toCode( mLanguage, mCountry );
    }

    private static String assertLowerCase( String pWhat, String pString ) {
        return assertCase( pWhat, pString, pString.toLowerCase(), "LowerCase" );
    }

    private static String assertUpperCase( String pWhat, String pString ) {
        return assertCase( pWhat, pString, pString.toUpperCase(), "UpperCase" );
    }

    private static String assertCase( String pWhat, String pString, String pAdjustedString, String pCase ) {
        if ( pString.equals( pAdjustedString ) ) {
            return pString;
        }
        throw new IllegalStateException( pWhat + " '" + pString + "' NOT " + pCase );
    }

    protected AbstractLocale() {
        this( true );
    }

    public boolean isActive() {
        return mActive;
    }

    public String getLanguage() {
        return mLanguage;
    }

    public String getCountry() {
        return mCountry;
    }

    public String getCode() {
        return mCode;
    }

    @Override
    public boolean equals( Object o ) {
        return (this == o) || ((o instanceof AbstractLocale) && equals( (AbstractLocale) o ));
    }

    public boolean equals( AbstractLocale them ) {
        return (this == them) || ((them != null)
                                  && this.mCode.equals( them.mCode ));
    }

    @Override
    public int hashCode() {
        return mCode.hashCode();
    }

    @Override
    public String toString() {
        return getCode();
    }

    public static String languageFrom( String pCode ) {
        return isValidStructuredCode( pCode ) ? codeToLanguage( pCode ) : BAD_LANGUAGE_OR_COUNTRY;
    }

    public static String countryFrom( String pCode ) {
        return isValidStructuredCode( pCode ) ? codeToCountry( pCode ) : BAD_LANGUAGE_OR_COUNTRY;
    }

    public static String toCode( String pLanguage, String pCountry ) {
        return ensure2Char( pLanguage ).toLowerCase() + "_" + ensure2Char( pCountry ).toUpperCase();
    }

    private static boolean isValidStructuredCode( String pCode ) {
        return (pCode != null) && (pCode.length() == 5) && (pCode.charAt( 2 ) == '_');
    }

    private static String codeToLanguage( String pLanguageCountry ) {
        return pLanguageCountry.substring( 0, 2 );
    }

    private static String codeToCountry( String pLanguageCountry ) {
        return pLanguageCountry.substring( 3 );
    }

    private static String ensure2Char( String pString ) {
        if ( pString != null ) {
            if ( (pString = pString.trim()).length() == 2 ) {
                return pString;
            }
        }
        return BAD_LANGUAGE_OR_COUNTRY;
    }
}

Commits for litesoft/trunk/DeviceDesktopTest/src/org/litesoft/locale/AbstractLocale.java

Diff revisions: vs.
Revision Author Commited Message
961 Diff Diff GeorgeS picture GeorgeS Fri 01 Aug, 2014 03:13:31 +0000

Externalization Work.

935 Diff Diff GeorgeS picture GeorgeS Fri 30 May, 2014 20:28:08 +0000

Reformatted.

931 Diff Diff GeorgeS picture GeorgeS Tue 01 Apr, 2014 20:11:20 +0000

Locale Support.

929 GeorgeS picture GeorgeS Mon 31 Mar, 2014 01:42:14 +0000

Locale Work...