2011-12-09 25 views
11

Tôi đang biên soạn mã nguồn Android sử dụng sau tập Android.mk:Cách giải quyết Lỗi: Thuộc tính này phải được bản địa hóa. (Tại 'text' với giá trị 'TOP_LEFT')

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE_TAGS := optional 

LOCAL_STATIC_JAVA_LIBRARIES := libarity 

LOCAL_SRC_FILES := $(call all-java-files-under, src) 

LOCAL_PACKAGE_NAME := TouchPanelTest 

include $(BUILD_PACKAGE) 
################################################## 
include $(CLEAR_VARS) 


# Use the folloing include to make our test apk. 
include $(call all-makefiles-under,$(LOCAL_PATH)) 

nhưng nó sẽ cho lỗi:

main.xml:19: error: Error: This attribute must be localized. (at 'text' with value 'TOP_LEFT').

mail.xml là như sau:

<RelativeLayout 
    android:id="@+id/top_left" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TOP_LEFT" /> 
</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/top_right" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TOP_RIGHT" /> 
</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/bottom_left" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BOTTOM_LEFT" /> 
</RelativeLayout> 

Trả lời

8

Phương pháp hay nhất cho ứng dụng Android là xác định tất cả nội dung không động trong tệp tài nguyên. Điều này cho phép bạn xác định các tệp tài nguyên khác nhau cho các ngôn ngữ khác nhau, ví dụ. Thông thường, đây chỉ là một đề xuất và Android SDK không phàn nàn nếu bạn mã hóa các giá trị trong xml bố cục của mình. Tuy nhiên, hệ thống xây dựng Android nguồn yêu cầu tất cả các chuỗi phải được xác định trong tài nguyên "giá trị". Điều này có thể được dự định để bảo vệ các nhà xây dựng hệ thống khỏi vô tình để lại nội dung trong một hình ảnh hệ thống không hiển thị bằng ngôn ngữ mà người dùng đã chọn.

Điều bạn cần làm là di chuyển các giá trị chuỗi đó ra khỏi bố cục và xác định chúng trong res/values/ thay thế. Vị trí thông thường cho các giá trị chuỗi là trong res/values/strings.xml, nhưng tệp thực tế có thể được đặt tên bất cứ điều gì bạn thích miễn là nó nằm trong thư mục đó.

Ví dụ, trong res/values ​​/ string.xml:

<string name="topLeftContent">TOP_LEFT</string> 

Và trong main.xml bố trí của bạn, hãy tham khảo các nội dung theo tên:

android:text="@string/topLeftContent" 

Để biết thêm chi tiết về làm thế nào và tại sao điều này, xem tài liệu của Google trên Localization in Android.

+0

Vâng, đây là lỗi rất tinh tế để bắt. Nếu không có gradle, chúng tôi sẽ xử lý các lỗi này. –

14

Bạn có thể sử dụng

LOCAL_MODULE_TAGS := tests 

trong Android.mk để bỏ qua việc kiểm tra nội địa hóa.

Một cách khác là tắt tính năng kiểm tra bản địa hóa trong hệ thống xây dựng. Nhận xét dòng 81 trong build/core/package.mk

#LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z 
+0

** package.mk ** trông như thế nào? –

Các vấn đề liên quan