Skip to content

Commit 43caad7

Browse files
author
1170762202@qq.com
committed
设置-国际化
1 parent db43479 commit 43caad7

File tree

42 files changed

+566
-83
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+566
-83
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
android:value="true" />
3737

3838

39-
<activity android:name=".activity.MainActivity" />
39+
<activity android:name=".activity.MainActivity"
40+
android:launchMode="singleTask"/>
4041

4142

4243
<activity
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<resources>
2+
<string name="app_name">WanAndroid</string>
3+
4+
</resources>

library-base/src/main/java/com/zlx/module_base/BaseApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import androidx.annotation.NonNull;
88
import androidx.annotation.Nullable;
99

10-
import com.zlx.module_base.base_manage.ActivityManage;
10+
import com.zlx.module_base.base_manage.ActivityUtil;
1111

1212

1313
public class BaseApplication extends Application {
@@ -34,7 +34,7 @@ private void setApplication(@NonNull BaseApplication application) {
3434
@Override
3535
public void onActivityCreated(@NonNull Activity activity,
3636
@Nullable Bundle savedInstanceState) {
37-
ActivityManage.addActivity(activity);
37+
ActivityUtil.addActivity(activity);
3838
}
3939

4040
@Override
@@ -65,7 +65,7 @@ public void onActivitySaveInstanceState(
6565

6666
@Override
6767
public void onActivityDestroyed(@NonNull Activity activity) {
68-
ActivityManage.removeActivity(activity);
68+
ActivityUtil.removeActivity(activity);
6969
}
7070
});
7171
}

library-base/src/main/java/com/zlx/module_base/base_ac/BaseAc.java

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.zlx.module_base.base_ac;
22

33
import android.annotation.SuppressLint;
4-
import android.app.Activity;
54
import android.content.Context;
6-
import android.content.Intent;
75
import android.content.pm.ActivityInfo;
6+
import android.content.res.Configuration;
87
import android.os.Build;
98
import android.os.Bundle;
109
import android.os.IBinder;
@@ -18,18 +17,18 @@
1817

1918
import androidx.annotation.Nullable;
2019
import androidx.appcompat.app.AppCompatActivity;
21-
import androidx.appcompat.app.AppCompatDelegate;
20+
import androidx.appcompat.view.ContextThemeWrapper;
2221

2322
import com.gyf.immersionbar.BarHide;
2423
import com.gyf.immersionbar.ImmersionBar;
25-
import com.kingja.loadsir.callback.Callback;
2624
import com.kingja.loadsir.core.LoadService;
2725
import com.kingja.loadsir.core.LoadSir;
2826
import com.tbruyelle.rxpermissions2.RxPermissions;
2927
import com.zlx.module_base.R;
30-
import com.zlx.module_base.base_manage.ActivityManage;
28+
import com.zlx.module_base.base_manage.ActivityUtil;
3129
import com.zlx.module_base.base_util.DoubleClickExitDetector;
3230
import com.zlx.module_base.base_util.InputTools;
31+
import com.zlx.module_base.base_util.LanguageUtil;
3332
import com.zlx.module_base.base_util.LogUtils;
3433
import com.zlx.module_base.impl.IAcView;
3534
import com.zlx.module_base.impl.INetView;
@@ -38,7 +37,6 @@
3837
import com.zlx.module_base.widget.slideback.SlideBack;
3938

4039
import butterknife.ButterKnife;
41-
import me.imid.swipebacklayout.lib.app.SwipeBackActivity;
4240

4341

4442
/**
@@ -59,6 +57,7 @@ public abstract class BaseAc extends AppCompatActivity implements INetView, IAcV
5957
protected void onCreate(@Nullable Bundle savedInstanceState) {
6058
beforeOnCreate();
6159
super.onCreate(savedInstanceState);
60+
ActivityUtil.addActivity(this);
6261
afterOnCreate();
6362
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
6463
setTheme(getMTheme());
@@ -73,7 +72,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
7372
doubleClickExitDetector =
7473
new DoubleClickExitDetector(this, "再按一次退出", 2000);
7574

76-
if (canSwipeBack()){
75+
if (canSwipeBack()) {
7776
//开启滑动返回
7877
SlideBack.create()
7978
.attachToActivity(this);
@@ -143,6 +142,34 @@ public void onRetryBtnClick() {
143142

144143
}
145144

145+
@Override
146+
protected void attachBaseContext(Context newBase) {
147+
if (shouldSupportMultiLanguage()) {
148+
Context context = LanguageUtil.attachBaseContext(newBase);
149+
final Configuration configuration = context.getResources().getConfiguration();
150+
// 此处的ContextThemeWrapper是androidx.appcompat.view包下的
151+
// 你也可以使用android.view.ContextThemeWrapper,但是使用该对象最低只兼容到API 17
152+
// 所以使用 androidx.appcompat.view.ContextThemeWrapper省心
153+
final ContextThemeWrapper wrappedContext = new ContextThemeWrapper(context,
154+
R.style.Theme_AppCompat_Empty) {
155+
@Override
156+
public void applyOverrideConfiguration(Configuration overrideConfiguration) {
157+
if (overrideConfiguration != null) {
158+
overrideConfiguration.setTo(configuration);
159+
}
160+
super.applyOverrideConfiguration(overrideConfiguration);
161+
}
162+
};
163+
super.attachBaseContext(wrappedContext);
164+
} else {
165+
super.attachBaseContext(newBase);
166+
}
167+
}
168+
169+
protected boolean shouldSupportMultiLanguage() {
170+
return true;
171+
}
172+
146173
protected void setRightImg(int bg) {
147174
if (ivRight != null) {
148175
if (bg <= 0) {
@@ -170,13 +197,13 @@ protected void setLeftImg(int bg) {
170197
@Override
171198
public void initImmersionBar() {
172199
if (!fullScreen()) {
173-
ImmersionBar.with(this)
174-
.statusBarView(R.id.statusBarView)
175-
.statusBarDarkFont(true)
176-
.transparentBar()
177-
.keyboardEnable(true)
178-
.hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR)
179-
.init();
200+
ImmersionBar.with(this)
201+
.statusBarView(R.id.statusBarView)
202+
.statusBarDarkFont(true)
203+
.transparentBar()
204+
.keyboardEnable(true)
205+
.hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR)
206+
.init();
180207
} else {
181208
ImmersionBar.with(this)
182209
.fullScreen(true)
@@ -247,7 +274,6 @@ private boolean isShouldHideKeyboard(View v, MotionEvent event) {
247274
}
248275

249276

250-
251277
/**
252278
* 获取InputMethodManager,隐藏软键盘
253279
*

library-base/src/main/java/com/zlx/module_base/base_adapter/BaseRecycleAdapter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ public BaseRecycleAdapter(List<T> datas) {
3939
*/
4040
protected abstract int getLayoutId();
4141

42+
public List<T> getDatas() {
43+
return datas;
44+
}
45+
4246
@NonNull
4347
@Override
4448
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

library-base/src/main/java/com/zlx/module_base/base_manage/ActivityManage.java renamed to library-base/src/main/java/com/zlx/module_base/base_manage/ActivityUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Created by zlx on 2017/6/8.
1010
*/
1111

12-
public class ActivityManage {
12+
public class ActivityUtil {
1313
private static Stack<Activity> activityStack = new Stack<Activity>();
1414

1515
/**
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.zlx.module_base.base_util;
2+
3+
import android.annotation.SuppressLint;
4+
import android.annotation.TargetApi;
5+
import android.content.Context;
6+
import android.content.res.Configuration;
7+
import android.content.res.Resources;
8+
import android.os.Build;
9+
import android.os.LocaleList;
10+
import android.util.DisplayMetrics;
11+
12+
import com.zlx.library_common.provier.AppProvider;
13+
import com.zlx.module_base.database.MMkvHelper;
14+
15+
import java.util.Locale;
16+
17+
18+
public class LanguageUtil {
19+
20+
public static String getSystemLanguage() {
21+
String language = Locale.getDefault().getLanguage() + "-" + Locale.getDefault().getCountry();
22+
return language;
23+
}
24+
25+
public static Locale getCurrentLanguage() {
26+
Locale locale = MMkvHelper.getInstance().getLanguage();
27+
if (locale == null) {
28+
locale = Locale.getDefault();
29+
}
30+
return locale;
31+
}
32+
33+
public static void switchChinese() {
34+
changeLanguage(Locale.SIMPLIFIED_CHINESE);
35+
}
36+
37+
public static void switchEnglish() {
38+
changeLanguage(Locale.US);
39+
}
40+
41+
public static void switchLanguage(Locale locale) {
42+
changeLanguage(locale);
43+
}
44+
45+
private static void changeLanguage(Locale locale) {
46+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
47+
LanguageUtil.setConfiguration(AppProvider.getInstance().getApp(), locale);
48+
}
49+
MMkvHelper.getInstance().saveLanguage(locale);
50+
}
51+
52+
/**
53+
* @param context
54+
* @param locale 想要切换的语言类型 比如 "en" ,"zh"
55+
*/
56+
@SuppressLint("NewApi")
57+
public static void setConfiguration(Context context, Locale locale) {
58+
if (locale == null) {
59+
return;
60+
}
61+
//获取应用程序的所有资源对象
62+
Resources resources = context.getResources();
63+
//获取设置对象
64+
Configuration configuration = resources.getConfiguration();
65+
//如果API < 17
66+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
67+
configuration.locale = locale;
68+
} else //如果 17 < = API < 25 Android 7.7.1
69+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
70+
configuration.setLocale(locale);
71+
} else {//API 25 Android 7.7.1
72+
configuration.setLocale(locale);
73+
configuration.setLocales(new LocaleList(locale));
74+
}
75+
DisplayMetrics dm = resources.getDisplayMetrics();
76+
resources.updateConfiguration(configuration, dm);
77+
}
78+
79+
80+
public static Context attachBaseContext(Context context) {
81+
Locale locale = LanguageUtil.getCurrentLanguage();
82+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
83+
return updateResources(context, locale);
84+
} else {
85+
return context;
86+
}
87+
}
88+
89+
@TargetApi(Build.VERSION_CODES.N)
90+
private static Context updateResources(Context context, Locale locale) {
91+
Resources resources = context.getResources();
92+
Configuration configuration = resources.getConfiguration();
93+
configuration.setLocale(locale);
94+
configuration.setLocales(new LocaleList(locale));
95+
return context.createConfigurationContext(configuration);
96+
}
97+
}

library-base/src/main/java/com/zlx/module_base/constant/C.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ public class C {
2929
public static final String SOURCE_URL = "https://github.com/1170762202/WanAndroid";
3030

3131
public static final long DURATION = 1500;
32+
public static final String LANGUAGE = "LANGUAGE";
3233
}

library-base/src/main/java/com/zlx/module_base/database/MMkvHelper.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.zlx.module_base.database;
22

3+
import android.text.TextUtils;
4+
5+
import com.alibaba.fastjson.JSON;
36
import com.google.gson.Gson;
47
import com.google.gson.JsonArray;
58
import com.google.gson.JsonElement;
@@ -11,6 +14,7 @@
1114

1215
import java.util.ArrayList;
1316
import java.util.List;
17+
import java.util.Locale;
1418

1519
/**
1620
* FileName: MMkvHelper
@@ -47,6 +51,23 @@ public UserInfo getUserInfo() {
4751
return mmkv.decodeParcelable(C.USER_INFO, UserInfo.class);
4852
}
4953

54+
public void saveLanguage(Locale locale) {
55+
mmkv.encode(C.LANGUAGE, JSON.toJSONString(locale));
56+
}
57+
58+
public Locale getLanguage() {
59+
String s = mmkv.decodeString(C.LANGUAGE);
60+
if (TextUtils.isEmpty(s)){
61+
return null;
62+
}
63+
try {
64+
Locale locale = JSON.parseObject(s, Locale.class);
65+
return locale;
66+
}catch (Exception e){
67+
e.printStackTrace();
68+
return null;
69+
}
70+
}
5071

5172
public <T> void saveProjectTabs(List<T> dataList) {
5273
saveList(C.PROJECT_TABS, dataList);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<resources>
2+
<string name="app_name">library-widget</string>
3+
<string name="tab1">Home</string>
4+
<string name="tab2">Project</string>
5+
<string name="tab5">Me</string>
6+
<string name="tab4">Public</string>
7+
<string name="tab3">Square</string>
8+
9+
<string name="tag_key_translation_z">translation_z</string>
10+
</resources>

library-widget/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<resources>
2-
<string name="app_name">Bubble Navigation</string>
2+
<string name="app_name">library-widget</string>
3+
34
<string name="tab1">首页</string>
45
<string name="tab2">项目</string>
56
<string name="tab5">我的</string>

module-home/src/main/java/com/zlx/module_home/activity/SearchAc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public void onHot(String title) {
113113
public void onSuccess(ApiResponse<List<SearchBeanRes>> data) {
114114
List<SearchBean> list = new ArrayList<>();
115115
SearchBean searchBean = new SearchBean();
116-
searchBean.setTitle("热门搜索");
116+
searchBean.setTitle(getString(R.string.hot_search));
117117
searchBean.setData(data.getData());
118118
list.add(searchBean);
119119
adapterSearchHot.refresh(list);

module-home/src/main/res/layout/ac1.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
android:layout_marginRight="10dp"
6767
android:background="@null"
6868
android:gravity="center_vertical"
69-
android:hint="请输入关键字进行搜索"
69+
android:hint="@string/home_search_keyword_hint"
7070
android:imeOptions="actionSearch"
7171
android:inputType="text"
7272
android:maxLines="1"

module-home/src/main/res/layout/ac_search.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
android:drawablePadding="6dp"
3737

3838
android:gravity="center_vertical"
39-
android:hint="请输入关键字进行搜索"
39+
android:hint="@string/home_search_keyword_hint"
4040
android:imeOptions="actionSearch"
4141
android:inputType="text"
4242
android:maxLines="1"

module-home/src/main/res/layout/ac_search_result.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
android:focusable="true"
2929
android:focusableInTouchMode="true"
3030
android:gravity="center_vertical"
31-
android:hint="请输入关键字进行搜索"
31+
android:hint="@string/home_search_keyword_hint"
3232
android:imeOptions="actionSearch"
3333
android:inputType="text"
3434
android:maxLines="1"
@@ -43,7 +43,7 @@
4343
android:background="@drawable/ripple_bg"
4444
android:gravity="center"
4545
android:padding="10dp"
46-
android:text="取消"
46+
android:text="@string/home_cancel"
4747
android:textColor="#333333" />
4848
</LinearLayout>
4949

0 commit comments

Comments
 (0)