object: To obtain an internship in the software development industry utilizing my software analysis, problem solving, and programming skills.
Education: Computer Science: Degree Expected: May 2018, Kean University, GPA: 2.5
• Assists the technical engineer in setting and working the sound system and the recording system around the church.
• Helps manage the recording of live shows every week.
• Valet parking of cars that need service
• Studies and analyses the software used by the automotive technicians.
• Shadows the automotive technicians while servicing the cars.
• Excellent skills in Microsoft- Word, Excel, PowerPoint.
• Experienced in Java programming language, Object Oriented Programming, SQL Database.
• Familiar with Linux/Unix based environments.
• • Familiar with HTML and CSS, Adobe Photoshop, Adobe Illustrator.
• Fluent in Arabic.
• Excellent communication skills and leadership skills.
• Certified Gym trainer.
• Developed a SQL database based system that allows users to search the Amazon site for products to be stored and added to the database.
• The system allocates for two types of users (vendors and customers) and different functions for different users.
• Items can also be edited or deleted from the database.
• Developed an ATM concept system using java and object oriented programming.
• The system can display balance, allow for withdraws and deposits by the user.
• Developed a program that predicts the outcomes of the temperature of different days of the year depending on the seasons and metrology equations.
• The program was developed using java and object oriented programming.


Basic information
Block number
{{ block.blockNumber }}
Hash
{{ block.hash }}
Previous block number
Hash
{{ block.previousBlockHash }}
Time created
{{ block.timestamp + 'Z' | date: 'd MMMM - hh:mm' }}
Timestamp
{{ block.timestamp + 'Z' | timeago: true }}
| Proposer address | {{ block.validatorAddress }} |
| TX set root | {{ block.txSetRoot }} |
| TX result root | {{ block.txResultSetRoot }} |
| Equivocation proofs root | {{ block.equivocationProofsRoot }} |
| Equivocation proof result root | {{ block.equivocationProofResultsRoot }} |
| State root | {{ block.stateRoot }} |
| Staking rewards root | {{ block.stakingRewardsRoot }} |
| Configuration root | {{ block.configurationRoot }} |
| Configuration block number | {{ block.configurationBlockNumber }} |
| Consensus round | {{ block.consensusRound }} |


One of the more subtle differences between Ruby and JavaScript is the differences between how they both implement objects. In Ruby we've gotten used to using classes to create blueprints for objects and give those objects variables and methods. JavaScript has constructors and prototypes to fill a similar role, that of automating the construction of objects, but the way JavaScript implements them is pretty different from how Ruby implements its classes.
In Ruby, everything is an object, even classes; as you might expect ruby gives them the type of class. If you goto the ruby docs for class you can see that it has a small number of methods, and a parent class, module, which has a lot of methods that classes inherit. Some of these, like the attr_accessor methods, we've been using a lot, but there are a lot that you probably haven't seen before. These methods provide a framework to manipulate your class definitions like they were objects, because remember, they are objects. For instance, the #instance_methods method will return all the methods contained by the receiver. This also extends to any objects created by the class.new
method since the parent class of those objects would be class.
JavaScript, on the other hand, doesn't provide a framework around its constructors. This means that when you create a new object using a constructor it will only have the values and methods that you put into the constructor, unlike Ruby they don't have a “constructor” class to inherit from. This also means that you don't have a method to return all the methods of your object, you would have to iterate through the object's properties and look for the ones that have a function as their value. This ultimately means that JavaScript doesn't encapsulate things like Ruby does. Ruby builds a shell around objects and lets you use getter and setter functions to interact with them while JavaScript exposes methods and properties to be used directly.


{% extends 'accounts/main.html' %} {% block content %}
Forgotten your password? Enter your email address below, and we’ll email instructions for setting a new one.


PC Deal Finder
Find a part scraped from several sites.
Manufacturers are also valid input!
No search results found!


NSS stands for National Service Scheme. NSS IIT Patna is an organisation that
organises various socially productive events that are concerned with meeting the
growing needs of the environment, the people (especially children)
and all those who form a part of our spaces, the centre of activity being Amhara
village. We serve the people of some selected villages near our campus including
Amhara village, Raghavpur village and a few more. NSS
IITP has emerged as one of the largest and most well-developed bodies that aims to
create a sense of "Simplicity of Life and Dignity of Labour".
NSS IIT Patna mainly comprises of the student body, including mentors. All the
activities are conducted by the student body. The NSS unit of IITP consists of
different cells whose volunteers execute various functions. The
main cells are Teaching, Technical Skills, Rural Development, Environment and
Chetna. The Teaching Group conducts regular classes and weekly tests for the
children of Amhara village. The Technical Skills Group is responsible
for upgrading the children’s knowledge about computers and improving their fluency
in English so that they remain at par with the fast progressing world. The
Environment Group conducts activities like plantation drives,
cleanliness drives, etc. The Rural Development Group is concerned with the progress
of the youth of the villages by making them aware of the varied job opportunities
available. It also spreads information regarding
various government organisations, schemes and policies. The Chetna Group organises
multiple events and drives, blood donation camps and social awareness programs.
Apart from these the NSS wing of IIT Patna also conducts
various other activities both inside and outside the campus.
Special activities are organised on national holidays and on the birth anniversaries
of our national leaders. This not only spreads information but also motivates others
to contribute their bits and parts in making the
society a better place to live in. Various competitions and events are organised for
children of all age groups in Amhara village to discover the hidden talents in them.
Since NSS IITP has come into existence, it has
been setting various goals and has also been accomplishing them. The teams of NSS
IITP are working in coordination with each other and striving to make the future of
the children brighter, empower the women to be self-dependent
and make the villages just as the Father of our Nation had wanted them to be. Every
NSS volunteers are compiled to complete 80 hours of their service to pass the
course. In the future, we are also planning to extend
our scope and include a few more villages.


The example fig:example:loop:with:static:condition can be simply converted as shown in fig:example:unrolled:loop:with:static:condition, which contains sequential statements.
Typically there are also loops which are bounded by run-time conditions, for example in fig:example:loop:with:dynamic:condition.
The C code in fig:example:loop:with:dynamic:condition contains a while loop which terminates when array_b encounters an end of string character () in its index. The static analysis may not provide any information about the contents of arry_b and it is impossible to know the number of iteration loop will run during execution. Most of the tools use bounded loop unrolling, i.e. if the exit condition for a loop cannot be determined statically, loops are unrolled a maximum of N number of times. Number N can be adjusted according to application. For instance above loop in fig:example:loop:with:dynamic:condition, with N set to 5, can be transformed as shown in fig:example:unrolled:loop:with:dynamic:condition.
Assert statement, at last, can be used to check if unrolling was not enough.
ash 2012-09-13


#assign n0_docs="active"> <#assign n1_kotlin="active">
Ebean does not require a default constructor. We should use constructors to supply the required / non-nullable properties when creating entity bean instances.
For example, if a Customer entity bean requires a name property we can have that in the constructor and use a Kotlin non-nullable type.
... @Entity class Customer(name : String) : BaseModel() { @Length(100) var name: String = name // Kotlin non-nullable type }
The suggested constructor style to use with Kotlin is like the above with
the constructor parameter assigned to the property. The reason for this is that
with entity bean properties we often have mapping annotations (@Length
etc)
and it can be easier / clearer to not have those as part of the constructor (where there
are more targets for the annotations - method, field, parameter etc).
Ebean is aware of Kotlin non nullable types and automatically treats them
as @NotNull
. We don't need to specify @NotNull
or @Column(nullable=false)
or @ManyToOne(optional=false)
when the property is a Kotlin non nullable type.
It is common to have a mapped superclass that extends io.ebean.Model
and has @WhenCreated
and @WhenModified
like below:
@MappedSuperclass abstract class BaseModel : Model() { @Id var id: Long = 0 @Version var version: Long = 0 @WhenCreated lateinit var whenCreated: Instant @WhenModified lateinit var whenModified: Instant }
It is ok to use lateinit
for the whenCreated and whenModified properties and
have them as nullable types.
It is good to use non nullable Int = 0
and Long = 0
for
@Id
properties like the example above (JVM primitive int and long).
For collection types @OneToMany
and @ManyToMany
it is good
to use non nullable mutable lists and initialise then with mutableListOf()
.
Ebean enhancement will optimise this and collection types will only be initialised
when needed (so it's good to model it as a Kotlin non nullable collection type).
@Entity @Table(name = "orders") class Order(customer: Customer) : BaseModel() { ... @OneToMany(mappedBy = "order", cascade = [CascadeType.PERSIST]) var details: MutableList<|OrderDetail> = mutableListOf() }


vignettes/preprocessing.Rmd
preprocessing.Rmd
The eidith package downloads data from the EIDITH database to a local database stored on your machine. Default calls to the ed_get()
or ed_db_download()
will automatically process the data in several ways after it is downloaded to your local database.
Importantly, the R package does not change any data in the main EIDITH database, it only processes the downloaded data in your local database.
The main automatic processing steps are:
camelCase
to snake_case
to make it easy to distinguish between raw and cleaned data._id
variables are numeric primary keys, other identifiers now go by _id_name
._id_name
-type columns that are very similar except for a small set of cases, we drop all but one for ease of use. These can be retrieved from raw data if needed.specimen_type
) to a standard set of categoriesFor column name details, including descriptions of fields (when available), the command ?ed_metadata
will open a datatable that contains details about how each field name was processed, renamed, or dropped.
The eidith R package automatic processing steps do not permanently alter or delete any upstream data.
If you want to access raw EIDITH data from the web API directly (for instance, if you want to compare differences between raw data and the automatically-cleaned version ed_db_download()
creates), you can use the ed_get()
functions, such as get_ed_events()
, with the postprocess = FALSE
option:
For events:
ed_get_events(postprocess=FALSE)
For animals:
ed_get_animals(postprocess=FALSE)
And so on. These raw data tables can be saved in your R environment and can be compared to the eidith R package tables – simply use ed_metadata()
to load the metadata table, or from within RStudio use ?ed_metadata
to open a searchable datatable.


[§353C-1] Definitions. Whenever used in this chapter, unless the context otherwise requires:
"Department" means the department of public safety.
"Director" means the director of public safety. [L 1989, c 211, pt of §6]


Mom, son who died in pond had been returning from therapy
ROXANA, Ill. (AP) - Relatives say a mother and her 7-year-old son had been returning from an autism therapy session when their minivan ended up in a suburban St. Louis retention pond.
The St. Louis Post-Dispatch reports that autopsies completed Thursday indicated that 34-year-old Ashly Maynard, and her son, Vincent Maynard, drowned. But a final cause of death won’t be decided until toxicology tests are completed.
The bodies were found early Wednesday after a motorist spotted headlights in the water near Roxana, Illinois.
The boy’s paternal grandmother, Mary Maynard of East Alton, described her nonverbal grandson as a “gift from God” and his mother as a forward-thinker.
Madison County Sheriff John Lakin has said that although there were no skid marks at the scene, there is no indication so far that what happened was intentional.
Information from: St. Louis Post-Dispatch, http://www.stltoday.com
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


{% load static %}
The complete Hello Web Books package! Includes all files and videos for Hello Web Design to teach you web design fundamentals, as well as the complete Hello Web App set to walk you through building a web app with Django.
Package contains:
Learn better with a physical book? I got you! This package contains the three eBooks (in all three formats) plus the paperback books. Shipping extra.
Not for sale at the moment. Feel free to email if you really want a physical book.
The digital books, lovingly designed by Tracy herself. Each book comes in PDF, .mobi, and .ePub formats.


An aspiring Front-End Developer studying Computer Science at the University of Texas at Austin. Started diving in the ocean of FreeCodeCamp in late May of 2017 and determined to go in depth.
Web Developer
Junior at the UT Austin
Web Developer - Junior at the UT Austin


by Lars Lindahl (c) 2000 Lars Lindahl
Lars Attacks! http://www.angelfire.com/ny3/larsattacks
"Bowfinger" (1999)
Directed by Frank Oz Written by Steve Martin
Starring Steve Martin, Eddie Murphy, Heather Graham, Christine Baranski, Jamie Kennedy, Robert Downey Jr., and Terrence Stamp.
Grade: *** (out of four)
The last Steve Martin film I saw, The Spanish Prisoner, was a very different approach for the comic actor. As a millionaire leading a massive conspiracy in order to rob "a process" from a clueless businessman, Martin's character did it all for money. In his most recent movie, Bowfinger, Martin plays yet another con man except this time he does it to succeed in the film industry. He wants to direct a successful picture that will force people to remember his name, that will make him more popular at the parties, and, most importantly, that will cause Fed Ex to deliver important business packages to his front door. Playing the title role, Martin is once again the good guy; the one we cheer for to complete his low budget action movie. This con man is very likeable for some reason, even though he is doing the same exact thing as the malicious Jimmy Del from The Spanish Prisoner. Maybe the message is that, in Hollywood, to win over the trust and friendship of others, you have to be a little evil.
Bowfinger is a very clever comedy with great performances from its two stars. Martin, who also wrote the screenplay, is perfect as a jerk with a conscience and Eddie Murphy does his best "Peter Sellers" in two different, but equally hilarious, roles; one as a big time move star and the other as his nerdy, Burger King employee brother. The story follows aging and failing director/producer Bobby Bowfinger as he makes one last attempt to become a respected member of his field by creating a B-action movie called Chubby Rain. In order to attract actors and crew members, Bowfinger promises them that hot shot actor Kit Ramsey will star in the movie. The only problem is that Kit refuses to be in it. But this won't stop the aggressive Bowfinger. He is so determined to complete his film that he decides to put Kit in it without even telling him. He has his actors approach Kit on the streets of Los Angeles in character with a hidden camera filming the footage. Will Bowfinger be able to make his film? Or will Kit Ramsey discover what exactly is going on?
Bowfinger is a very cartoon-like movie that pokes fun at Hollywood and its famous residents while simultaneously holding a very solid story line. The only area where the film really lacks is the cameo department. This is the kind of movie that cameos are all about, it is always funny to see actors/directors/producers making fun of themselves or co-workers especially in a playful movie such as this. Besides the very repetitive and superflous ending, Bowfinger is a joy to watch. If you take a movie like this seriously then you will never enjoy it. If you accept the incredulous plot and the extreme caricatures of real entertainment figures, the movie is great fun.
Grade: *** (out of four)
Lars Attacks! http://www.angelfire.com/ny3/larsattacks
by Lars Lindahl (c) 2000 Lars Lindahl
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Default functionality
Custom style with arrow
Forms with tooltips
Track the mouse
Custom animation
Custom content
Video Player


Don't miss your launch date, buy services you don't need, or overpay for IT services. RampRate helps you align your needs with the right providers, and then negotiate the best possible price and terms.
How can we do accomplish this for you? By applying our SPY Index to your business requirements, RampRate's advisory specialists reduce cost, risk, and time from your buying process so you can get back to your core business issues.


Pablito Planeta
Hola🔮
Pablito Planeta, your Design Astrologist, is here to tell you about your future !
Pablito Planeta, your Design Astrologist, is here to tell you about your future !


Castronaut tester page
Start/Stop Cast session by launching/stopping app
Launch app
Stop app
Click on thumbnails to cast
Media Control
Play
Stop
Mute
Volume
State :
IDLE


ArcelorMittal willing to re-commit to Ilva steel plant on three conditions: paper
ArcelorMittal is drafting a plan to re-commit to the 2018 deal, under which it bought the troubled Ilva steel plant in southern Italy, on three conditions, Il Messaggero daily reported on Monday.
ROME: ArcelorMittal is drafting a plan to re-commit to the 2018 deal, under which it bought the troubled Ilva steel plant in southern Italy, on three conditions, Il Messaggero daily reported on Monday.
After withdrawing from the contract, the world's biggest steel maker is drafting a proposal for Italy's government in which it will demand the reintroduction of legal immunity, the possibility to revise its industrial plan and the layoff of 5,000 workers.
Italian Prime Minister Giuseppe Conte has postponed a meeting with ArcelorMittal's Lakshmi Mittal, due this week, hoping that a Milan court will already decide on an appeal filed by Rome last Friday, Il Messaggero said.
The report added that economy minister Roberto Gualtieri is examining the potential entrance of state lender Cassa Depositi e Prestiti in the shareholding of the Franco-Indian company that manages Ilva.
(Reporting by Giulia Segreti; editing by Uttaresh.V)


Tugas Pokok dan Fungsi
Sekretariat
Lorem Ipsum Is Simply
NIP.<PHONE_NUMBER>011190
Tugas Pokok:
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
Fungsi:
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
Membawahi 3 (tiga) Sub Bagian:


Gateway
BOT
26-Jun-18 09:32 AM
[telegram] <Starfungus> admin
[telegram] <Starfungus> i can't change the socket timeout
[telegram] <Starfungus> its not allowing me to change any number in the socket timeout
[telegram] <Acura360> Did you get an error or how you see / know it ? (re @Starfungus: its not allowing me to change any number in the socket timeout)
[telegram] <Starfungus> first of all i'm running lite mode
[telegram] <Starfungus> then my wallet is not connecting
[telegram] <Starfungus> i try to change from the app config the socket timeout but its not allwaying me to change any number
[telegram] <Starfungus> is locked
[telegram] <Acura360> Strange
[telegram] <Starfungus> if is an error the team is working on
[telegram] <Starfungus> its ok... but just need to know when the new version will be relise :)
[telegram] <Starfungus> and if my wallet is still "safe"
[telegram] <Acura360> Maybe the config file is in read only on your drive ? (re @Starfungus: i try to change from the app config the socket timeout but its not allwaying me to change any number)
[telegram] <Acura360> On Barterdex it seems to work
[telegram] <Starfungus> so, admin ? :D any updates comming up with agama wallet?
[telegram] <icantgiveyou> agama wallet its being updated like all the time, i update and couple of weeks later there is 5 new updates, but they all secure, dont worry, u dont have to have the latest verison to be safe. (re @Starfungus: so, admin ? :D any updates comming up with agama wallet?)
[telegram] <Starfungus> ok i will try to login in a couple of weeks :)
[telegram] <Starfungus> everything goes ok :D
[telegram] <Starfungus> if i have my passphrase i should be ok for the future upgrades :)
[telegram] <Starfungus> hoping so :D
[telegram] <icantgiveyou> yeah dont worry,this project has best devs and support u can get anywhere
[telegram] <Starfungus> ^^
[telegram] <Starfungus> lets hope the market will recover soon :)


Previous: Transfer of Control during a Destructive Operation, Up: Transfer of Control during a Destructive Operation
The following examples illustrate some of the many ways in which the implementation-dependent nature of the modification can manifest itself.
(let ((a (list 2 1 4 3 7 6 'five))) (ignore-errors (sort a #'<)) a) ⇒ (1 2 3 4 6 7 FIVE) OR⇒ (2 1 4 3 7 6 FIVE) OR⇒ (2) (prog foo ((a (list 1 2 3 4 5 6 7 8 9 10))) (sort a #'(lambda (x y) (if (zerop (random 5)) (return-from foo a) (> x y))))) ⇒ (1 2 3 4 5 6 7 8 9 10) OR⇒ (3 4 5 6 2 7 8 9 10 1) OR⇒ (1 2 4 3)


You are logged in as {{ profile?.nickname }}
Last updated: {{ profile?.updated_at }}
Name: {{ profile?.name }}
Connected accounts:
{{ profile | json }}
No profiles are saved on this device. You can connect multiple profiles by logging in using different authentication providers.


The Apache Geode HTTP Session Management modules provide fast, scalable, and reliable session replication for HTTP servers without requiring application changes.
Apache Geode offers HTTP session management modules for tc Server, Tomcat, and AppServers.
These modules are included with the Apache Geode product distribution, and installation .zip files can be found in the tools/Modules
directory of your product installation.
HTTP Session Management Quick Start
In this section you download, install, and set up the HTTP Session Management modules.
Advantages of Using Geode for Session Management
The HTTP Session Management Module enables you to customize how you manage your session data.
Common Topologies for HTTP Session Management
Decide which topology is best for your usage. The module configuration process is slightly different for each topology.
General Information on HTTP Session Management
This section provides information on sticky load balancers, session expiration, additional Geode property changes, serialization and more.
-
Several log files are written by the various parts of the session management code.
HTTP Session Management Module for Pivotal tc Server
This section describes how to set up and use the HTTP session management module with tc Server templates.
HTTP Session Management Module for Tomcat
You set up and use the module by modifying the Tomcat’s
server.xml
andcontext.xml
files.HTTP Session Management Module for AppServers
You implement session caching with the HTTP Session Management Module for AppServers with a special filter, defined in the
web.xml
, which is configured to intercept and wrap all requests.


{{> head}}
{{> header}}
Thank you for logging in!
Blot can now properly sync your posts again.
Go to the dashboard
{{> footer}}


The Coptic Monk
A very important but short piece in the writing. Santiago and the alchemist stop at the monastery, and the monk invites them in. This is considered a very important point in the plot, as this is where the alchemist produces gold from a pan of lead (which the monk provides), separates the disk into four parts, gives one to the monk, one to himself, and essentially two to Santiago. The monk tries to refuse the offering, but the alchemist tells him that “life may be listening, and give [you] less the next time”. Afterward, when Santiago crawls back beaten and elated from the Pyramids, the monk gives him the other part of the gold disk and helps him recover.


{% extends "theme_bootstrap/base.html" %} {% comment %} This file is here for backwards compatibility. Please update your templates to extend the theme_bootstrap/base.html file instead. {% endcomment %}


Class Permission
- java.lang.Object
-
- com.ensoftcorp.open.android.essentials.permissions.Permission
-
public class Permission extends java.lang.Object
An convenience object that encodes Android Permission property values- Author:
- Ben Holland, Vani Bojja
-
-
Field Summary
-
Method Summary
Modifier and Type Method Description int
addedInAPILevel()
Returns the API version the permission was added inboolean
equals(java.lang.Object obj)
static java.util.Collection<Permission>
getAllDocumentedPermissions()
Returns a collection of all known documented permissionsstatic java.util.Collection<Permission>
getAllPermissions()
Returns a collection of all known permissions (the union of all known documented and undocumented permissions)static java.util.Collection<Permission>
getAllUndocumentedPermissions()
Returns a collection of all known undocumented permissionsint
getDeprecatedInAPILevel()
Returns the API level this permission was deprecated in or -1 if not deprecatedjava.lang.String
getDescription()
Returns a description of the permissionstatic Permission
getPermissionByQualifiedName(java.lang.String qualifiedName)
Returns the permission object matching the qualified permission name or null if the permission is not found in the known permissions liststatic Permission
getPermissionBySimpleName(java.lang.String simpleName)
Returns the permission object matching the simple permission name or null if the permission is not found in the known permissions listjava.lang.String
getQualifiedName()
Returns the qualified permission namejava.lang.String
getReference()
Returns the reference information for the source of this permission or an empty string if there is no available referencejava.lang.String
getSimpleName()
Returns an unqualified permission nameint
hashCode()
boolean
isDeprecated()
Returns true if the permission has been deprecated in the latest API versionjava.lang.String
toString()
-
-
-
Field Detail
-
REFERENCE_SOURCES
public static java.lang.String[] REFERENCE_SOURCES
-
REFERENCE_DATE
public static java.util.Date REFERENCE_DATE
-
ACCESS_CHECKIN_PROPERTIES
public static final Permission ACCESS_CHECKIN_PROPERTIES
-
ACCESS_COARSE_LOCATION
public static final Permission ACCESS_COARSE_LOCATION
-
ACCESS_FINE_LOCATION
public static final Permission ACCESS_FINE_LOCATION
-
ACCESS_LOCATION_EXTRA_COMMANDS
public static final Permission ACCESS_LOCATION_EXTRA_COMMANDS
-
ACCESS_MOCK_LOCATION
public static final Permission ACCESS_MOCK_LOCATION
-
ACCESS_NETWORK_STATE
public static final Permission ACCESS_NETWORK_STATE
-
ACCESS_SURFACE_FLINGER
public static final Permission ACCESS_SURFACE_FLINGER
-
ACCESS_WIFI_STATE
public static final Permission ACCESS_WIFI_STATE
-
ACCOUNT_MANAGER
public static final Permission ACCOUNT_MANAGER
-
ADD_VOICEMAIL
public static final Permission ADD_VOICEMAIL
-
AUTHENTICATE_ACCOUNTS
public static final Permission AUTHENTICATE_ACCOUNTS
-
BATTERY_STATS
public static final Permission BATTERY_STATS
-
BIND_ACCESSIBILITY_SERVICE
public static final Permission BIND_ACCESSIBILITY_SERVICE
-
BIND_APPWIDGET
public static final Permission BIND_APPWIDGET
-
BIND_DEVICE_ADMIN
public static final Permission BIND_DEVICE_ADMIN
-
BIND_DREAM_SERVICE
public static final Permission BIND_DREAM_SERVICE
-
BIND_INPUT_METHOD
public static final Permission BIND_INPUT_METHOD
-
BIND_NFC_SERVICE
public static final Permission BIND_NFC_SERVICE
-
BIND_NOTIFICATION_LISTENER_SERVICE
public static final Permission BIND_NOTIFICATION_LISTENER_SERVICE
-
BIND_PRINT_SERVICE
public static final Permission BIND_PRINT_SERVICE
-
BIND_REMOTEVIEWS
public static final Permission BIND_REMOTEVIEWS
-
BIND_TEXT_SERVICE
public static final Permission BIND_TEXT_SERVICE
-
BIND_TV_INPUT
public static final Permission BIND_TV_INPUT
-
BIND_VOICE_INTERACTION
public static final Permission BIND_VOICE_INTERACTION
-
BIND_VPN_SERVICE
public static final Permission BIND_VPN_SERVICE
-
BIND_WALLPAPER
public static final Permission BIND_WALLPAPER
-
BLUETOOTH
public static final Permission BLUETOOTH
-
BLUETOOTH_ADMIN
public static final Permission BLUETOOTH_ADMIN
-
BLUETOOTH_PRIVILEGED
public static final Permission BLUETOOTH_PRIVILEGED
-
BODY_SENSORS
public static final Permission BODY_SENSORS
-
BRICK
public static final Permission BRICK
-
BROADCAST_PACKAGE_REMOVED
public static final Permission BROADCAST_PACKAGE_REMOVED
-
BROADCAST_SMS
public static final Permission BROADCAST_SMS
-
BROADCAST_STICKY
public static final Permission BROADCAST_STICKY
-
BROADCAST_WAP_PUSH
public static final Permission BROADCAST_WAP_PUSH
-
CALL_PHONE
public static final Permission CALL_PHONE
-
CALL_PRIVILEGED
public static final Permission CALL_PRIVILEGED
-
CAMERA
public static final Permission CAMERA
-
CAPTURE_AUDIO_OUTPUT
public static final Permission CAPTURE_AUDIO_OUTPUT
-
CAPTURE_SECURE_VIDEO_OUTPUT
public static final Permission CAPTURE_SECURE_VIDEO_OUTPUT
-
CAPTURE_VIDEO_OUTPUT
public static final Permission CAPTURE_VIDEO_OUTPUT
-
CHANGE_COMPONENT_ENABLED_STATE
public static final Permission CHANGE_COMPONENT_ENABLED_STATE
-
CHANGE_CONFIGURATION
public static final Permission CHANGE_CONFIGURATION
-
CHANGE_NETWORK_STATE
public static final Permission CHANGE_NETWORK_STATE
-
CHANGE_WIFI_MULTICAST_STATE
public static final Permission CHANGE_WIFI_MULTICAST_STATE
-
CHANGE_WIFI_STATE
public static final Permission CHANGE_WIFI_STATE
-
CLEAR_APP_CACHE
public static final Permission CLEAR_APP_CACHE
-
CLEAR_APP_USER_DATA
public static final Permission CLEAR_APP_USER_DATA
-
CONTROL_LOCATION_UPDATES
public static final Permission CONTROL_LOCATION_UPDATES
-
DELETE_CACHE_FILES
public static final Permission DELETE_CACHE_FILES
-
DELETE_PACKAGES
public static final Permission DELETE_PACKAGES
-
DEVICE_POWER
public static final Permission DEVICE_POWER
-
DIAGNOSTIC
public static final Permission DIAGNOSTIC
-
DISABLE_KEYGUARD
public static final Permission DISABLE_KEYGUARD
-
DUMP
public static final Permission DUMP
-
EXPAND_STATUS_BAR
public static final Permission EXPAND_STATUS_BAR
-
FACTORY_TEST
public static final Permission FACTORY_TEST
-
FLASHLIGHT
public static final Permission FLASHLIGHT
-
FORCE_BACK
public static final Permission FORCE_BACK
-
GET_ACCOUNTS
public static final Permission GET_ACCOUNTS
-
GET_PACKAGE_SIZE
public static final Permission GET_PACKAGE_SIZE
-
GET_TASKS
public static final Permission GET_TASKS
-
GET_TOP_ACTIVITY_INFO
public static final Permission GET_TOP_ACTIVITY_INFO
-
GLOBAL_SEARCH
public static final Permission GLOBAL_SEARCH
-
HARDWARE_TEST
public static final Permission HARDWARE_TEST
-
INJECT_EVENTS
public static final Permission INJECT_EVENTS
-
INSTALL_LOCATION_PROVIDER
public static final Permission INSTALL_LOCATION_PROVIDER
-
INSTALL_PACKAGES
public static final Permission INSTALL_PACKAGES
-
INSTALL_SHORTCUT
public static final Permission INSTALL_SHORTCUT
-
INTERNAL_SYSTEM_WINDOW
public static final Permission INTERNAL_SYSTEM_WINDOW
-
INTERNET
public static final Permission INTERNET
-
KILL_BACKGROUND_PROCESSES
public static final Permission KILL_BACKGROUND_PROCESSES
-
LOCATION_HARDWARE
public static final Permission LOCATION_HARDWARE
-
MANAGE_ACCOUNTS
public static final Permission MANAGE_ACCOUNTS
-
MANAGE_APP_TOKENS
public static final Permission MANAGE_APP_TOKENS
-
MANAGE_DOCUMENTS
public static final Permission MANAGE_DOCUMENTS
-
MASTER_CLEAR
public static final Permission MASTER_CLEAR
-
MEDIA_CONTENT_CONTROL
public static final Permission MEDIA_CONTENT_CONTROL
-
MODIFY_AUDIO_SETTINGS
public static final Permission MODIFY_AUDIO_SETTINGS
-
MODIFY_PHONE_STATE
public static final Permission MODIFY_PHONE_STATE
-
MOUNT_FORMAT_FILESYSTEMS
public static final Permission MOUNT_FORMAT_FILESYSTEMS
-
MOUNT_UNMOUNT_FILESYSTEMS
public static final Permission MOUNT_UNMOUNT_FILESYSTEMS
-
NFC
public static final Permission NFC
-
PERSISTENT_ACTIVITY
public static final Permission PERSISTENT_ACTIVITY
-
PROCESS_OUTGOING_CALLS
public static final Permission PROCESS_OUTGOING_CALLS
-
READ_CALENDAR
public static final Permission READ_CALENDAR
-
READ_CALL_LOG
public static final Permission READ_CALL_LOG
-
READ_CONTACTS
public static final Permission READ_CONTACTS
-
READ_EXTERNAL_STORAGE
public static final Permission READ_EXTERNAL_STORAGE
-
READ_FRAME_BUFFER
public static final Permission READ_FRAME_BUFFER
-
READ_HISTORY_BOOKMARKS
public static final Permission READ_HISTORY_BOOKMARKS
-
READ_INPUT_STATE
public static final Permission READ_INPUT_STATE
-
READ_LOGS
public static final Permission READ_LOGS
-
READ_PHONE_STATE
public static final Permission READ_PHONE_STATE
-
READ_PROFILE
public static final Permission READ_PROFILE
-
READ_SMS
public static final Permission READ_SMS
-
READ_SOCIAL_STREAM
public static final Permission READ_SOCIAL_STREAM
-
READ_SYNC_SETTINGS
public static final Permission READ_SYNC_SETTINGS
-
READ_SYNC_STATS
public static final Permission READ_SYNC_STATS
-
READ_USER_DICTIONARY
public static final Permission READ_USER_DICTIONARY
-
READ_VOICEMAIL
public static final Permission READ_VOICEMAIL
-
REBOOT
public static final Permission REBOOT
-
RECEIVE_BOOT_COMPLETED
public static final Permission RECEIVE_BOOT_COMPLETED
-
RECEIVE_MMS
public static final Permission RECEIVE_MMS
-
RECEIVE_SMS
public static final Permission RECEIVE_SMS
-
RECEIVE_WAP_PUSH
public static final Permission RECEIVE_WAP_PUSH
-
RECORD_AUDIO
public static final Permission RECORD_AUDIO
-
REORDER_TASKS
public static final Permission REORDER_TASKS
-
RESTART_PACKAGES
public static final Permission RESTART_PACKAGES
-
SEND_RESPOND_VIA_MESSAGE
public static final Permission SEND_RESPOND_VIA_MESSAGE
-
SEND_SMS
public static final Permission SEND_SMS
-
SET_ACTIVITY_WATCHER
public static final Permission SET_ACTIVITY_WATCHER
-
SET_ALARM
public static final Permission SET_ALARM
-
SET_ALWAYS_FINISH
public static final Permission SET_ALWAYS_FINISH
-
SET_ANIMATION_SCALE
public static final Permission SET_ANIMATION_SCALE
-
SET_DEBUG_APP
public static final Permission SET_DEBUG_APP
-
SET_ORIENTATION
public static final Permission SET_ORIENTATION
-
SET_POINTER_SPEED
public static final Permission SET_POINTER_SPEED
-
SET_PREFERRED_APPLICATIONS
public static final Permission SET_PREFERRED_APPLICATIONS
-
SET_PROCESS_LIMIT
public static final Permission SET_PROCESS_LIMIT
-
SET_TIME
public static final Permission SET_TIME
-
SET_TIME_ZONE
public static final Permission SET_TIME_ZONE
-
SET_WALLPAPER
public static final Permission SET_WALLPAPER
-
SET_WALLPAPER_HINTS
public static final Permission SET_WALLPAPER_HINTS
-
SIGNAL_PERSISTENT_PROCESSES
public static final Permission SIGNAL_PERSISTENT_PROCESSES
-
STATUS_BAR
public static final Permission STATUS_BAR
-
SUBSCRIBED_FEEDS_READ
public static final Permission SUBSCRIBED_FEEDS_READ
-
SUBSCRIBED_FEEDS_WRITE
public static final Permission SUBSCRIBED_FEEDS_WRITE
-
SYSTEM_ALERT_WINDOW
public static final Permission SYSTEM_ALERT_WINDOW
-
TRANSMIT_IR
public static final Permission TRANSMIT_IR
-
UNINSTALL_SHORTCUT
public static final Permission UNINSTALL_SHORTCUT
-
UPDATE_DEVICE_STATS
public static final Permission UPDATE_DEVICE_STATS
-
USE_CREDENTIALS
public static final Permission USE_CREDENTIALS
-
USE_SIP
public static final Permission USE_SIP
-
VIBRATE
public static final Permission VIBRATE
-
WAKE_LOCK
public static final Permission WAKE_LOCK
-
WRITE_APN_SETTINGS
public static final Permission WRITE_APN_SETTINGS
-
WRITE_CALENDAR
public static final Permission WRITE_CALENDAR
-
WRITE_CALL_LOG
public static final Permission WRITE_CALL_LOG
-
WRITE_CONTACTS
public static final Permission WRITE_CONTACTS
-
WRITE_EXTERNAL_STORAGE
public static final Permission WRITE_EXTERNAL_STORAGE
-
WRITE_GSERVICES
public static final Permission WRITE_GSERVICES
-
WRITE_HISTORY_BOOKMARKS
public static final Permission WRITE_HISTORY_BOOKMARKS
-
WRITE_PROFILE
public static final Permission WRITE_PROFILE
-
WRITE_SECURE_SETTINGS
public static final Permission WRITE_SECURE_SETTINGS
-
WRITE_SETTINGS
public static final Permission WRITE_SETTINGS
-
WRITE_SMS
public static final Permission WRITE_SMS
-
WRITE_SOCIAL_STREAM
public static final Permission WRITE_SOCIAL_STREAM
-
WRITE_SYNC_SETTINGS
public static final Permission WRITE_SYNC_SETTINGS
-
WRITE_USER_DICTIONARY
public static final Permission WRITE_USER_DICTIONARY
-
WRITE_VOICEMAIL
public static final Permission WRITE_VOICEMAIL
-
PROVIDE_TRUST_AGENT
public static final Permission PROVIDE_TRUST_AGENT
-
ACCESS_WIMAX_STATE
public static final Permission ACCESS_WIMAX_STATE
-
ASEC_ACCESS
public static final Permission ASEC_ACCESS
-
MODIFY_PARENTAL_CONTROLS
public static final Permission MODIFY_PARENTAL_CONTROLS
-
BIND_INCALL_SERVICE
public static final Permission BIND_INCALL_SERVICE
-
ACCESS_ALL_EXTERNAL_STORAGE
public static final Permission ACCESS_ALL_EXTERNAL_STORAGE
-
CAMERA_DISABLE_TRANSMIT_LED
public static final Permission CAMERA_DISABLE_TRANSMIT_LED
-
READ_SEARCH_INDEXABLES
public static final Permission READ_SEARCH_INDEXABLES
-
CHANGE_BACKGROUND_DATA_SETTING
public static final Permission CHANGE_BACKGROUND_DATA_SETTING
-
CAPTURE_TV_INPUT
public static final Permission CAPTURE_TV_INPUT
-
GET_DETAILED_TASKS
public static final Permission GET_DETAILED_TASKS
-
WRITE_MEDIA_STORAGE
public static final Permission WRITE_MEDIA_STORAGE
-
MOVE_PACKAGE
public static final Permission MOVE_PACKAGE
-
LAUNCH_TRUST_AGENT_SETTINGS
public static final Permission LAUNCH_TRUST_AGENT_SETTINGS
-
RECOVERY
public static final Permission RECOVERY
-
FORCE_STOP_PACKAGES
public static final Permission FORCE_STOP_PACKAGES
-
GLOBAL_SEARCH_CONTROL
public static final Permission GLOBAL_SEARCH_CONTROL
-
CONTROL_WIFI_DISPLAY
public static final Permission CONTROL_WIFI_DISPLAY
-
READ_PRECISE_PHONE_STATE
public static final Permission READ_PRECISE_PHONE_STATE
-
FRAME_STATS
public static final Permission FRAME_STATS
-
WRITE_DREAM_STATE
public static final Permission WRITE_DREAM_STATE
-
MANAGE_ACTIVITY_STACKS
public static final Permission MANAGE_ACTIVITY_STACKS
-
NET_TUNNELING
public static final Permission NET_TUNNELING
-
START_ANY_ACTIVITY
public static final Permission START_ANY_ACTIVITY
-
FILTER_EVENTS
public static final Permission FILTER_EVENTS
-
START_TASKS_FROM_RECENTS
public static final Permission START_TASKS_FROM_RECENTS
-
STOP_APP_SWITCHES
public static final Permission STOP_APP_SWITCHES
-
SET_KEYBOARD_LAYOUT
public static final Permission SET_KEYBOARD_LAYOUT
-
BLUETOOTH_STACK
public static final Permission BLUETOOTH_STACK
-
ASEC_CREATE
public static final Permission ASEC_CREATE
-
RECEIVE_EMERGENCY_BROADCAST
public static final Permission RECEIVE_EMERGENCY_BROADCAST
-
ACCESS_INPUT_FLINGER
public static final Permission ACCESS_INPUT_FLINGER
-
BIND_PACKAGE_VERIFIER
public static final Permission BIND_PACKAGE_VERIFIER
-
ACCESS_KEYGUARD_SECURE_STORAGE
public static final Permission ACCESS_KEYGUARD_SECURE_STORAGE
-
COPY_PROTECTED_DATA
public static final Permission COPY_PROTECTED_DATA
-
ASEC_RENAME
public static final Permission ASEC_RENAME
-
RETRIEVE_WINDOW_TOKEN
public static final Permission RETRIEVE_WINDOW_TOKEN
-
REMOTE_AUDIO_PLAYBACK
public static final Permission REMOTE_AUDIO_PLAYBACK
-
MODIFY_NETWORK_ACCOUNTING
public static final Permission MODIFY_NETWORK_ACCOUNTING
-
READ_NETWORK_USAGE_HISTORY
public static final Permission READ_NETWORK_USAGE_HISTORY
-
REMOVE_DRM_CERTIFICATES
public static final Permission REMOVE_DRM_CERTIFICATES
-
MANAGE_USERS
public static final Permission MANAGE_USERS
-
MODIFY_AUDIO_ROUTING
public static final Permission MODIFY_AUDIO_ROUTING
-
UPDATE_APP_OPS_STATS
public static final Permission UPDATE_APP_OPS_STATS
-
READ_INSTALL_SESSIONS
public static final Permission READ_INSTALL_SESSIONS
-
UPDATE_LOCK
public static final Permission UPDATE_LOCK
-
CONFIRM_FULL_BACKUP
public static final Permission CONFIRM_FULL_BACKUP
-
PACKAGE_USAGE_STATS
public static final Permission PACKAGE_USAGE_STATS
-
CONTROL_KEYGUARD
public static final Permission CONTROL_KEYGUARD
-
TRUST_LISTENER
public static final Permission TRUST_LISTENER
-
PACKAGE_VERIFICATION_AGENT
public static final Permission PACKAGE_VERIFICATION_AGENT
-
C2D_MESSAGE
public static final Permission C2D_MESSAGE
-
RECEIVE_BLUETOOTH_MAP
public static final Permission RECEIVE_BLUETOOTH_MAP
-
BIND_REMOTE_DISPLAY
public static final Permission BIND_REMOTE_DISPLAY
-
ALLOW_ANY_CODEC_FOR_PLAYBACK
public static final Permission ALLOW_ANY_CODEC_FOR_PLAYBACK
-
BIND_JOB_SERVICE
public static final Permission BIND_JOB_SERVICE
-
GRANT_REVOKE_PERMISSIONS
public static final Permission GRANT_REVOKE_PERMISSIONS
-
ACCESS_DRM_CERTIFICATES
public static final Permission ACCESS_DRM_CERTIFICATES
-
READ_WIFI_CREDENTIAL
public static final Permission READ_WIFI_CREDENTIAL
-
TV_INPUT_HARDWARE
public static final Permission TV_INPUT_HARDWARE
-
GET_APP_OPS_STATS
public static final Permission GET_APP_OPS_STATS
-
BIND_KEYGUARD_APPWIDGET
public static final Permission BIND_KEYGUARD_APPWIDGET
-
MODIFY_APPWIDGET_BIND_PERMISSIONS
public static final Permission MODIFY_APPWIDGET_BIND_PERMISSIONS
-
ASEC_MOUNT_UNMOUNT
public static final Permission ASEC_MOUNT_UNMOUNT
-
MANAGE_VOICE_KEYPHRASES
public static final Permission MANAGE_VOICE_KEYPHRASES
-
MANAGE_MEDIA_PROJECTION
public static final Permission MANAGE_MEDIA_PROJECTION
-
OEM_UNLOCK_STATE
public static final Permission OEM_UNLOCK_STATE
-
SHUTDOWN
public static final Permission SHUTDOWN
-
SET_SCREEN_COMPATIBILITY
public static final Permission SET_SCREEN_COMPATIBILITY
-
SERIAL_PORT
public static final Permission SERIAL_PORT
-
BIND_DIRECTORY_SEARCH
public static final Permission BIND_DIRECTORY_SEARCH
-
CONFIGURE_WIFI_DISPLAY
public static final Permission CONFIGURE_WIFI_DISPLAY
-
CONTROL_INCALL_EXPERIENCE
public static final Permission CONTROL_INCALL_EXPERIENCE
-
CRYPT_KEEPER
public static final Permission CRYPT_KEEPER
-
SCORE_NETWORKS
public static final Permission SCORE_NETWORKS
-
ACCESS_CACHE_FILESYSTEM
public static final Permission ACCESS_CACHE_FILESYSTEM
-
BLUETOOTH_MAP
public static final Permission BLUETOOTH_MAP
-
MANAGE_USB
public static final Permission MANAGE_USB
-
CHANGE_WIMAX_STATE
public static final Permission CHANGE_WIMAX_STATE
-
SET_WALLPAPER_COMPONENT
public static final Permission SET_WALLPAPER_COMPONENT
-
ACCESS_NETWORK_CONDITIONS
public static final Permission ACCESS_NETWORK_CONDITIONS
-
READ_PRIVILEGED_PHONE_STATE
public static final Permission READ_PRIVILEGED_PHONE_STATE
-
INTERACT_ACROSS_USERS
public static final Permission INTERACT_ACROSS_USERS
-
ASEC_DESTROY
public static final Permission ASEC_DESTROY
-
INVOKE_CARRIER_SETUP
public static final Permission INVOKE_CARRIER_SETUP
-
RECEIVE_DATA_ACTIVITY_CHANGE
public static final Permission RECEIVE_DATA_ACTIVITY_CHANGE
-
RETRIEVE_WINDOW_CONTENT
public static final Permission RETRIEVE_WINDOW_CONTENT
-
ACCESS_NOTIFICATIONS
public static final Permission ACCESS_NOTIFICATIONS
-
BACKUP
public static final Permission BACKUP
-
STATUS_BAR_SERVICE
public static final Permission STATUS_BAR_SERVICE
-
NFC_HANDOVER_STATUS
public static final Permission NFC_HANDOVER_STATUS
-
CONNECTIVITY_INTERNAL
public static final Permission CONNECTIVITY_INTERNAL
-
MANAGE_DEVICE_ADMINS
public static final Permission MANAGE_DEVICE_ADMINS
-
PERFORM_CDMA_PROVISIONING
public static final Permission PERFORM_CDMA_PROVISIONING
-
CAPTURE_AUDIO_HOTWORD
public static final Permission CAPTURE_AUDIO_HOTWORD
-
INTERACT_ACROSS_USERS_FULL
public static final Permission INTERACT_ACROSS_USERS_FULL
-
REMOVE_TASKS
public static final Permission REMOVE_TASKS
-
ACCESS_MTP
public static final Permission ACCESS_MTP
-
HDMI_CEC
public static final Permission HDMI_CEC
-
BROADCAST_SCORE_NETWORKS
public static final Permission BROADCAST_SCORE_NETWORKS
-
BIND_CONNECTION_SERVICE
public static final Permission BIND_CONNECTION_SERVICE
-
BIND_CONDITION_PROVIDER_SERVICE
public static final Permission BIND_CONDITION_PROVIDER_SERVICE
-
READ_DREAM_STATE
public static final Permission READ_DREAM_STATE
-
USER_ACTIVITY
public static final Permission USER_ACTIVITY
-
BIND_PRINT_SPOOLER_SERVICE
public static final Permission BIND_PRINT_SPOOLER_SERVICE
-
MANAGE_CA_CERTIFICATES
public static final Permission MANAGE_CA_CERTIFICATES
-
MANAGE_NETWORK_POLICY
public static final Permission MANAGE_NETWORK_POLICY
-
NET_ADMIN
public static final Permission NET_ADMIN
-
FREEZE_SCREEN
public static final Permission FREEZE_SCREEN
-
REAL_GET_TASKS
public static final Permission REAL_GET_TASKS
-
SET_INPUT_CALIBRATION
public static final Permission SET_INPUT_CALIBRATION
-
TEMPORARY_ENABLE_ACCESSIBILITY
public static final Permission TEMPORARY_ENABLE_ACCESSIBILITY
-
ACCESS_CONTENT_PROVIDERS_EXTERNALLY
public static final Permission ACCESS_CONTENT_PROVIDERS_EXTERNALLY
-
LOOP_RADIO
public static final Permission LOOP_RADIO
-
BIND_TRUST_AGENT
public static final Permission BIND_TRUST_AGENT
-
READ_CELL_BROADCASTS
public static final Permission READ_CELL_BROADCASTS
-
-
Method Detail
-
addedInAPILevel
public int addedInAPILevel()
Returns the API version the permission was added in- Returns:
-
isDeprecated
public boolean isDeprecated()
Returns true if the permission has been deprecated in the latest API version- Returns:
-
getDeprecatedInAPILevel
public int getDeprecatedInAPILevel()
Returns the API level this permission was deprecated in or -1 if not deprecated- Returns:
-
getReference
public java.lang.String getReference()
Returns the reference information for the source of this permission or an empty string if there is no available reference- Returns:
-
getQualifiedName
public java.lang.String getQualifiedName()
Returns the qualified permission name- Returns:
-
getSimpleName
public java.lang.String getSimpleName()
Returns an unqualified permission name- Returns:
-
getDescription
public java.lang.String getDescription()
Returns a description of the permission- Returns:
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getPermissionByQualifiedName
public static Permission getPermissionByQualifiedName(java.lang.String qualifiedName)
Returns the permission object matching the qualified permission name or null if the permission is not found in the known permissions list- Parameters:
qualifiedName
-- Returns:
-
getPermissionBySimpleName
public static Permission getPermissionBySimpleName(java.lang.String simpleName)
Returns the permission object matching the simple permission name or null if the permission is not found in the known permissions list- Parameters:
simpleName
-- Returns:
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
getAllPermissions
public static java.util.Collection<Permission> getAllPermissions()
Returns a collection of all known permissions (the union of all known documented and undocumented permissions)- Returns:
-
getAllDocumentedPermissions
public static java.util.Collection<Permission> getAllDocumentedPermissions()
Returns a collection of all known documented permissions- Returns:
-
getAllUndocumentedPermissions
public static java.util.Collection<Permission> getAllUndocumentedPermissions()
Returns a collection of all known undocumented permissions- Returns:
-
-


The Battle of Thermopylae
The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece. It took place at the narrow coastal pass of Thermopylae, or 'The Hot Gates'. The Persian leader, Xerxes, had amassed a huge army and Navy and sought to overtake Sparta for not pledging fielty.
A Greek force of approximately 7,000 men marched north to block the pass in the summer of 480 BC. The Persian army, being of about 100,000 to 150,000 strong, arrived at the pass in late August or early September. The vastly outnumbered Greeks held off the Persians for seven days before the rear-guard was annihilated in one of history's most famous last stands. During two full days of battle the small force led by King Leonidas blocked the only road by which the massive Persian army could pass.
After the second day of battle a local resident named Ephialtes betrayed the Greeks by revealing a small path that led behind the Greek lines. Leonidas, aware that his force was being outflanked, dismissed the bulk of the Greek army and remained to guard the rear with 300 Spartans, 700 Thespians, 400 Thebans and perhaps a few hundred others, most of whom were killed.
Spartan Legacy
The Battle of Thermopylae has been used often as a timeless example of the power of patriotism and strategy on native soil. Using the terrain as a funnel, the Spartans and Greeks were able to hold their ground whilst being severely outnumbered for a rather long length of time. This battle has become a symbol of courage against overwhelming odds.
The Battle of Thermopylae has remained an icon of western civilization ever since it was fought. The battle is revisited in countless adages, in literature in song, and in films, television programs and video games. The battle is discussed in many books and articles on the theory and practice of warfare. The movies The 300 Spartans (1962) and 300 (2007) were based on the events during and close to the time of the battle.


Death of toddler at Scottish hospital investigated by police
by Scotsman ReporterThe death of a three-year-old boy at a Scottish hospital two years ago is being invesitgated by police.
The toddler died at a unit within Queen Elizabeth University Hospital in Glasgow on August 9 2017.
The Scottish Mail on Sunday reports the boy passed away in the same unit as 10-year-old Milly Main who died three weeks later.
The ward he was treated on was later closed because of fears over water contamination, the paper reported.
A Crown Office spokesman said: "The Procurator Fiscal has received a report in connection with the death of a three-year-old boy at the Queen Elizabeth University Hospital on 9 August 2017.
"The investigation into the death, under the direction of Scottish Fatalities Investigation Unit (SFIU), is ongoing and the family will continue to be kept updated in relation to any significant developments."
READ MORE - House sealed off since Friday by police after 'unexplained' death of 5-month-old baby in Livingston
READ MORE - Netflix in talks on funding Skye film mentoring plan


Here I am describing some points in migrating static HTML pages to Drupal 7 with the full i18n (Internationalization) features incorporated. I am no expert, or rather am a qualified novice of Drupal. So, I am not surprised if there are some features I still misunderstand, despite my good effort to perfect it… On the other hand, I suppose I here cover some points beginners may often find hard to understand, because, well, I have experienced a bucket load of those and banged a wall countless times out of frustration!
First, the migration module, migrate_goo
, I have used is available from
https://github.com/masasakano/migrate_goo
README.txt
in the repository explains all about it.
Also, there are extensive comments written in the codes, particularly in the main code allbutbook.inc.php
It is by no means the generic module — or, there is no generic module for migration, nor generic i18n feature, after all, given how varied developers' demands are… But if migration to Drupal or i18n in Drupal is new to you as I was, you can use it as a template and it may help you! At least I had experienced a great difficulty, before I finally made it about right…
This document does not contain any code. Instead, it describes the points to be aware of, and the strategy to tackle with the problems in migration of HTMLs with i18n. For a specific example code, please have a look at my code in Github.
In a word, anything that works for you!
As I understand, there are 3 major modules for migration:
import_html is specialised for importing HTMLs, and is quite simple. Migrate is the other end of the spectrum and offers a greatest flexibility, but with the price of somewhat complicated setup — in short you have to write your own child module, inherited from Migrate.
However, as I found out, the import_html module does not work well for the nodes that contain UTF-8 characters, hence for those international sites, it is not an option; See https://www.drupal.org/node/2339097
Besides, if you want to deal with the i18n properly, I am afraid there is no short-cut, you have to bite a bullet and tackle with the Migrate module. But don't worry, it is still a lot easier than the fully manual import! Among many features in Migrate, the rollback capability stands out; basically you can undo what you have done any time in just a few key-strokes. I suppose it is pretty common to repeat perhaps many trial-and-errors in developing/migrating the i18n-featured site. This rollback feature is I found a blessing.
This document explains how to deal with it, using Migrate, for one sample case. During my migration, I have inevitablly tried out many other choices; even though they didn't work out well for me, some of them may suit your need, so I describe about them when I can.
The following is the list I have aimed and achieved.
The following modules were essential to achieve the above-mentioned goal for me:
What you need is entirely up to your demand! You may need a lot more or lot less or lot different.
I set up as follows. In particular the i18n setting can vary a lot, depending on your demands. And I am afraid, if your setting is quite different from mine, my way of the migration may not work for you. But my template code is up for grabs anyway, so you can adjust as you like!
I prepared a new taxonomy for the imported HTMLs, so that it will be easy for me to categorise those nodes of HTML-files in Drupal after they are imported. The path of each HTML-file is anyway preserved, so this can be just redundant.
I set up a new content type for the imported HTMLs. Obviously you can use an existing one, be it your custom one or standard one like Basic Page.
I can think of two major advantages to create the new content types.
Whether you use a custom content type or existing one, make sure the language you are trying to import is defined and allowed for the content type. In particular if the language-neutral is set to be not allowed for the content type, you must set a language for every single node you are importing.
In /admin/config/regional/language/configure
for the detection methods of languages,
I have done the followings:
This is where people's preference vary… But my module is written on the basis of these settings.
Which user are you going to assign for the newly imported HTML-based nodes? The administrator (uid=1) is the easiest (as I chose), as whatever you do, none of your actions will be prevented due to the permission, though to be fair, it would be a double-edged sword. In my case, I needed a small piece of PHP code (to achieve one of the i18n features in Drupal) to be embedded in some HTMLs; that is not permitted to any user but the administrator in default.
If you assign any other user for creating the new node, make sure the user have a right permission for your job. Or, alternatively you can complete the job of migration as the administrator and later change the ownership of those imported nodes to a particular user, if you wish.
This is quite important.
Legacy HTMLs could have all sorts of cock-ups, particularly if they were hand-written, or edited by more than one person or software. Also, it is not uncommon they have a dirty rendering with the table tag etc or they have hard-coded navigation-bar type stuffs or even adverts. Another important point is the character code. Contents, particularly those in non US-English language, can have all sorts of character code, and they may not be even self-consistent, that is, the character code its HTML header declares may be different from the actual one. Even US-English contents could easily have some Windows-specific characters, which could break down the things in importing/migrating.
Personally I have preprocessed all the HTML-files with a separate
script, and at the end of the script I ran the handy command-line
tool tidy
to guarantee the input HTMLs are legitimate,
while converting the character code into UTF-8 and
preserving the modification times of the files.
During migration/import you can do the clean-up job to some extent, or maybe to a great extent, in the php code of your migration module. But at least you may as well be aware if the character code is different from what you assumed, PHP may not behave as you expect.
The detail is beyond the scope of this document. I hope your files are not too evil…
In my case, the following is the situation of i18n for the static HTML, which is basically based on the suffix-based language-negotiation of the Apache server. My aim is to reproduce the i18n feature in the Drupal-powered site after migration.
lang
attribute of the html
tag may or may not exist..en.html
or .en.us.html
without exception..jis.html
or .jp.jis.html
or simply .html
without exception../info/
, there is no ./info.html
etc./node/12345
type, but like /info/foobaa.html
.info/foo.en.html
→ info/foo.html
.
The original path is redirected to the new one, if they differ.info/foo.jis.html
and info/foo.en.html
have the same path name of info/foo.html
./info/foo.html
in Japanese or English environment, the path s/he sees on the browser's address bar will be /ja/info/foo.html
and /en/info/foo.html
, respectively (the standard i18n behaviour in Drupal, in the path-prefix preferred language-detection configuration).info
→ info/index.html
.
http://old.example.com/info/baa.en.html
will become
http://new.example.com/info/baa.html
.
There is no crash of the names between the imported and existing top directories.Here is the outline (flow-chart) of the migration (importing) of the static HTML-files to Drupal 7 with the i18n feature, while preserving the legacy paths. I am sure there are other ways, and maybe ever better ways, but the following works (or worked for me).
I assume you have a basic understanding how the process of migration with the Migrate module works.
MigrateSourceList
class to define the HTML files to import.prepareRow()
the path of each file (aka row) is passed. With this:
QueryPath
library),QueryPath
!),tnid
(Translation Node-ID) is left undefined, aka language-neutral, in Japanese HTMLs at the time of processing of
the Japanese HTMLs class.tnid
of Japanese nodes is set in prepare()
while processing
the English HTMLs class, where the relation between translation and source nodes is set.complete()
at the stage of processing each of the Japanese and English HTMLs classes, the redirection of the legacy URIs is set.The path and i18n features, both of which are a part the core modules in Drupal 7, are heavily related to each other. First, let me recap how the Drupal path module works. If you already understand it well, skip this section to the next one.
The default path to access a content in Drupal is via its unique node-ID with
the URI like
http://example.com/node/12345
(hereafter referred to this type of the path as "node-type path",
usually written without the domain part).
The node-type paths are very machine-like. Also, it is bad for the SEO (Search-Engine Optimisation), which is not surprising, given this type of paths can well be one of a horde of machine-generated pages. Another potential downside is, it is less portable, because potential migration to any (CMS) system, including another Drupal system, can be problematic.
For the nodes of imported HTMLs, the node-type paths are even worse, because
most internal hyper-links to a relative path hard-coded in the anchor tag in the HTML
would not work if the node is called with the node-type paths
like /node/12345
.
For example, when the hard-coded relative path is ./baa.html
,
the browser interpret it as /node/baa.html
.
However, obviously there is no node with the path /node/baa.html
,
as any node-ID is by definition a number.
Hence those links break (dead links).
(There are exceptional cases where the relative path can work. Can you guess?
— a little, if pointless, quiz for you.)
That is where the path module comes in handy.
If the path module is enabled, you can set a more human-readable path of
your preference for each node, such as, /doc/about/about_myself
and open the node with the path. In this case,
http://example.com/doc/about/about_myself
(I hereafter refer to this type of paths
as "primary-path", usually written without the domain part.
The standard term for it in Drupal is
"URL Alias", but in this case, where we also use redirect
module,
I thought this term might be a little confusing).
Note in setting the primary-path (aka URL Alias in the editing panel of a node),
you should not insert the forward-slash at the beginning; for example, input
info/foo
as opposed to
/info/foo
The latter doesn't do any harm practically, apart from the fact the path will have
a duplicated forward-slash.
More importantly, do not include a trailing forward-slash at the end,
as the path would not work.
I should note the original way of the node-type path like
/node/12345
is still valid, even after you set the primary-path,
and is sometimes even useful for debugging purposes. Although the existence
of multiple URIs for the same content can be penalised by search-engines,
unless you make a hyperlink to those node-type paths
from one of the public pages, the rest of the world, including search-engines,
would not know its existence, so it has no impact for the rating by search-engines.
For your general information, the pathauto
module is recommended,
if you haven't installed and enabled it. It automatically generates
a human-readable primary-path, when a new node is created, unless you specify your own.
Hence, in many cases it saves a bit of your work.
In our migration, you don't need it, as the primary-path for each node must be set,
based on the directory and filename of its original HTML file.
Now, let's move on to a more complicated one, the i18n module.
I think the complication is not because Drupal's i18n feature is designed badly or something, but simply because the i18n is inherently complicated, as the site builders' preferences vary so widely! In particular, the i18n feature in Drupal may not well match the traditional suffix-based language negotiation system in the Apache server. So, if you are used to the Apache server's way for the static HTML-files, it may not be straightforward to grasp what Drupal does, and can be frustrating (as I experienced…). I am not knowledgeable enough to judge whether the Drupal's i18n feature is the best design or not. However I do understand why it is designed so as the generic module to satisfy the wide-range demands by different site builders.
To understand how the Drupal i18n module works is essential to make your site right, then to consider how you migrate the HTMLs to Drupal. In this section I explain it and how to work around in our migration.
Throughout this section, I assume node-ID of 111 and 222 have the contents of English and Japanese, respectively. In Drupal, the node-ID is unique for each content page, and a translation of a node has always a separate ID from the original one (source-language; explained in detail in the later section). So, to use a node-ID is the least confusing way to refer as to what content/node I am talking about.
The language of a page in a website has 2 meanings (at least):
In Drupal, the default language switcher changes both of the above, as long as the translation of the node is available.
ISO 639 defines all the official language codes, which consist of the family part
and optional sub-code.
For example, the code for English is en
and it can have a sub-code
like en-GB
and en-US
.
Drupal seems (at least from a user's point of view) not to distinguish
the family but treats each of those language-codes as a different one; e.g.,
en-US
and en-GB
are treated as
entirely different languages, rather than varieties in the same family.
In addition to all those language codes, Drupal accepts the language neutral.
In fact it is usually a default language, unless explicitly banned
in the configurations, such as one in Content-Type.
In practice, the language neutral in Drupal means all the languages or any language
(though its constant variable name is LANGUAGE_NONE
,
which would in literal sense imply no language, as opposed to any language!).
In Drupal, every node has a property of a single language, which can be Neutral. Optionally (by enabling it in the i18n configuration), each field in a node can also have its own translation (I think...). But it is basically unrelated with the language of the node.
Also note the language of the node has nothing to do with the character set of the content, and can be set arbitrarily. It is possible (if confusing to any one) to set the language of a node as English, where the main content uses only Japanese characters, and vice versa.
Here I assume
the detection methods of languages
(in /admin/config/regional/language/configure
) is configured
as described in a previous section.
What you see when you access a path depends on what the Drupal server determines
as the language to show, and it depends on the configuration, hence the following
description may not be applicable partially or almost entirely,
if the i18n configuration of your site is different.
First, a node is always viewable via the node-type path like
/node/222
(Japanese, as assumed above).
The language for the interface can be different, determined with
the configurations and environments of both the site and visitors.
If the node is accessed with the language-code prefix like /ja/node/222
,
the language of the interface will follow the prefix — Japanese (ja)
in this example (again, providing the configuration is
set as described).
Now, if the language of a node is set to be neutral, the node can be
accessed and viewed with the primary-path (say, /info/foo_neutral.html
)
in any (language) environment.
When a user accesses a language-netural node like
/info/foo_neutral.html
, the (Drupal default) language-switcher,
if provided, shows the following characteristics:
On the other hand, if the language of a node is set to be a specific one, like English or Japanese, how does it behave? When you access such a node with the primary-path, HTTP 404 ("Page not found") will be returned if the language of the node does not match what the Drupal server determines as your language (and if the node does not have the translations as explained in the following subsections).
This is one of the essential points in the Drupal i18n, and may surprise the uninitiated. If a visitor has been navigated to that page by following the internal links in your site, then as long as you have carefully constructed your website, taking care of the consistency of the language across the site, s/he either sees the page without trouble (as the language setting is right), or would not come to the page in the first place (due to the different language). No problem.
However, if some one visits the same page directly from outside, maybe from a search engine, or through the URI you have advertised somewhere, they may encounter the HTTP 404, depending on their language setting (which they themselves may not be even aware of!). Site-builders of Drupal i18n websites had better be careful on this point.
Now, if such a node is opened successfully, the entire language-setting will be the language of the node, including the interface (n.b., in contrast, in the case of language-neutral, the language of the content can be different from that of the interface). If the default language-switcher is provided, the hyperlinks to the other languages are struck down, and are not available (to click).
Next, a story is getting a little more complicated, though this is unavoidable given you have the same contents in more than one language…
In Drupal, each node can have its counterparts in another language(s) registered (the detailed internal mechanism explained in the later section). Those counterparts are called translation(s) in Drupal. Note the Drupal of course does not check whether the contents are a valid translation or not — it is up to you (or any eligible user) who decides which node is the translation of which. The translation can be a completely unrelated article, if you want.
Suppose you have two nodes in English and Japanese, each of which is the translation of the other, as registered to your Drupal server, and suppose they have their own primary-path set as,
/info/foo_en.html
/info/baa_ja.html
When you access a node via its primary-path (say, /info/baa_ja.html
),
if the language of the node (Japanese in this case) agrees with
what Drupal determines as your language, the node is shown as expected.
If a default language-switcher is provided, and if the translation of the node
is available, visitors can switch to the translation of the node, which also
changes the language of the interface, the same as in
the previous section.
However, if the language of the node (Japanese in the case above) does not agree with what Drupal determines as your language, HTTP 404 ("Page not found") will be returned, because the node is not available in the language. If a default language-switcher is provided, it does show the hyperlink to the translation, so it is possible for the user to navigate to the translation, if s/he wants so and notices(!) the switcher.
If the hyperlink is embedded (hard-coded) in the body of the node, how it works may surprise you, though it is perfectly consistent, if you think how Drupal and browsers work. In short, it depends how the hyperlink is written, namely whether absolute or relative path, in the HTML source.
Suppose you are viewing a page at /ja/other/index_ja.html
,
the language of the node of which is Japanese.
If the hard-coded anchor points to /info/baa_ja.html
,
it is the same as the above — it can return HTTP 404,
depending what Drupal determines as your language.
However, if the hard-coded anchor points to ../info/baa_ja.html
(remember the page you are viewing is under /ja/other/
path),
you will be guided to /ja/info/baa_ja.html
, hence
you are guaranteed to be able to view the page!
I should note one would never see the same (Japanese) page at the path of
/other/index_ja.html
, unless the site-default language
is Japanese and the language-code prefix for the path for the default
language is set to be null. It is different from the configuration
I assume here, so I will skip that (you can guess what would happen,
if interested — I leave it to you).
The next case to look at is that a primary-path is shared with multiple nodes, each of which has a different language and is registered as the translation in the Drupal server. This is actually very realistic to encounter in the migration of i18n static HTML sites.
In a word, it works exactly as the case in the previous subsection, providing all the (default) options to detect the language with the default priority are set as mentioned above.
As an example, suppose
the primary-path is set to be /info/foo.html
for the nodes Node=111 and Node=222, and both of them are registered as
the translation to each other.
Then, each of them can be respectively accessed via,
/en/info/foo.html
(for English) /ja/info/foo.html
(for Japanese)
When an user accesses /info/foo.html
, which language-version is shown
depends what Drupal determines about your language.
Whether Drupal determines your language to be English or Japanese,
it will not return HTTP 404.
Also, the language-switcher, if shown, provides the way to navigate around
the different language versions.
As a note, when setting the primary-path, the path should not include
the language-code prefix; e.g., not ja/info/foo.html
but info/foo.html
(for a Japanese node).
If the former is set, it will break down in some cases, particularly when
it is called from a hard-coded hyperlink in a node — the language-code
can be duplicated in the path like /ja/ja/info/foo.html
and accordingly HTTP 404 will be returned in some cases.
It actually depends on the context, for example, the mechanism for the translation of a node is different from that of a taxonomy. Here I explain only the former.
Whenever a node has a translation(s), one of them is defined as the source node for any translation. You can choose any language for the source-node among those registered in your Drupal site; it does not have to match the default language of the site (the node may not be available in the site-default language anyway!).
The single parameter to hold the relation of translation between the nodes is
tnid
(Translation Node ID?).
It can be either 0, the node number nid
of itself
or of another node, as follows:
LANGUAGE_NONE
): Language-neutral (und).I have repeatedly mentioned the description is applied only when the i18n environment is configured as mentioned above. My choice of the i18n configuration was of course not a priori even for me, and there is a justification for me to have chosen it. Here I am describing some of the points for the different i18n configurations I understand. Which configuration suits you the best is entirely up to you and your preference/objective. I am just providing some selected information, which may be of some help for you in choosing the configuration.
In default, English is the default language of Drupal, and the language code for the path is undefined. It is understandable, because when visitors view those default-setting sites in the site-default language, there is no language-prefix at the head of the path, which you might feel is ugly. Indeed, for those who do not need the i18n feature, the language-code is of course unnecessary, and if they in the future enable the i18n module as the site develops, the null string for the default language-code will guarantee no breakage in the existing contents and features of the site.
However, this default setting with the null-string for the site-default language can lead to a confusing situation for developers (it took a long time for me to figure it out…). Here I explain why, and why I chose to set it explicitly in the end, that is, setting "en" for my site-default language, English.
Suppose the same situation as the subsection
"Access to
a primary-path shared with more than one language", that is,
the primary-path is set to be /info/foo.html
for the
nodes Node=111 (English) and Node=222 (Japanese), and both of them are
registered as the translation to each other. Then, they are
respectively accessed via,
/info/foo.html
(for English) /ja/info/foo.html
(for Japanese)
The Japanese version is exactly the same as the case that the language-code
for the site-default language is defined. However, the case for English
is different. In other words, there is an asymmetry between the languages.
When a user accesses /info/foo.html
,
it will be always the English version and no HTTP 404, no
matter what her/his preferred language in the browser preference is,
because /info/foo.html
is the proper (and sole, apart from
the node-type) path for the English version.
Any other trick to try to display the Japanese version with the path of
/info/foo.html
, such as, adding the session parameter of
?language=ja
, would not work, either, because the URI-based method
is set to be given the highest priority in determining the user's language.
If the hyperlink to that path is included in one of the Japanese pages
as a relative path, the hyperlink works well, because the user must have opened
the page with the path prefixed with /ja/
, hence the hyperlink to
that path naturally follows that with the top directory of /ja/
,
hence clicking the hyperlink will bring up
/ja/info/foo.html
, which is probably the expected behaviour
(Go back and read the subsection
"Access to a translated specific-language node via the unique primary-path"
if you are unsure why).
In particular, this can cause a serious trouble in migrating the legacy HTMLs, which depended on the Apache language-negotiation, as explained below.
Suppose the legacy static HTML site is configured to use the standard
suffix-based language negotiation of the Apache server; when a user
requests a path (file), the server will return the version of the file
in what the server guesses is the user's preferred language, providing
there are more than one version of the languages available for the
path. For example, when a user requests /info/foo.html
,
whereas there are both /info/foo.html.en
(English) and
/info/foo.html.ja
(Japanese) in the server,
either of English or Japanese version of the page will appear,
depending on the environment. Now you have
imported those two files to Drupal, and defined the relation
between the two files as the translations. If the language-code for
the site-default language (English in this case) is null,
/info/foo.html
will never bring up the Japanese version.
In other words, the migration fails to reproduce the feature
in the original legacy site.
You can perhaps set the site-default language as Japanese and nullify
its language-code for the path, ignoring the potential effect for the
rest of your (English) site. Then, the visitors, whose preferred
language of their browser is Japanese, will see the Japanese version
of the page when they access /info/foo.html
. But of
course, English-preferring visitors would not get the English page,
when they access /info/foo.html
, which used to work fine
in the legacy HTML site.
In short, if you want to reproduce the i18n structure of the legacy HTML sites as described above, you should not leave asymmetry between the languages in the Drupal site, but had better set the language-code path prefix for all the languages.
Then, /info/foo.html
does not belong to the particular language
any more, and so when a user accesses it, the language will be determined
with the subsequent parameters set in the i18n configuration, that is,
Session, User, Browser in this order in default.
You can disable the language selection by Drupal based on the URL prefix entirely. For example, Google.com seems to decide the language of the page, depending on the user's browser's preference and where the accessed IP is located geographically (the latter is not included in the default Drupal i18n functionality). That is another way for sure.
Note that showing different contents for the same URI, just depending on user's setting or session parameters, can be bad for SEO, and be penalised in the rating by search engines, allegedly (though that is exactly what Google.com is doing!).
There is a bug in Drupal i18n reported at drupal.org:
"Language detection based on session doesn't work with URL aliases".
If you access a path with the session parameter, the URL aliases of the path module do
not work as of October 2014. For example, if you access
to /info/foo.html?language=ja
it will bring up a path
like /node/222
.
Finally!
Here I am describing how I have done that.
There must be countless preferences for the i18n settings and how you migrate.
So, this is just an example.
As summarised in the list in a previous section, I set the language of the imported node as Neutral in default, but if the node has the translation, the language of the node is set to be so accordingly.
To set the language appropriately for the nodes with translation, as well as to register their relation as translation, is mandatory to activate the i18n feature in Drupal. However if the language of a node is set to be something specific (like Japanese), and if the node does not have a translation to another language (say, English), the page will not show up and return HTTP 404, when English-preferring visitors access the generic URI of the Japanese node without the language-code path prefix. I have no reason to prevent (or make awkeard) those English-preferring visitors from viewing my Japanese contents, particularly given they are anyway very likely to know the contents will be in Japanese before accessing the node (as that is how the legacy HTML site was built).
The way to prevent those annoying HTTP 404 is to make the node language-neutral.
This means the code in my migration module must set the language of each node, judging whether the translation exists or not.
The most important thing in i18n is to register the translations
between the created nodes, imported from the HTML files, to Drupal,
that is, to set tnid
of each node appropriately.
It is not quite straightforward, because you don't know the node-ID of
each node (HTML-file) before importing. It is possible to assign a
specific node-number to each HTML-file in migration and to have a
total control over node-ID and tnid
, if you want. But if
you do that, you must be aware of potential crash of node-numbers with
existing nodes, and moreover, your code must somehow remember the
relation between each node-number and HTML-file. A fairly complicated
stuff.
Unlike migration from a database (for a CMS), one thing the migration from the static HTML does not care is a node-ID number. Then you may as well leave the job of numbering of node-IDs to Drupal, unless you are planning some post-migration processing based on the node-IDs.
One of the ways to assign tnid
is,
tnid
of those, referring to the node-ID of the source-language HTMLs in your Drupal database,tnid
of the source-language nodes that have a translation, to point to its own node-ID.More detail is explained in the Technical flow-chart section, and the full-source code of my case is available at GitHub.
A language-switcher block is available in default in Drupal (or, there are other user-contributing modules for it as well). The default one is fairly basic, but does I think a good job. It provides the hyperlink to the translation of the node to another language(s), if available. If not, the word of the unavailable language is struck so the users know there is no translation available. Nice.
So I decided to show the language-switcher in the imported pages (in a side-bar). The legacy HTML pages have some hard-coded anchors to the translation when available. But the default language-switcher block would give more unified taste and convenience across the site. Nice.
A thing is, the language in the website has at least two meanings, as explained in the previous section, namely that of the interface and of main body of the node.
In my case of migration, the language of all the imported nodes that have no translation is set to be neutral. That means practically, in all the imported pages, both the languages (English and Japanese) look available in the language-switcher Because, when the language of the node is neutral, the hyperlink to the other language merely changes the language of the interface (see a previous section for detail), whereas when the node has a translation, the hyperlink to the other language is the link to the translation. It is no good. The language-switcher has a double meaning in this case. And, users could not tell if the translation is available or not before they click the hyperlink to the other language in the language switcher (and most likely find no success, as a vast majority of the imported nodes have no translation).
A solution would be to find a, or develop my own, language-switcher, which clearly distinguishes the two meanings of the languages of the site. Another (easier) way is simply to disable (not show) the language-switcher in those language-neutral nodes; then users can tell if the translation (or strictly speaking, the content of the same context in the other language) is available or not for the node they are browsing.
I took the latter approach; I used the two-tier system to implement the feature, configuring as follows (I am using the default Block module of Drupal 7):
Unfortunately, the context for "not language-neutral" is unavailable in default
(See https://www.drupal.org/node/2351335).
So I have developed the little module (langnonecontext
) for it,
and used the implemented context in the
context module:
http://github.com/masasakano/langnonecontext
In the suffix-based language-negotiation system in the Apache server,
when a user request a full filename, like index.html.en
,
the web server returns the node in the language specified.
This path (filename) can be used as an anchor from any of the HTML files.
The default Drupal i18n configuration (as mentioned above) is similar, except the language-code is the prefix as the root path.
Unfortunately they don't match well. Think of the case the anchor points to
the translation as the relative path in a HTML; e.g.,
the anchor to ./index.html.en
embedded in the file
/info/uk/index.html.ja
. If the anchor is in the form of
an absolute path, it is simpler, but still needs rewriting of the path
to switch the language in Drupal.
To make the long story short, I have solved this problem by replacing all those anchor tags that points to a relative URI of a file in the different language with a small PHP code, which on the fly create the absolute path with the language-code prefix. For the absolute path, the language-code prefix is added at the head of the hard-coded path. My migration script does these during the processing, when it reads each HTML and extracts the required information from it.
Note the user (author) assigned to those imported nodes must be given a permission to include the PHP code in the body of the node.
See my code in my module for detail; the corresponding part is commented well.
To keep some legacy URIs in the Drupal site, I use the
Redirect module
to redirect those legacy URIs to the corresnpoinding primary-path.
I have introduced the more modern style URI as the primary-path.
In short, the language-related suffix in the original HTML path (e.g.,
/ja
) should be eliminated and the directory-type paths be
redirected to their corresponding index file, as summarised in
a previous section.
An example of the latter is, /info
→ /info/index.html
.
I should note the other way around
(e.g., /info/index.html
→ /info
) would not work well.
The following explains why.
Suppose the primary-path is defined as info/uk
(for the
original filename of /info/uk/index.html
). Note a
trailing forward-slash must not be included as the primary-path.
Then, a hyperlink anchored from /info/uk
(i.e., /info/uk/index.html
in the legacy site)
with a relative path of, say, ./baa.html
, is recognised
by the users' browsers as /info/baa.html
, as opposed to
the correct /info/uk/baa.html
. Therefore if a user tries
to open the link by clicking the anchor, the browser sends a request
of /info/baa.html
, which will cause HTTP 404 — dead
link. It is the correct interpretation for the browser. If the
original path was /info/uk/
, it would work as expected,
but it is not the case in Drupal (path module).
To summarise the settings of the (primary-)path and redirections, the
file like /info/index.jis.html
(Japanese) requires the
following three settings:
info/index.html
info/index.jis.html
→ info/index.html
info
→ info/index.html
It is the same for the file /info/index.en.html
(English), except
in practice "Redirect 2" is not set while processing the file,
because it would have been already set while processing /info/index.jis.html
.
The other files than index files do not need the "Redirect 2".
If the original file does not contain the language-related suffix, like
/info/france.html
, the "Redirect 1" is not needed, either,
and the primary-path is all it needs.
As discussed,
the primary-path should never include the language-code prefix,
and so should not the redirection.
Also, the node-type path should not be used anywhere, including
the redirection, as discussed separately.
That is why info/index.jis.html
can not be set as a direct redirection
to the Japanese version of the node like
/ja/info/index.html
or /node/222
.
A request to the URI of info/index.jis.html
(Japanese index),
where info/index.en.html
(English index) also existed in the legacy HTMLs,
works as follows:
http://example.com/info/index.jis.html
http://example.com/info/index.html
http://example.com/en/info/index.html
(English)http://example.com/ja/info/index.html
(Japanese)http://example.com/ja/doc/gear.html
)
http://example.com/ja/info/index.jis.html
http://example.com/ja/info/index.html
(Japanese)http://example.com/en/doc/gear.html
)
http://example.com/ja/info/index.jis.html
http://example.com/ja/info/index.html
(Japanese)/ja/
, such as,
http://example.com/ja/doc/links.html
,
(n.b., this is expected, as long as the user has followed the internal links
to come to the current path),
http://example.com/doc/links.html
),


Agile working
Delivery methods and processes.
Intro to agile
Learn about agile.
Sprint goals
Setting sprint goals.
Show and tells
Running a show and tell.
Multi-disciplinary team
Working in a multi-disciplinary team.
Minimum viable products
Defining a minimum viable product.